From 30bf1e8a2c356c869cb6a4cf165159f769ce24b7 Mon Sep 17 00:00:00 2001 From: ricomateo Date: Thu, 13 Nov 2025 17:18:39 -0300 Subject: [PATCH 01/15] fix: compilation warnings --- app/src/App.tsx | 1 - app/src/components/Deposit.tsx | 2 +- app/src/components/Withdraw.tsx | 4 ++-- app/src/config/passkey_config.tsx | 2 +- app/src/pages/Deposit.tsx | 3 +-- app/src/pages/Withdraw.tsx | 3 +-- app/src/utils/passkeyAccounts.ts | 2 +- app/src/utils/token.ts | 5 ++--- 8 files changed, 9 insertions(+), 13 deletions(-) diff --git a/app/src/App.tsx b/app/src/App.tsx index d029271..934f756 100644 --- a/app/src/App.tsx +++ b/app/src/App.tsx @@ -1,5 +1,4 @@ import { BrowserRouter as Router, Routes, Route } from "react-router-dom"; -import { Bridge } from "./pages/Bridge"; import { Header } from "./components/Header"; import { AccountAbstraction } from "./pages/AccountAbstraction"; import { Deposit } from "./components/Deposit"; diff --git a/app/src/components/Deposit.tsx b/app/src/components/Deposit.tsx index c527c9d..4f08311 100644 --- a/app/src/components/Deposit.tsx +++ b/app/src/components/Deposit.tsx @@ -5,7 +5,7 @@ import { useDeposit, useWatchDepositInitiated } from "../hooks/deposit"; export const Deposit: React.FC = () => { const [amount, setAmount] = useState(""); - const { address } = useAccount(); + useAccount(); const { data, isPending, isSuccess: isTxSuccess, deposit } = useDeposit({ amount: parseEther(amount) }) const { isLoading, isSuccess: isTxReciptSuccess } = useWaitForTransactionReceipt({ hash: data }) const { switchChain } = useSwitchChain() diff --git a/app/src/components/Withdraw.tsx b/app/src/components/Withdraw.tsx index 3d52b26..103806d 100644 --- a/app/src/components/Withdraw.tsx +++ b/app/src/components/Withdraw.tsx @@ -11,8 +11,8 @@ export const Withdraw: React.FC = () => { const [withdrawnAmount, setWithdrawnAmount] = useState(0n); const { data, isPending, isSuccess, withdraw } = useWithdraw({ amount: parseEther(amount) }) const [proof, setProof] = useState(null); - const { data: dataClaim, isPending: isPendingCLaim, isSuccess: isSuccessClaim, claimWithdraw } = useClaimWithdraw({ amount: withdrawnAmount, proof: proof as WithdrawalProof }); - const { data: dataReceipt, isLoading, isSuccess: isTxReciptSuccess, error } = useWaitForTransactionReceipt({ hash: dataClaim }) + const { data: dataClaim, isPending: _isPendingCLaim, isSuccess: _isSuccessClaim, claimWithdraw } = useClaimWithdraw({ amount: withdrawnAmount, proof: proof as WithdrawalProof }); + const { data: _dataReceipt, isLoading: _isLoading, isSuccess: isTxReciptSuccess, error: _error } = useWaitForTransactionReceipt({ hash: dataClaim }) const client = usePublicClient() const { switchChain, switchChainAsync } = useSwitchChain() diff --git a/app/src/config/passkey_config.tsx b/app/src/config/passkey_config.tsx index 2111f7a..ed69729 100644 --- a/app/src/config/passkey_config.tsx +++ b/app/src/config/passkey_config.tsx @@ -17,7 +17,7 @@ client.request = async ({ method, params }) => { method = "ethrex_sendTransaction"; } - return base_request({ method, params }); + return base_request({ method: method as any, params: params as any }); }; export type Client = typeof client; diff --git a/app/src/pages/Deposit.tsx b/app/src/pages/Deposit.tsx index e6762c6..dfe5988 100644 --- a/app/src/pages/Deposit.tsx +++ b/app/src/pages/Deposit.tsx @@ -1,6 +1,5 @@ -import { useAccount, useSwitchChain } from "wagmi" +import { useAccount } from "wagmi" import { Deposit } from "../components/Deposit" -import { useEffect } from "react" export const Bridge: React.FC = () => { const { isConnected, isDisconnected } = useAccount() diff --git a/app/src/pages/Withdraw.tsx b/app/src/pages/Withdraw.tsx index a4f8832..11fad22 100644 --- a/app/src/pages/Withdraw.tsx +++ b/app/src/pages/Withdraw.tsx @@ -1,6 +1,5 @@ -import { useAccount, useSwitchChain } from "wagmi" +import { useAccount } from "wagmi" import { Withdraw } from "../components/Withdraw" -import { useEffect } from "react" export const Bridge: React.FC = () => { const { isConnected, isDisconnected } = useAccount() diff --git a/app/src/utils/passkeyAccounts.ts b/app/src/utils/passkeyAccounts.ts index 0513339..5d8e669 100644 --- a/app/src/utils/passkeyAccounts.ts +++ b/app/src/utils/passkeyAccounts.ts @@ -15,7 +15,7 @@ import { waitForTransactionReceipt, writeContract, } from "viem/actions"; -import Delegation from "../../../contracts/out/Delegation.sol/Delegation.json"; +import Delegation from "../../abi/Delegation.json"; export const signUp = async ({ client, diff --git a/app/src/utils/token.ts b/app/src/utils/token.ts index dcd37cc..5ce0e75 100644 --- a/app/src/utils/token.ts +++ b/app/src/utils/token.ts @@ -1,11 +1,10 @@ -import { privateKeyToAccount } from "viem/accounts"; import { readContract, waitForTransactionReceipt, writeContract, } from "viem/actions"; -import Delegation from "../../../contracts/out/Delegation.sol/Delegation.json"; -import TestToken from "../../../contracts/out/TestToken.sol/TestToken.json"; +import Delegation from "../../abi/Delegation.json"; +import TestToken from "../../abi/TestToken.json"; import { type TransactionReceipt, type Address, From 7689ae2cee0b88f47988977a94defbed88b295d0 Mon Sep 17 00:00:00 2001 From: ricomateo Date: Thu, 13 Nov 2025 17:19:04 -0300 Subject: [PATCH 02/15] add Delegation and TestToken contract abi --- app/abi/Delegation.json | 535 ++++++++++++++++++++++++++++++++++++++++ app/abi/TestToken.json | 1 + 2 files changed, 536 insertions(+) create mode 100644 app/abi/Delegation.json create mode 100644 app/abi/TestToken.json diff --git a/app/abi/Delegation.json b/app/abi/Delegation.json new file mode 100644 index 0000000..c81dc67 --- /dev/null +++ b/app/abi/Delegation.json @@ -0,0 +1,535 @@ +{ + "abi": [ + { + "type": "receive", + "stateMutability": "payable" + }, + { + "type": "function", + "name": "authorize", + "inputs": [ + { + "name": "authorized", + "type": "tuple", + "internalType": "struct ECDSA.PublicKey", + "components": [ + { + "name": "x", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "y", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "signature", + "type": "tuple", + "internalType": "struct ECDSA.RecoveredSignature", + "components": [ + { + "name": "r", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "s", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "yParity", + "type": "uint8", + "internalType": "uint8" + } + ] + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "authorizedKey", + "inputs": [], + "outputs": [ + { + "name": "x", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "y", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "execute", + "inputs": [ + { + "name": "to", + "type": "address", + "internalType": "address" + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "signature", + "type": "tuple", + "internalType": "struct ECDSA.Signature", + "components": [ + { + "name": "r", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "s", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "metadata", + "type": "tuple", + "internalType": "struct WebAuthnP256.Metadata", + "components": [ + { + "name": "authenticatorData", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "clientDataJSON", + "type": "string", + "internalType": "string" + }, + { + "name": "challengeIndex", + "type": "uint16", + "internalType": "uint16" + }, + { + "name": "typeIndex", + "type": "uint16", + "internalType": "uint16" + }, + { + "name": "userVerificationRequired", + "type": "bool", + "internalType": "bool" + } + ] + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "nonce", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "event", + "name": "Authorized", + "inputs": [ + { + "name": "authorized", + "type": "tuple", + "indexed": true, + "internalType": "struct ECDSA.PublicKey", + "components": [ + { + "name": "x", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "y", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Executed", + "inputs": [ + { + "name": "to", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "value", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "data", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + } + ], + "anonymous": false + } + ], + "bytecode": { + "object": "0x6080604052348015600e575f5ffd5b506119d68061001c5f395ff3fe608060405260043610610042575f3560e01c80630f0b37851461004d5780633bc67d4b14610075578063affed0e01461009d578063c417a8c5146100c757610049565b3661004957005b5f5ffd5b348015610058575f5ffd5b50610073600480360381019061006e9190610b5a565b6100f2565b005b348015610080575f5ffd5b5061009b60048036038101906100969190610cc2565b610285565b005b3480156100a8575f5ffd5b506100b1610459565b6040516100be9190610d83565b60405180910390f35b3480156100d2575f5ffd5b506100db61045e565b6040516100e9929190610d9c565b60405180910390f35b5f5f54835f0135846020013560405160200161011093929190610de3565b6040516020818303038152906040528051906020012090505f5f81548092919061013990610e4c565b91905055505f6001825f8560400160208101906101569190610ec9565b60ff161461016557601c610168565b601b5b855f01355f1b86602001355f1b6040515f81526020016040526040516101919493929190610f1b565b6020604051602081039080840390855afa1580156101b1573d5f5f3e3d5ffd5b5050506020604051035190503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461022b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161022290610fb8565b60405180910390fd5b836001818161023a91906110d1565b9050508360405161024b9190611156565b60405180910390207f7ab2d3841cf199f7bdf9a46a067653d528b42029acf32bdbe62dd8191ce226ad60405160405180910390a250505050565b5f5f54878787876040516020016102a09594939291906111f1565b6040516020818303038152906040528051906020012090505f5f8154809291906102c990610e4c565b919050555061031281836102dc90611539565b858036038101906102ed9190611598565b60016040518060400160405290815f820154815260200160018201548152505061046f565b610351576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103489061160d565b60405180910390fd5b5f8773ffffffffffffffffffffffffffffffffffffffff1687878760405161037a92919061162b565b5f6040518083038185875af1925050503d805f81146103b4576040519150601f19603f3d011682016040523d82523d5f602084013e6103b9565b606091505b50509050806103fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103f49061168d565b60405180910390fd5b8773ffffffffffffffffffffffffffffffffffffffff167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f888888604051610447939291906116e7565b60405180910390a25050505050505050565b5f5481565b6001805f0154908060010154905082565b5f6025845f01515110806104af57506104ad845f015160208151811061049857610497611717565b5b602001015160f81c60f81b8560800151610675565b155b156104bc575f905061066d565b5f6040518060400160405280601581526020017f2274797065223a22776562617574686e2e676574220000000000000000000000815250905061050c818660200151876060015161ffff166107f9565b610519575f91505061066d565b5f6105458760405160200161052e9190611764565b6040516020818303038152906040526001806108f3565b90505f81604051602001610559919061181c565b6040516020818303038152906040529050610581818860200151896040015161ffff166107f9565b610590575f935050505061066d565b5f600288602001516040516105a5919061188a565b602060405180830381855afa1580156105c0573d5f5f3e3d5ffd5b5050506040513d601f19601f820116820180604052508101906105e391906118ca565b90505f6002895f0151836040516020016105fe9291906118f5565b60405160208183030381529060405260405161061a919061188a565b602060405180830381855afa158015610635573d5f5f3e3d5ffd5b5050506040513d601f19601f8201168201806040525081019061065891906118ca565b90506106658189896109fd565b955050505050505b949350505050565b5f600160f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916600160f81b84167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146106d3575f90506107f3565b81801561072e5750600460f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916600460f81b84167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b1561073b575f90506107f3565b600860f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916600860f81b84167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146107ee57601060f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916601060f81b84167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036107ed575f90506107f3565b5b600190505b92915050565b5f5f8490505f8490505f825190505f825190505f5f90505b828110156108e257818188610826919061191c565b10610838575f955050505050506108ec565b838188610845919061191c565b8151811061085657610855611717565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191685828151811061089657610895611717565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146108d5575f955050505050506108ec565b8080600101915050610811565b5060019450505050505b9392505050565b6060835180156109f5576003600282010460021b60405192507f4142434445464748494a4b4c4d4e4f505152535455565758595a616263646566601f526106708515027f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5f18603f526020830181810183886020010180515f82525b6001156109c25760038a0199508951603f8160121c16515f53603f81600c1c1651600153603f8160061c1651600253603f8116516003535f5185526004850194508385106109bc57506109c2565b5061096e565b8082526020830160405260038606600204613d3d60f01b81860352808915150290505f8186035280860388525050505050505b509392505050565b5f5f5f61010073ffffffffffffffffffffffffffffffffffffffff1686865f01518760200151875f01518860200151604051602001610a4095949392919061194f565b604051602081830303815290604052604051610a5c919061188a565b5f60405180830381855afa9150503d805f8114610a94576040519150601f19603f3d011682016040523d82523d5f602084013e610a99565b606091505b5091509150818015610aac575060208151145b8015610afb5750600160f81b81601f81518110610acc57610acb611717565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b915081925050509392505050565b5f604051905090565b5f5ffd5b5f5ffd5b5f5ffd5b5f60408284031215610b3357610b32610b1a565b5b81905092915050565b5f60608284031215610b5157610b50610b1a565b5b81905092915050565b5f5f60a08385031215610b7057610b6f610b12565b5b5f610b7d85828601610b1e565b9250506040610b8e85828601610b3c565b9150509250929050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610bc182610b98565b9050919050565b610bd181610bb7565b8114610bdb575f5ffd5b50565b5f81359050610bec81610bc8565b92915050565b5f819050919050565b610c0481610bf2565b8114610c0e575f5ffd5b50565b5f81359050610c1f81610bfb565b92915050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f840112610c4657610c45610c25565b5b8235905067ffffffffffffffff811115610c6357610c62610c29565b5b602083019150836001820283011115610c7f57610c7e610c2d565b5b9250929050565b5f60408284031215610c9b57610c9a610b1a565b5b81905092915050565b5f60a08284031215610cb957610cb8610b1a565b5b81905092915050565b5f5f5f5f5f5f60c08789031215610cdc57610cdb610b12565b5b5f610ce989828a01610bde565b9650506020610cfa89828a01610c11565b955050604087013567ffffffffffffffff811115610d1b57610d1a610b16565b5b610d2789828a01610c31565b94509450506060610d3a89828a01610c86565b92505060a087013567ffffffffffffffff811115610d5b57610d5a610b16565b5b610d6789828a01610ca4565b9150509295509295509295565b610d7d81610bf2565b82525050565b5f602082019050610d965f830184610d74565b92915050565b5f604082019050610daf5f830185610d74565b610dbc6020830184610d74565b9392505050565b5f819050919050565b610ddd610dd882610bf2565b610dc3565b82525050565b5f610dee8286610dcc565b602082019150610dfe8285610dcc565b602082019150610e0e8284610dcc565b602082019150819050949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610e5682610bf2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610e8857610e87610e1f565b5b600182019050919050565b5f60ff82169050919050565b610ea881610e93565b8114610eb2575f5ffd5b50565b5f81359050610ec381610e9f565b92915050565b5f60208284031215610ede57610edd610b12565b5b5f610eeb84828501610eb5565b91505092915050565b5f819050919050565b610f0681610ef4565b82525050565b610f1581610e93565b82525050565b5f608082019050610f2e5f830187610efd565b610f3b6020830186610f0c565b610f486040830185610efd565b610f556060830184610efd565b95945050505050565b5f82825260208201905092915050565b7f556e617574686f72697a656400000000000000000000000000000000000000005f82015250565b5f610fa2600c83610f5e565b9150610fad82610f6e565b602082019050919050565b5f6020820190508181035f830152610fcf81610f96565b9050919050565b5f8135610fe281610bfb565b80915050919050565b5f815f1b9050919050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61102184610feb565b9350801983169250808416831791505092915050565b5f819050919050565b5f61105a61105561105084610bf2565b611037565b610bf2565b9050919050565b5f819050919050565b61107382611040565b61108661107f82611061565b8354610ff6565b8255505050565b5f81015f83018061109d81610fd6565b90506110a9818461106a565b5050506001810160208301806110be81610fd6565b90506110ca818461106a565b5050505050565b6110db828261108d565b5050565b5f6110ed6020840184610c11565b905092915050565b6110fe81610bf2565b82525050565b5f61110f83836110f5565b60208301905092915050565b5f820161112a5f8301836110df565b6111348482611104565b93505061114460208301836110df565b61114e8482611104565b935050505050565b5f611161828461111b565b60408201915081905092915050565b5f8160601b9050919050565b5f61118682611170565b9050919050565b5f6111978261117c565b9050919050565b6111af6111aa82610bb7565b61118d565b82525050565b5f81905092915050565b828183375f83830152505050565b5f6111d883856111b5565b93506111e58385846111bf565b82840190509392505050565b5f6111fc8288610dcc565b60208201915061120c828761119e565b60148201915061121c8286610dcc565b60208201915061122d8284866111cd565b91508190509695505050505050565b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61128682611240565b810181811067ffffffffffffffff821117156112a5576112a4611250565b5b80604052505050565b5f6112b7610b09565b90506112c3828261127d565b919050565b5f5ffd5b5f5ffd5b5f67ffffffffffffffff8211156112ea576112e9611250565b5b6112f382611240565b9050602081019050919050565b5f61131261130d846112d0565b6112ae565b90508281526020810184848401111561132e5761132d6112cc565b5b6113398482856111bf565b509392505050565b5f82601f83011261135557611354610c25565b5b8135611365848260208601611300565b91505092915050565b5f67ffffffffffffffff82111561138857611387611250565b5b61139182611240565b9050602081019050919050565b5f6113b06113ab8461136e565b6112ae565b9050828152602081018484840111156113cc576113cb6112cc565b5b6113d78482856111bf565b509392505050565b5f82601f8301126113f3576113f2610c25565b5b813561140384826020860161139e565b91505092915050565b5f61ffff82169050919050565b6114228161140c565b811461142c575f5ffd5b50565b5f8135905061143d81611419565b92915050565b5f8115159050919050565b61145781611443565b8114611461575f5ffd5b50565b5f813590506114728161144e565b92915050565b5f60a0828403121561148d5761148c61123c565b5b61149760a06112ae565b90505f82013567ffffffffffffffff8111156114b6576114b56112c8565b5b6114c284828501611341565b5f83015250602082013567ffffffffffffffff8111156114e5576114e46112c8565b5b6114f1848285016113df565b60208301525060406115058482850161142f565b60408301525060606115198482850161142f565b606083015250608061152d84828501611464565b60808301525092915050565b5f6115443683611478565b9050919050565b5f604082840312156115605761155f61123c565b5b61156a60406112ae565b90505f61157984828501610c11565b5f83015250602061158c84828501610c11565b60208301525092915050565b5f604082840312156115ad576115ac610b12565b5b5f6115ba8482850161154b565b91505092915050565b7f496e76616c6964207369676e61747572650000000000000000000000000000005f82015250565b5f6115f7601183610f5e565b9150611602826115c3565b602082019050919050565b5f6020820190508181035f830152611624816115eb565b9050919050565b5f6116378284866111cd565b91508190509392505050565b7f43616c6c206661696c65640000000000000000000000000000000000000000005f82015250565b5f611677600b83610f5e565b915061168282611643565b602082019050919050565b5f6020820190508181035f8301526116a48161166b565b9050919050565b5f82825260208201905092915050565b5f6116c683856116ab565b93506116d38385846111bf565b6116dc83611240565b840190509392505050565b5f6040820190506116fa5f830186610d74565b818103602083015261170d8184866116bb565b9050949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b61175e61175982610ef4565b611744565b82525050565b5f61176f828461174d565b60208201915081905092915050565b7f226368616c6c656e6765223a2200000000000000000000000000000000000000815250565b5f81519050919050565b5f81905092915050565b8281835e5f83830152505050565b5f6117d0826117a4565b6117da81856117ae565b93506117ea8185602086016117b8565b80840191505092915050565b7f2200000000000000000000000000000000000000000000000000000000000000815250565b5f6118268261177e565b600d8201915061183682846117c6565b9150611841826117f6565b60018201915081905092915050565b5f81519050919050565b5f61186482611850565b61186e81856111b5565b935061187e8185602086016117b8565b80840191505092915050565b5f611895828461185a565b915081905092915050565b6118a981610ef4565b81146118b3575f5ffd5b50565b5f815190506118c4816118a0565b92915050565b5f602082840312156118df576118de610b12565b5b5f6118ec848285016118b6565b91505092915050565b5f611900828561185a565b915061190c828461174d565b6020820191508190509392505050565b5f61192682610bf2565b915061193183610bf2565b925082820190508082111561194957611948610e1f565b5b92915050565b5f60a0820190506119625f830188610efd565b61196f6020830187610d74565b61197c6040830186610d74565b6119896060830185610d74565b6119966080830184610d74565b969550505050505056fea2646970667358221220de9cf586a6d61b1ae7c694b1a3067ed2f9f3dd2d5d13b6b14a4d4f3626fa7d2764736f6c634300081e0033", + "sourceMap": "158:1767:1:-:0;;;;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405260043610610042575f3560e01c80630f0b37851461004d5780633bc67d4b14610075578063affed0e01461009d578063c417a8c5146100c757610049565b3661004957005b5f5ffd5b348015610058575f5ffd5b50610073600480360381019061006e9190610b5a565b6100f2565b005b348015610080575f5ffd5b5061009b60048036038101906100969190610cc2565b610285565b005b3480156100a8575f5ffd5b506100b1610459565b6040516100be9190610d83565b60405180910390f35b3480156100d2575f5ffd5b506100db61045e565b6040516100e9929190610d9c565b60405180910390f35b5f5f54835f0135846020013560405160200161011093929190610de3565b6040516020818303038152906040528051906020012090505f5f81548092919061013990610e4c565b91905055505f6001825f8560400160208101906101569190610ec9565b60ff161461016557601c610168565b601b5b855f01355f1b86602001355f1b6040515f81526020016040526040516101919493929190610f1b565b6020604051602081039080840390855afa1580156101b1573d5f5f3e3d5ffd5b5050506020604051035190503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461022b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161022290610fb8565b60405180910390fd5b836001818161023a91906110d1565b9050508360405161024b9190611156565b60405180910390207f7ab2d3841cf199f7bdf9a46a067653d528b42029acf32bdbe62dd8191ce226ad60405160405180910390a250505050565b5f5f54878787876040516020016102a09594939291906111f1565b6040516020818303038152906040528051906020012090505f5f8154809291906102c990610e4c565b919050555061031281836102dc90611539565b858036038101906102ed9190611598565b60016040518060400160405290815f820154815260200160018201548152505061046f565b610351576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103489061160d565b60405180910390fd5b5f8773ffffffffffffffffffffffffffffffffffffffff1687878760405161037a92919061162b565b5f6040518083038185875af1925050503d805f81146103b4576040519150601f19603f3d011682016040523d82523d5f602084013e6103b9565b606091505b50509050806103fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103f49061168d565b60405180910390fd5b8773ffffffffffffffffffffffffffffffffffffffff167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f888888604051610447939291906116e7565b60405180910390a25050505050505050565b5f5481565b6001805f0154908060010154905082565b5f6025845f01515110806104af57506104ad845f015160208151811061049857610497611717565b5b602001015160f81c60f81b8560800151610675565b155b156104bc575f905061066d565b5f6040518060400160405280601581526020017f2274797065223a22776562617574686e2e676574220000000000000000000000815250905061050c818660200151876060015161ffff166107f9565b610519575f91505061066d565b5f6105458760405160200161052e9190611764565b6040516020818303038152906040526001806108f3565b90505f81604051602001610559919061181c565b6040516020818303038152906040529050610581818860200151896040015161ffff166107f9565b610590575f935050505061066d565b5f600288602001516040516105a5919061188a565b602060405180830381855afa1580156105c0573d5f5f3e3d5ffd5b5050506040513d601f19601f820116820180604052508101906105e391906118ca565b90505f6002895f0151836040516020016105fe9291906118f5565b60405160208183030381529060405260405161061a919061188a565b602060405180830381855afa158015610635573d5f5f3e3d5ffd5b5050506040513d601f19601f8201168201806040525081019061065891906118ca565b90506106658189896109fd565b955050505050505b949350505050565b5f600160f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916600160f81b84167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146106d3575f90506107f3565b81801561072e5750600460f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916600460f81b84167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b1561073b575f90506107f3565b600860f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916600860f81b84167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146107ee57601060f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916601060f81b84167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036107ed575f90506107f3565b5b600190505b92915050565b5f5f8490505f8490505f825190505f825190505f5f90505b828110156108e257818188610826919061191c565b10610838575f955050505050506108ec565b838188610845919061191c565b8151811061085657610855611717565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191685828151811061089657610895611717565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146108d5575f955050505050506108ec565b8080600101915050610811565b5060019450505050505b9392505050565b6060835180156109f5576003600282010460021b60405192507f4142434445464748494a4b4c4d4e4f505152535455565758595a616263646566601f526106708515027f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5f18603f526020830181810183886020010180515f82525b6001156109c25760038a0199508951603f8160121c16515f53603f81600c1c1651600153603f8160061c1651600253603f8116516003535f5185526004850194508385106109bc57506109c2565b5061096e565b8082526020830160405260038606600204613d3d60f01b81860352808915150290505f8186035280860388525050505050505b509392505050565b5f5f5f61010073ffffffffffffffffffffffffffffffffffffffff1686865f01518760200151875f01518860200151604051602001610a4095949392919061194f565b604051602081830303815290604052604051610a5c919061188a565b5f60405180830381855afa9150503d805f8114610a94576040519150601f19603f3d011682016040523d82523d5f602084013e610a99565b606091505b5091509150818015610aac575060208151145b8015610afb5750600160f81b81601f81518110610acc57610acb611717565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b915081925050509392505050565b5f604051905090565b5f5ffd5b5f5ffd5b5f5ffd5b5f60408284031215610b3357610b32610b1a565b5b81905092915050565b5f60608284031215610b5157610b50610b1a565b5b81905092915050565b5f5f60a08385031215610b7057610b6f610b12565b5b5f610b7d85828601610b1e565b9250506040610b8e85828601610b3c565b9150509250929050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610bc182610b98565b9050919050565b610bd181610bb7565b8114610bdb575f5ffd5b50565b5f81359050610bec81610bc8565b92915050565b5f819050919050565b610c0481610bf2565b8114610c0e575f5ffd5b50565b5f81359050610c1f81610bfb565b92915050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f840112610c4657610c45610c25565b5b8235905067ffffffffffffffff811115610c6357610c62610c29565b5b602083019150836001820283011115610c7f57610c7e610c2d565b5b9250929050565b5f60408284031215610c9b57610c9a610b1a565b5b81905092915050565b5f60a08284031215610cb957610cb8610b1a565b5b81905092915050565b5f5f5f5f5f5f60c08789031215610cdc57610cdb610b12565b5b5f610ce989828a01610bde565b9650506020610cfa89828a01610c11565b955050604087013567ffffffffffffffff811115610d1b57610d1a610b16565b5b610d2789828a01610c31565b94509450506060610d3a89828a01610c86565b92505060a087013567ffffffffffffffff811115610d5b57610d5a610b16565b5b610d6789828a01610ca4565b9150509295509295509295565b610d7d81610bf2565b82525050565b5f602082019050610d965f830184610d74565b92915050565b5f604082019050610daf5f830185610d74565b610dbc6020830184610d74565b9392505050565b5f819050919050565b610ddd610dd882610bf2565b610dc3565b82525050565b5f610dee8286610dcc565b602082019150610dfe8285610dcc565b602082019150610e0e8284610dcc565b602082019150819050949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610e5682610bf2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610e8857610e87610e1f565b5b600182019050919050565b5f60ff82169050919050565b610ea881610e93565b8114610eb2575f5ffd5b50565b5f81359050610ec381610e9f565b92915050565b5f60208284031215610ede57610edd610b12565b5b5f610eeb84828501610eb5565b91505092915050565b5f819050919050565b610f0681610ef4565b82525050565b610f1581610e93565b82525050565b5f608082019050610f2e5f830187610efd565b610f3b6020830186610f0c565b610f486040830185610efd565b610f556060830184610efd565b95945050505050565b5f82825260208201905092915050565b7f556e617574686f72697a656400000000000000000000000000000000000000005f82015250565b5f610fa2600c83610f5e565b9150610fad82610f6e565b602082019050919050565b5f6020820190508181035f830152610fcf81610f96565b9050919050565b5f8135610fe281610bfb565b80915050919050565b5f815f1b9050919050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61102184610feb565b9350801983169250808416831791505092915050565b5f819050919050565b5f61105a61105561105084610bf2565b611037565b610bf2565b9050919050565b5f819050919050565b61107382611040565b61108661107f82611061565b8354610ff6565b8255505050565b5f81015f83018061109d81610fd6565b90506110a9818461106a565b5050506001810160208301806110be81610fd6565b90506110ca818461106a565b5050505050565b6110db828261108d565b5050565b5f6110ed6020840184610c11565b905092915050565b6110fe81610bf2565b82525050565b5f61110f83836110f5565b60208301905092915050565b5f820161112a5f8301836110df565b6111348482611104565b93505061114460208301836110df565b61114e8482611104565b935050505050565b5f611161828461111b565b60408201915081905092915050565b5f8160601b9050919050565b5f61118682611170565b9050919050565b5f6111978261117c565b9050919050565b6111af6111aa82610bb7565b61118d565b82525050565b5f81905092915050565b828183375f83830152505050565b5f6111d883856111b5565b93506111e58385846111bf565b82840190509392505050565b5f6111fc8288610dcc565b60208201915061120c828761119e565b60148201915061121c8286610dcc565b60208201915061122d8284866111cd565b91508190509695505050505050565b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61128682611240565b810181811067ffffffffffffffff821117156112a5576112a4611250565b5b80604052505050565b5f6112b7610b09565b90506112c3828261127d565b919050565b5f5ffd5b5f5ffd5b5f67ffffffffffffffff8211156112ea576112e9611250565b5b6112f382611240565b9050602081019050919050565b5f61131261130d846112d0565b6112ae565b90508281526020810184848401111561132e5761132d6112cc565b5b6113398482856111bf565b509392505050565b5f82601f83011261135557611354610c25565b5b8135611365848260208601611300565b91505092915050565b5f67ffffffffffffffff82111561138857611387611250565b5b61139182611240565b9050602081019050919050565b5f6113b06113ab8461136e565b6112ae565b9050828152602081018484840111156113cc576113cb6112cc565b5b6113d78482856111bf565b509392505050565b5f82601f8301126113f3576113f2610c25565b5b813561140384826020860161139e565b91505092915050565b5f61ffff82169050919050565b6114228161140c565b811461142c575f5ffd5b50565b5f8135905061143d81611419565b92915050565b5f8115159050919050565b61145781611443565b8114611461575f5ffd5b50565b5f813590506114728161144e565b92915050565b5f60a0828403121561148d5761148c61123c565b5b61149760a06112ae565b90505f82013567ffffffffffffffff8111156114b6576114b56112c8565b5b6114c284828501611341565b5f83015250602082013567ffffffffffffffff8111156114e5576114e46112c8565b5b6114f1848285016113df565b60208301525060406115058482850161142f565b60408301525060606115198482850161142f565b606083015250608061152d84828501611464565b60808301525092915050565b5f6115443683611478565b9050919050565b5f604082840312156115605761155f61123c565b5b61156a60406112ae565b90505f61157984828501610c11565b5f83015250602061158c84828501610c11565b60208301525092915050565b5f604082840312156115ad576115ac610b12565b5b5f6115ba8482850161154b565b91505092915050565b7f496e76616c6964207369676e61747572650000000000000000000000000000005f82015250565b5f6115f7601183610f5e565b9150611602826115c3565b602082019050919050565b5f6020820190508181035f830152611624816115eb565b9050919050565b5f6116378284866111cd565b91508190509392505050565b7f43616c6c206661696c65640000000000000000000000000000000000000000005f82015250565b5f611677600b83610f5e565b915061168282611643565b602082019050919050565b5f6020820190508181035f8301526116a48161166b565b9050919050565b5f82825260208201905092915050565b5f6116c683856116ab565b93506116d38385846111bf565b6116dc83611240565b840190509392505050565b5f6040820190506116fa5f830186610d74565b818103602083015261170d8184866116bb565b9050949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b61175e61175982610ef4565b611744565b82525050565b5f61176f828461174d565b60208201915081905092915050565b7f226368616c6c656e6765223a2200000000000000000000000000000000000000815250565b5f81519050919050565b5f81905092915050565b8281835e5f83830152505050565b5f6117d0826117a4565b6117da81856117ae565b93506117ea8185602086016117b8565b80840191505092915050565b7f2200000000000000000000000000000000000000000000000000000000000000815250565b5f6118268261177e565b600d8201915061183682846117c6565b9150611841826117f6565b60018201915081905092915050565b5f81519050919050565b5f61186482611850565b61186e81856111b5565b935061187e8185602086016117b8565b80840191505092915050565b5f611895828461185a565b915081905092915050565b6118a981610ef4565b81146118b3575f5ffd5b50565b5f815190506118c4816118a0565b92915050565b5f602082840312156118df576118de610b12565b5b5f6118ec848285016118b6565b91505092915050565b5f611900828561185a565b915061190c828461174d565b6020820191508190509392505050565b5f61192682610bf2565b915061193183610bf2565b925082820190508082111561194957611948610e1f565b5b92915050565b5f60a0820190506119625f830188610efd565b61196f6020830187610d74565b61197c6040830186610d74565b6119896060830185610d74565b6119966080830184610d74565b969550505050505056fea2646970667358221220de9cf586a6d61b1ae7c694b1a3067ed2f9f3dd2d5d13b6b14a4d4f3626fa7d2764736f6c634300081e0033", + "sourceMap": "158:1767:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;591:563;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1361:527;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;310:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;336:36;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;591:563;709:14;753:5;;760:10;:12;;;774:10;:12;;;736:51;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;726:62;;;;;;709:79;;798:5;;:7;;;;;;;;;:::i;:::-;;;;;;816:14;833:153;856:6;897:1;876:9;:17;;;;;;;;;;:::i;:::-;:22;;;:32;;906:2;876:32;;;901:2;876:32;930:9;:11;;;922:20;;964:9;:11;;;956:20;;833:153;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;816:170;;1019:4;1001:23;;:6;:23;;;997:76;;1040:22;;;;;;;;;;:::i;:::-;;;;;;;;997:76;1099:10;1083:13;:26;;;;;;:::i;:::-;;;;1136:10;1125:22;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;699:455;;591:563;;:::o;1361:527::-;1520:17;1567:5;;1574:2;1578:5;1585:4;;1550:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1540:51;;;;;;1520:71;;1601:5;;:7;;;;;;;;;:::i;:::-;;;;;;1624:66;1644:9;1655:8;1624:66;;;:::i;:::-;1665:9;1624:66;;;;;;;;;;:::i;:::-;1676:13;1624:66;;;;;;;;;;;;;;;;;;;;;;;;;:19;:66::i;:::-;1619:125;;1706:27;;;;;;;;;;:::i;:::-;;;;;;;;1619:125;1755:12;1772:2;:7;;1787:5;1794:4;;1772:27;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1754:45;;;1817:7;1809:31;;;;;;;;;;;;:::i;:::-;;;;;;;;;1865:2;1856:25;;;1869:5;1876:4;;1856:25;;;;;;;;:::i;:::-;;;;;;;;1510:378;;1361:527;;;;;;:::o;310:20::-;;;;:::o;336:36::-;;;;;;;;;;;;;;:::o;5958:1444:4:-;6148:4;6272:2;6236:8;:26;;;:33;:38;:140;;;;6295:81;6310:8;:26;;;6337:2;6310:30;;;;;;;;:::i;:::-;;;;;;;;;;6342:8;:33;;;6295:14;:81::i;:::-;6294:82;6236:140;6219:205;;;6408:5;6401:12;;;;6219:205;6500:26;:52;;;;;;;;;;;;;;;;;;;6567:67;6576:12;6590:8;:23;;;6615:8;:18;;;6567:67;;:8;:67::i;:::-;6562:111;;6657:5;6650:12;;;;;6562:111;6740:29;6772:54;6803:9;6786:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;6815:4;6821;6772:13;:54::i;:::-;6740:86;;6836:31;6901:15;6870:52;;;;;;;;:::i;:::-;;;;;;;;;;;;;6836:86;;6938:77;6947:17;6966:8;:23;;;6991:8;:23;;;6938:77;;:8;:77::i;:::-;6933:121;;7038:5;7031:12;;;;;;;6933:121;7160:26;7189:38;7202:8;:23;;;7189:38;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7160:67;;7237:19;7259:72;7283:8;:26;;;7311:18;7266:64;;;;;;;;;:::i;:::-;;;;;;;;;;;;;7259:72;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7237:94;;7349:46;7361:11;7374:9;7385;7349:11;:46::i;:::-;7342:53;;;;;;;5958:1444;;;;;;;:::o;1686:915::-;1777:4;1300;1898:18;;1868:48;;;1300:4;1876:18;;1868:5;:26;:48;;;;1864:91;;1939:5;1932:12;;;;1864:91;2158:23;:77;;;;;1356:4;2217:18;;2185:50;;;1356:4;2194:18;;2186:5;:26;2185:50;;;;;2158:77;2154:120;;;2258:5;2251:12;;;;2154:120;1412:4;2430:18;;2400:48;;;1412:4;2408:18;;2400:5;:26;:48;;;;2396:177;;1468:4;2498:18;;2468:48;;;1468:4;2476:18;;2468:5;:26;:48;;;;2464:99;;2543:5;2536:12;;;;2464:99;2396:177;2590:4;2583:11;;1686:915;;;;;:::o;685:572::-;785:4;801:24;834:6;801:40;;851:21;881:3;851:34;;896:17;916:11;:18;896:38;;944:14;961:8;:15;944:32;;992:9;1004:1;992:13;;987:242;1011:9;1007:1;:13;987:242;;;1061:6;1056:1;1045:8;:12;;;;:::i;:::-;:22;1041:73;;1094:5;1087:12;;;;;;;;;1041:73;1150:8;1170:1;1159:8;:12;;;;:::i;:::-;1150:22;;;;;;;;:::i;:::-;;;;;;;;;;1132:40;;;:11;1144:1;1132:14;;;;;;;;:::i;:::-;;;;;;;;;;:40;;;;1128:91;;1199:5;1192:12;;;;;;;;;1128:91;1022:3;;;;;;;987:242;;;;1246:4;1239:11;;;;;;685:572;;;;;;:::o;722:2892:0:-;835:20;961:4;955:11;983:10;980:2618;;;1183:1;1179;1167:10;1163:18;1159:26;1156:1;1152:34;1294:4;1288:11;1278:21;;1664:34;1658:4;1651:48;1791:6;1780:8;1773:16;1769:29;1733:34;1729:70;1723:4;1716:84;1906:4;1898:6;1894:17;1948:13;1943:3;1939:23;2016:10;2009:4;2003;1999:15;1995:32;2070:7;2064:14;2153:4;2144:7;2137:21;2285:623;2292:1;2285:623;;;2337:1;2331:4;2327:12;2319:20;;2399:4;2393:11;2539:4;2531:5;2527:2;2523:14;2519:25;2513:32;2510:1;2502:44;2604:4;2596:5;2592:2;2588:14;2584:25;2578:32;2575:1;2567:44;2668:4;2660:5;2657:1;2653:13;2649:24;2643:31;2640:1;2632:43;2724:4;2717:5;2713:16;2707:23;2704:1;2696:35;2770:4;2764:11;2759:3;2752:24;2814:1;2809:3;2805:11;2798:18;;2875:3;2870;2867:12;2857:33;;2883:5;;;2857:33;2297:611;2285:623;;;2941:12;2932:7;2925:29;3035:4;3030:3;3026:14;3020:4;3013:28;3180:1;3168:10;3164:18;3161:1;3157:26;3313:6;3308:3;3304:16;3300:1;3295:3;3291:11;3284:37;3430:1;3417:9;3410:17;3403:25;3399:33;3394:38;;3469:1;3465;3460:3;3456:11;3449:22;3560:1;3545:13;3541:21;3533:6;3526:37;994:2604;;;;;;980:2618;923:2685;722:2892;;;;;:::o;670:556:3:-;817:4;976:12;990:19;1033:5;1025:25;;1062:6;1070:9;:11;;;1083:9;:11;;;1096:9;:11;;;1109:9;:11;;;1051:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1025:97;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;975:147;;;;1142:7;:30;;;;;1170:2;1153:6;:13;:19;1142:30;:52;;;;;1190:4;1176:18;;:6;1183:2;1176:10;;;;;;;;:::i;:::-;;;;;;;;;;:18;;;;1142:52;1132:62;;1212:7;1205:14;;;;670:556;;;;;:::o;7:75:5:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:117;443:1;440;433:12;487:232;561:5;602:2;593:6;588:3;584:16;580:25;577:112;;;608:79;;:::i;:::-;577:112;707:6;698:15;;487:232;;;;:::o;764:241::-;847:5;888:2;879:6;874:3;870:16;866:25;863:112;;;894:79;;:::i;:::-;863:112;993:6;984:15;;764:241;;;;:::o;1011:605::-;1144:6;1152;1201:3;1189:9;1180:7;1176:23;1172:33;1169:120;;;1208:79;;:::i;:::-;1169:120;1328:1;1353:81;1426:7;1417:6;1406:9;1402:22;1353:81;:::i;:::-;1343:91;;1299:145;1483:2;1509:90;1591:7;1582:6;1571:9;1567:22;1509:90;:::i;:::-;1499:100;;1454:155;1011:605;;;;;:::o;1622:126::-;1659:7;1699:42;1692:5;1688:54;1677:65;;1622:126;;;:::o;1754:96::-;1791:7;1820:24;1838:5;1820:24;:::i;:::-;1809:35;;1754:96;;;:::o;1856:122::-;1929:24;1947:5;1929:24;:::i;:::-;1922:5;1919:35;1909:63;;1968:1;1965;1958:12;1909:63;1856:122;:::o;1984:139::-;2030:5;2068:6;2055:20;2046:29;;2084:33;2111:5;2084:33;:::i;:::-;1984:139;;;;:::o;2129:77::-;2166:7;2195:5;2184:16;;2129:77;;;:::o;2212:122::-;2285:24;2303:5;2285:24;:::i;:::-;2278:5;2275:35;2265:63;;2324:1;2321;2314:12;2265:63;2212:122;:::o;2340:139::-;2386:5;2424:6;2411:20;2402:29;;2440:33;2467:5;2440:33;:::i;:::-;2340:139;;;;:::o;2485:117::-;2594:1;2591;2584:12;2608:117;2717:1;2714;2707:12;2731:117;2840:1;2837;2830:12;2867:552;2924:8;2934:6;2984:3;2977:4;2969:6;2965:17;2961:27;2951:122;;2992:79;;:::i;:::-;2951:122;3105:6;3092:20;3082:30;;3135:18;3127:6;3124:30;3121:117;;;3157:79;;:::i;:::-;3121:117;3271:4;3263:6;3259:17;3247:29;;3325:3;3317:4;3309:6;3305:17;3295:8;3291:32;3288:41;3285:128;;;3332:79;;:::i;:::-;3285:128;2867:552;;;;;:::o;3455:232::-;3529:5;3570:2;3561:6;3556:3;3552:16;3548:25;3545:112;;;3576:79;;:::i;:::-;3545:112;3675:6;3666:15;;3455:232;;;;:::o;3729:::-;3802:5;3843:3;3834:6;3829:3;3825:16;3821:26;3818:113;;;3850:79;;:::i;:::-;3818:113;3949:6;3940:15;;3729:232;;;;:::o;3967:1379::-;4128:6;4136;4144;4152;4160;4168;4217:3;4205:9;4196:7;4192:23;4188:33;4185:120;;;4224:79;;:::i;:::-;4185:120;4344:1;4369:53;4414:7;4405:6;4394:9;4390:22;4369:53;:::i;:::-;4359:63;;4315:117;4471:2;4497:53;4542:7;4533:6;4522:9;4518:22;4497:53;:::i;:::-;4487:63;;4442:118;4627:2;4616:9;4612:18;4599:32;4658:18;4650:6;4647:30;4644:117;;;4680:79;;:::i;:::-;4644:117;4793:64;4849:7;4840:6;4829:9;4825:22;4793:64;:::i;:::-;4775:82;;;;4570:297;4906:2;4932:81;5005:7;4996:6;4985:9;4981:22;4932:81;:::i;:::-;4922:91;;4877:146;5090:3;5079:9;5075:19;5062:33;5122:18;5114:6;5111:30;5108:117;;;5144:79;;:::i;:::-;5108:117;5249:80;5321:7;5312:6;5301:9;5297:22;5249:80;:::i;:::-;5239:90;;5033:306;3967:1379;;;;;;;;:::o;5352:118::-;5439:24;5457:5;5439:24;:::i;:::-;5434:3;5427:37;5352:118;;:::o;5476:222::-;5569:4;5607:2;5596:9;5592:18;5584:26;;5620:71;5688:1;5677:9;5673:17;5664:6;5620:71;:::i;:::-;5476:222;;;;:::o;5704:332::-;5825:4;5863:2;5852:9;5848:18;5840:26;;5876:71;5944:1;5933:9;5929:17;5920:6;5876:71;:::i;:::-;5957:72;6025:2;6014:9;6010:18;6001:6;5957:72;:::i;:::-;5704:332;;;;;:::o;6042:79::-;6081:7;6110:5;6099:16;;6042:79;;;:::o;6127:157::-;6232:45;6252:24;6270:5;6252:24;:::i;:::-;6232:45;:::i;:::-;6227:3;6220:58;6127:157;;:::o;6290:538::-;6458:3;6473:75;6544:3;6535:6;6473:75;:::i;:::-;6573:2;6568:3;6564:12;6557:19;;6586:75;6657:3;6648:6;6586:75;:::i;:::-;6686:2;6681:3;6677:12;6670:19;;6699:75;6770:3;6761:6;6699:75;:::i;:::-;6799:2;6794:3;6790:12;6783:19;;6819:3;6812:10;;6290:538;;;;;;:::o;6834:180::-;6882:77;6879:1;6872:88;6979:4;6976:1;6969:15;7003:4;7000:1;6993:15;7020:233;7059:3;7082:24;7100:5;7082:24;:::i;:::-;7073:33;;7128:66;7121:5;7118:77;7115:103;;7198:18;;:::i;:::-;7115:103;7245:1;7238:5;7234:13;7227:20;;7020:233;;;:::o;7259:86::-;7294:7;7334:4;7327:5;7323:16;7312:27;;7259:86;;;:::o;7351:118::-;7422:22;7438:5;7422:22;:::i;:::-;7415:5;7412:33;7402:61;;7459:1;7456;7449:12;7402:61;7351:118;:::o;7475:135::-;7519:5;7557:6;7544:20;7535:29;;7573:31;7598:5;7573:31;:::i;:::-;7475:135;;;;:::o;7616:325::-;7673:6;7722:2;7710:9;7701:7;7697:23;7693:32;7690:119;;;7728:79;;:::i;:::-;7690:119;7848:1;7873:51;7916:7;7907:6;7896:9;7892:22;7873:51;:::i;:::-;7863:61;;7819:115;7616:325;;;;:::o;7947:77::-;7984:7;8013:5;8002:16;;7947:77;;;:::o;8030:118::-;8117:24;8135:5;8117:24;:::i;:::-;8112:3;8105:37;8030:118;;:::o;8154:112::-;8237:22;8253:5;8237:22;:::i;:::-;8232:3;8225:35;8154:112;;:::o;8272:545::-;8445:4;8483:3;8472:9;8468:19;8460:27;;8497:71;8565:1;8554:9;8550:17;8541:6;8497:71;:::i;:::-;8578:68;8642:2;8631:9;8627:18;8618:6;8578:68;:::i;:::-;8656:72;8724:2;8713:9;8709:18;8700:6;8656:72;:::i;:::-;8738;8806:2;8795:9;8791:18;8782:6;8738:72;:::i;:::-;8272:545;;;;;;;:::o;8823:169::-;8907:11;8941:6;8936:3;8929:19;8981:4;8976:3;8972:14;8957:29;;8823:169;;;;:::o;8998:162::-;9138:14;9134:1;9126:6;9122:14;9115:38;8998:162;:::o;9166:366::-;9308:3;9329:67;9393:2;9388:3;9329:67;:::i;:::-;9322:74;;9405:93;9494:3;9405:93;:::i;:::-;9523:2;9518:3;9514:12;9507:19;;9166:366;;;:::o;9538:419::-;9704:4;9742:2;9731:9;9727:18;9719:26;;9791:9;9785:4;9781:20;9777:1;9766:9;9762:17;9755:47;9819:131;9945:4;9819:131;:::i;:::-;9811:139;;9538:419;;;:::o;10149:186::-;10194:11;10243:3;10230:17;10256:33;10283:5;10256:33;:::i;:::-;10323:5;10299:29;;10206:129;10149:186;;;:::o;10341:92::-;10373:8;10420:5;10417:1;10413:13;10392:34;;10341:92;;;:::o;10439:290::-;10497:6;10526:66;10613:22;10626:8;10613:22;:::i;:::-;10601:34;;10668:4;10664:9;10657:5;10653:21;10644:30;;10717:4;10707:8;10703:19;10696:5;10693:30;10683:40;;10504:225;10439:290;;;;:::o;10735:60::-;10763:3;10784:5;10777:12;;10735:60;;;:::o;10801:142::-;10851:9;10884:53;10902:34;10911:24;10929:5;10911:24;:::i;:::-;10902:34;:::i;:::-;10884:53;:::i;:::-;10871:66;;10801:142;;;:::o;10949:75::-;10992:3;11013:5;11006:12;;10949:75;;;:::o;11030:263::-;11141:39;11172:7;11141:39;:::i;:::-;11202:84;11244:41;11268:16;11244:41;:::i;:::-;11237:4;11231:11;11202:84;:::i;:::-;11196:4;11189:98;11107:186;11030:263;;:::o;11299:809::-;11477:1;11471:4;11467:12;11523:1;11516:5;11512:13;11573:12;11616:42;11644:13;11616:42;:::i;:::-;11599:59;;11672:79;11737:13;11725:10;11672:79;:::i;:::-;11434:328;;;11815:1;11809:4;11805:12;11861:2;11854:5;11850:14;11912:12;11955:42;11983:13;11955:42;:::i;:::-;11938:59;;12011:79;12076:13;12064:10;12011:79;:::i;:::-;11772:329;;;11299:809;;:::o;12114:261::-;12253:116;12361:7;12355:4;12253:116;:::i;:::-;12114:261;;:::o;12381:122::-;12433:5;12458:39;12493:2;12488:3;12484:12;12479:3;12458:39;:::i;:::-;12449:48;;12381:122;;;;:::o;12509:116::-;12594:24;12612:5;12594:24;:::i;:::-;12589:3;12582:37;12509:116;;:::o;12631:195::-;12708:10;12729:54;12779:3;12771:6;12729:54;:::i;:::-;12815:4;12810:3;12806:14;12792:28;;12631:195;;;;:::o;12888:605::-;13057:4;13052:3;13048:14;13124:50;13168:4;13161:5;13157:16;13150:5;13124:50;:::i;:::-;13194:70;13260:3;13246:12;13194:70;:::i;:::-;13187:77;;13072:202;13336:50;13380:4;13373:5;13369:16;13362:5;13336:50;:::i;:::-;13406:70;13472:3;13458:12;13406:70;:::i;:::-;13399:77;;13284:202;13026:467;12888:605;;:::o;13499:364::-;13665:3;13680:129;13805:3;13796:6;13680:129;:::i;:::-;13834:2;13829:3;13825:12;13818:19;;13854:3;13847:10;;13499:364;;;;:::o;13869:94::-;13902:8;13950:5;13946:2;13942:14;13921:35;;13869:94;;;:::o;13969:::-;14008:7;14037:20;14051:5;14037:20;:::i;:::-;14026:31;;13969:94;;;:::o;14069:100::-;14108:7;14137:26;14157:5;14137:26;:::i;:::-;14126:37;;14069:100;;;:::o;14175:157::-;14280:45;14300:24;14318:5;14300:24;:::i;:::-;14280:45;:::i;:::-;14275:3;14268:58;14175:157;;:::o;14338:147::-;14439:11;14476:3;14461:18;;14338:147;;;;:::o;14491:148::-;14589:6;14584:3;14579;14566:30;14630:1;14621:6;14616:3;14612:16;14605:27;14491:148;;;:::o;14667:327::-;14781:3;14802:88;14883:6;14878:3;14802:88;:::i;:::-;14795:95;;14900:56;14949:6;14944:3;14937:5;14900:56;:::i;:::-;14981:6;14976:3;14972:16;14965:23;;14667:327;;;;;:::o;15000:714::-;15224:3;15239:75;15310:3;15301:6;15239:75;:::i;:::-;15339:2;15334:3;15330:12;15323:19;;15352:75;15423:3;15414:6;15352:75;:::i;:::-;15452:2;15447:3;15443:12;15436:19;;15465:75;15536:3;15527:6;15465:75;:::i;:::-;15565:2;15560:3;15556:12;15549:19;;15585:103;15684:3;15675:6;15667;15585:103;:::i;:::-;15578:110;;15705:3;15698:10;;15000:714;;;;;;;;:::o;15720:117::-;15829:1;15826;15819:12;15843:102;15884:6;15935:2;15931:7;15926:2;15919:5;15915:14;15911:28;15901:38;;15843:102;;;:::o;15951:180::-;15999:77;15996:1;15989:88;16096:4;16093:1;16086:15;16120:4;16117:1;16110:15;16137:281;16220:27;16242:4;16220:27;:::i;:::-;16212:6;16208:40;16350:6;16338:10;16335:22;16314:18;16302:10;16299:34;16296:62;16293:88;;;16361:18;;:::i;:::-;16293:88;16401:10;16397:2;16390:22;16180:238;16137:281;;:::o;16424:129::-;16458:6;16485:20;;:::i;:::-;16475:30;;16514:33;16542:4;16534:6;16514:33;:::i;:::-;16424:129;;;:::o;16559:117::-;16668:1;16665;16658:12;16682:117;16791:1;16788;16781:12;16805:307;16866:4;16956:18;16948:6;16945:30;16942:56;;;16978:18;;:::i;:::-;16942:56;17016:29;17038:6;17016:29;:::i;:::-;17008:37;;17100:4;17094;17090:15;17082:23;;16805:307;;;:::o;17118:423::-;17195:5;17220:65;17236:48;17277:6;17236:48;:::i;:::-;17220:65;:::i;:::-;17211:74;;17308:6;17301:5;17294:21;17346:4;17339:5;17335:16;17384:3;17375:6;17370:3;17366:16;17363:25;17360:112;;;17391:79;;:::i;:::-;17360:112;17481:54;17528:6;17523:3;17518;17481:54;:::i;:::-;17201:340;17118:423;;;;;:::o;17560:338::-;17615:5;17664:3;17657:4;17649:6;17645:17;17641:27;17631:122;;17672:79;;:::i;:::-;17631:122;17789:6;17776:20;17814:78;17888:3;17880:6;17873:4;17865:6;17861:17;17814:78;:::i;:::-;17805:87;;17621:277;17560:338;;;;:::o;17904:308::-;17966:4;18056:18;18048:6;18045:30;18042:56;;;18078:18;;:::i;:::-;18042:56;18116:29;18138:6;18116:29;:::i;:::-;18108:37;;18200:4;18194;18190:15;18182:23;;17904:308;;;:::o;18218:425::-;18296:5;18321:66;18337:49;18379:6;18337:49;:::i;:::-;18321:66;:::i;:::-;18312:75;;18410:6;18403:5;18396:21;18448:4;18441:5;18437:16;18486:3;18477:6;18472:3;18468:16;18465:25;18462:112;;;18493:79;;:::i;:::-;18462:112;18583:54;18630:6;18625:3;18620;18583:54;:::i;:::-;18302:341;18218:425;;;;;:::o;18663:340::-;18719:5;18768:3;18761:4;18753:6;18749:17;18745:27;18735:122;;18776:79;;:::i;:::-;18735:122;18893:6;18880:20;18918:79;18993:3;18985:6;18978:4;18970:6;18966:17;18918:79;:::i;:::-;18909:88;;18725:278;18663:340;;;;:::o;19009:89::-;19045:7;19085:6;19078:5;19074:18;19063:29;;19009:89;;;:::o;19104:120::-;19176:23;19193:5;19176:23;:::i;:::-;19169:5;19166:34;19156:62;;19214:1;19211;19204:12;19156:62;19104:120;:::o;19230:137::-;19275:5;19313:6;19300:20;19291:29;;19329:32;19355:5;19329:32;:::i;:::-;19230:137;;;;:::o;19373:90::-;19407:7;19450:5;19443:13;19436:21;19425:32;;19373:90;;;:::o;19469:116::-;19539:21;19554:5;19539:21;:::i;:::-;19532:5;19529:32;19519:60;;19575:1;19572;19565:12;19519:60;19469:116;:::o;19591:133::-;19634:5;19672:6;19659:20;19650:29;;19688:30;19712:5;19688:30;:::i;:::-;19591:133;;;;:::o;19766:1450::-;19840:5;19884:4;19872:9;19867:3;19863:19;19859:30;19856:117;;;19892:79;;:::i;:::-;19856:117;19991:21;20007:4;19991:21;:::i;:::-;19982:30;;20112:1;20101:9;20097:17;20084:31;20142:18;20134:6;20131:30;20128:117;;;20164:79;;:::i;:::-;20128:117;20284:58;20338:3;20329:6;20318:9;20314:22;20284:58;:::i;:::-;20277:4;20270:5;20266:16;20259:84;20022:332;20451:2;20440:9;20436:18;20423:32;20482:18;20474:6;20471:30;20468:117;;;20504:79;;:::i;:::-;20468:117;20624:59;20679:3;20670:6;20659:9;20655:22;20624:59;:::i;:::-;20617:4;20610:5;20606:16;20599:85;20364:331;20764:2;20805:48;20849:3;20840:6;20829:9;20825:22;20805:48;:::i;:::-;20798:4;20791:5;20787:16;20780:74;20705:160;20929:2;20970:48;21014:3;21005:6;20994:9;20990:22;20970:48;:::i;:::-;20963:4;20956:5;20952:16;20945:74;20875:155;21109:3;21151:46;21193:3;21184:6;21173:9;21169:22;21151:46;:::i;:::-;21144:4;21137:5;21133:16;21126:72;21040:169;19766:1450;;;;:::o;21222:211::-;21324:9;21358:68;21411:14;21404:5;21358:68;:::i;:::-;21345:81;;21222:211;;;:::o;21469:569::-;21544:5;21588:4;21576:9;21571:3;21567:19;21563:30;21560:117;;;21596:79;;:::i;:::-;21560:117;21695:21;21711:4;21695:21;:::i;:::-;21686:30;;21772:1;21812:49;21857:3;21848:6;21837:9;21833:22;21812:49;:::i;:::-;21805:4;21798:5;21794:16;21787:75;21726:147;21929:2;21970:49;22015:3;22006:6;21995:9;21991:22;21970:49;:::i;:::-;21963:4;21956:5;21952:16;21945:75;21883:148;21469:569;;;;:::o;22044:381::-;22129:6;22178:2;22166:9;22157:7;22153:23;22149:32;22146:119;;;22184:79;;:::i;:::-;22146:119;22304:1;22329:79;22400:7;22391:6;22380:9;22376:22;22329:79;:::i;:::-;22319:89;;22275:143;22044:381;;;;:::o;22431:167::-;22571:19;22567:1;22559:6;22555:14;22548:43;22431:167;:::o;22604:366::-;22746:3;22767:67;22831:2;22826:3;22767:67;:::i;:::-;22760:74;;22843:93;22932:3;22843:93;:::i;:::-;22961:2;22956:3;22952:12;22945:19;;22604:366;;;:::o;22976:419::-;23142:4;23180:2;23169:9;23165:18;23157:26;;23229:9;23223:4;23219:20;23215:1;23204:9;23200:17;23193:47;23257:131;23383:4;23257:131;:::i;:::-;23249:139;;22976:419;;;:::o;23401:291::-;23541:3;23563:103;23662:3;23653:6;23645;23563:103;:::i;:::-;23556:110;;23683:3;23676:10;;23401:291;;;;;:::o;23698:161::-;23838:13;23834:1;23826:6;23822:14;23815:37;23698:161;:::o;23865:366::-;24007:3;24028:67;24092:2;24087:3;24028:67;:::i;:::-;24021:74;;24104:93;24193:3;24104:93;:::i;:::-;24222:2;24217:3;24213:12;24206:19;;23865:366;;;:::o;24237:419::-;24403:4;24441:2;24430:9;24426:18;24418:26;;24490:9;24484:4;24480:20;24476:1;24465:9;24461:17;24454:47;24518:131;24644:4;24518:131;:::i;:::-;24510:139;;24237:419;;;:::o;24662:168::-;24745:11;24779:6;24774:3;24767:19;24819:4;24814:3;24810:14;24795:29;;24662:168;;;;:::o;24858:314::-;24954:3;24975:70;25038:6;25033:3;24975:70;:::i;:::-;24968:77;;25055:56;25104:6;25099:3;25092:5;25055:56;:::i;:::-;25136:29;25158:6;25136:29;:::i;:::-;25131:3;25127:39;25120:46;;24858:314;;;;;:::o;25178:439::-;25327:4;25365:2;25354:9;25350:18;25342:26;;25378:71;25446:1;25435:9;25431:17;25422:6;25378:71;:::i;:::-;25496:9;25490:4;25486:20;25481:2;25470:9;25466:18;25459:48;25524:86;25605:4;25596:6;25588;25524:86;:::i;:::-;25516:94;;25178:439;;;;;;:::o;25623:180::-;25671:77;25668:1;25661:88;25768:4;25765:1;25758:15;25792:4;25789:1;25782:15;25809:79;25848:7;25877:5;25866:16;;25809:79;;;:::o;25894:157::-;25999:45;26019:24;26037:5;26019:24;:::i;:::-;25999:45;:::i;:::-;25994:3;25987:58;25894:157;;:::o;26057:256::-;26169:3;26184:75;26255:3;26246:6;26184:75;:::i;:::-;26284:2;26279:3;26275:12;26268:19;;26304:3;26297:10;;26057:256;;;;:::o;26319:242::-;26488:66;26483:3;26476:79;26319:242;:::o;26567:99::-;26619:6;26653:5;26647:12;26637:22;;26567:99;;;:::o;26672:148::-;26774:11;26811:3;26796:18;;26672:148;;;;:::o;26826:139::-;26915:6;26910:3;26905;26899:23;26956:1;26947:6;26942:3;26938:16;26931:27;26826:139;;;:::o;26971:390::-;27077:3;27105:39;27138:5;27105:39;:::i;:::-;27160:89;27242:6;27237:3;27160:89;:::i;:::-;27153:96;;27258:65;27316:6;27311:3;27304:4;27297:5;27293:16;27258:65;:::i;:::-;27348:6;27343:3;27339:16;27332:23;;27081:280;26971:390;;;;:::o;27367:241::-;27535:66;27530:3;27523:79;27367:241;:::o;27614:806::-;27927:3;27942:138;28076:3;27942:138;:::i;:::-;28105:2;28100:3;28096:12;28089:19;;28125:95;28216:3;28207:6;28125:95;:::i;:::-;28118:102;;28230:137;28363:3;28230:137;:::i;:::-;28392:1;28387:3;28383:11;28376:18;;28411:3;28404:10;;27614:806;;;;:::o;28426:98::-;28477:6;28511:5;28505:12;28495:22;;28426:98;;;:::o;28530:386::-;28634:3;28662:38;28694:5;28662:38;:::i;:::-;28716:88;28797:6;28792:3;28716:88;:::i;:::-;28709:95;;28813:65;28871:6;28866:3;28859:4;28852:5;28848:16;28813:65;:::i;:::-;28903:6;28898:3;28894:16;28887:23;;28638:278;28530:386;;;;:::o;28922:271::-;29052:3;29074:93;29163:3;29154:6;29074:93;:::i;:::-;29067:100;;29184:3;29177:10;;28922:271;;;;:::o;29199:122::-;29272:24;29290:5;29272:24;:::i;:::-;29265:5;29262:35;29252:63;;29311:1;29308;29301:12;29252:63;29199:122;:::o;29327:143::-;29384:5;29415:6;29409:13;29400:22;;29431:33;29458:5;29431:33;:::i;:::-;29327:143;;;;:::o;29476:351::-;29546:6;29595:2;29583:9;29574:7;29570:23;29566:32;29563:119;;;29601:79;;:::i;:::-;29563:119;29721:1;29746:64;29802:7;29793:6;29782:9;29778:22;29746:64;:::i;:::-;29736:74;;29692:128;29476:351;;;;:::o;29833:412::-;29991:3;30013:93;30102:3;30093:6;30013:93;:::i;:::-;30006:100;;30116:75;30187:3;30178:6;30116:75;:::i;:::-;30216:2;30211:3;30207:12;30200:19;;30236:3;30229:10;;29833:412;;;;;:::o;30251:191::-;30291:3;30310:20;30328:1;30310:20;:::i;:::-;30305:25;;30344:20;30362:1;30344:20;:::i;:::-;30339:25;;30387:1;30384;30380:9;30373:16;;30408:3;30405:1;30402:10;30399:36;;;30415:18;;:::i;:::-;30399:36;30251:191;;;;:::o;30448:664::-;30653:4;30691:3;30680:9;30676:19;30668:27;;30705:71;30773:1;30762:9;30758:17;30749:6;30705:71;:::i;:::-;30786:72;30854:2;30843:9;30839:18;30830:6;30786:72;:::i;:::-;30868;30936:2;30925:9;30921:18;30912:6;30868:72;:::i;:::-;30950;31018:2;31007:9;31003:18;30994:6;30950:72;:::i;:::-;31032:73;31100:3;31089:9;31085:19;31076:6;31032:73;:::i;:::-;30448:664;;;;;;;;:::o", + "linkReferences": {} + }, + "methodIdentifiers": { + "authorize((uint256,uint256),(uint256,uint256,uint8))": "0f0b3785", + "authorizedKey()": "c417a8c5", + "execute(address,uint256,bytes,(uint256,uint256),(bytes,string,uint16,uint16,bool))": "3bc67d4b", + "nonce()": "affed0e0" + }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.30+commit.73712a01\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"indexed\":true,\"internalType\":\"struct ECDSA.PublicKey\",\"name\":\"authorized\",\"type\":\"tuple\"}],\"name\":\"Authorized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"Executed\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"internalType\":\"struct ECDSA.PublicKey\",\"name\":\"authorized\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"r\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"s\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"yParity\",\"type\":\"uint8\"}],\"internalType\":\"struct ECDSA.RecoveredSignature\",\"name\":\"signature\",\"type\":\"tuple\"}],\"name\":\"authorize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"authorizedKey\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"r\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"s\",\"type\":\"uint256\"}],\"internalType\":\"struct ECDSA.Signature\",\"name\":\"signature\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"authenticatorData\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"clientDataJSON\",\"type\":\"string\"},{\"internalType\":\"uint16\",\"name\":\"challengeIndex\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"typeIndex\",\"type\":\"uint16\"},{\"internalType\":\"bool\",\"name\":\"userVerificationRequired\",\"type\":\"bool\"}],\"internalType\":\"struct WebAuthnP256.Metadata\",\"name\":\"metadata\",\"type\":\"tuple\"}],\"name\":\"execute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"authorize((uint256,uint256),(uint256,uint256,uint8))\":{\"params\":{\"authorized\":\"The public key to authorize\",\"signature\":\"The Ethereum signature to verify the authorization\"}},\"execute(address,uint256,bytes,(uint256,uint256),(bytes,string,uint16,uint16,bool))\":{\"params\":{\"data\":\"The calldata to send\",\"to\":\"The address of the contract to call\",\"value\":\"The amount of ether to send\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"authorize((uint256,uint256),(uint256,uint256,uint8))\":{\"notice\":\"Authorize a public key to execute transactions on behalf of the delegatee\"},\"execute(address,uint256,bytes,(uint256,uint256),(bytes,string,uint16,uint16,bool))\":{\"notice\":\"Execute a transaction on behalf of the delegatee\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/Delegation.sol\":\"Delegation\"},\"evmVersion\":\"prague\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":solady/=lib/solady/src/\"]},\"sources\":{\"lib/solady/src/utils/Base64.sol\":{\"keccak256\":\"0x07dcf983a86bc961e4cc0b57a2cfc3e46b20a50fed9b2092c7497e5fe3715a93\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://65c6c0a8a29cfc5b757abe84635c83e62a177a48c2ad0be24de6b0fba1a60ea2\",\"dweb:/ipfs/QmYuYwxHiBoUt6vaLTLbs2bZamRzqrTfA4BsNZ1TApTfrm\"]},\"src/Delegation.sol\":{\"keccak256\":\"0x5aff8f24c16e10848c348b0f400d4d91cc6ce029e37a8a5b526465c768c1c5ea\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://3f2757dd944613d0f7065e1dd6796ca7a198a1c393d095254bec9f785e3b5a39\",\"dweb:/ipfs/QmXio4bSY6iKMuhfuGZG4kcpVWcPG5KjJnWPKJqzaXVdjk\"]},\"src/lib/ECDSA.sol\":{\"keccak256\":\"0x14a31e9a4efb985d00c8f4d1f0d4d9a99eef64e88addcf563b0e93a0ddc525fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9fc74e53f36bf2a0f484115dc28006c93716b09ad9b9a33c2034b6a58e0f6feb\",\"dweb:/ipfs/QmTNp1QKavYLKFRpUCKCvLrqPNLf2hmgTFXoVonCfnKEuN\"]},\"src/lib/P256.sol\":{\"keccak256\":\"0x794ff507aa419df92b39a1f9b6e7e1a5784c8aaf195b4f8e0da1b33894c72129\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d37ca68a4f47803301f98b30d6ab38c3319ddc4fe7b0408480658db0ef9bb8e8\",\"dweb:/ipfs/QmPENnN4ePVhZuuS1kY43zWuXPvWGLhMYMZgDVKY7eesKa\"]},\"src/lib/WebAuthnP256.sol\":{\"keccak256\":\"0x26b2e618fffe1bd28e6e92815364d3286d673d0d722cfc0181575e2f97686def\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51d3ddc5fb4fe4150207b989ac8434d61752072cc698d32dc05cb6247db4be2f\",\"dweb:/ipfs/QmWPA77zXsZJUTVfkcenfzcmojgadMsnEEYMFB8DbXyJdn\"]}},\"version\":1}", + "metadata": { + "compiler": { + "version": "0.8.30+commit.73712a01" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "struct ECDSA.PublicKey", + "name": "authorized", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "indexed": true + } + ], + "type": "event", + "name": "Authorized", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address", + "indexed": true + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256", + "indexed": false + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes", + "indexed": false + } + ], + "type": "event", + "name": "Executed", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "struct ECDSA.PublicKey", + "name": "authorized", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ] + }, + { + "internalType": "struct ECDSA.RecoveredSignature", + "name": "signature", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "r", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "s", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "yParity", + "type": "uint8" + } + ] + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "authorize" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "authorizedKey", + "outputs": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "struct ECDSA.Signature", + "name": "signature", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "r", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "s", + "type": "uint256" + } + ] + }, + { + "internalType": "struct WebAuthnP256.Metadata", + "name": "metadata", + "type": "tuple", + "components": [ + { + "internalType": "bytes", + "name": "authenticatorData", + "type": "bytes" + }, + { + "internalType": "string", + "name": "clientDataJSON", + "type": "string" + }, + { + "internalType": "uint16", + "name": "challengeIndex", + "type": "uint16" + }, + { + "internalType": "uint16", + "name": "typeIndex", + "type": "uint16" + }, + { + "internalType": "bool", + "name": "userVerificationRequired", + "type": "bool" + } + ] + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "execute" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "nonce", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "payable", + "type": "receive" + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "authorize((uint256,uint256),(uint256,uint256,uint8))": { + "params": { + "authorized": "The public key to authorize", + "signature": "The Ethereum signature to verify the authorization" + } + }, + "execute(address,uint256,bytes,(uint256,uint256),(bytes,string,uint16,uint16,bool))": { + "params": { + "data": "The calldata to send", + "to": "The address of the contract to call", + "value": "The amount of ether to send" + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "authorize((uint256,uint256),(uint256,uint256,uint8))": { + "notice": "Authorize a public key to execute transactions on behalf of the delegatee" + }, + "execute(address,uint256,bytes,(uint256,uint256),(bytes,string,uint16,uint16,bool))": { + "notice": "Execute a transaction on behalf of the delegatee" + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/", + "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/", + "forge-std/=lib/forge-std/src/", + "halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "solady/=lib/solady/src/" + ], + "optimizer": { + "enabled": false, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "ipfs" + }, + "compilationTarget": { + "src/Delegation.sol": "Delegation" + }, + "evmVersion": "prague", + "libraries": {} + }, + "sources": { + "lib/solady/src/utils/Base64.sol": { + "keccak256": "0x07dcf983a86bc961e4cc0b57a2cfc3e46b20a50fed9b2092c7497e5fe3715a93", + "urls": [ + "bzz-raw://65c6c0a8a29cfc5b757abe84635c83e62a177a48c2ad0be24de6b0fba1a60ea2", + "dweb:/ipfs/QmYuYwxHiBoUt6vaLTLbs2bZamRzqrTfA4BsNZ1TApTfrm" + ], + "license": "MIT" + }, + "src/Delegation.sol": { + "keccak256": "0x5aff8f24c16e10848c348b0f400d4d91cc6ce029e37a8a5b526465c768c1c5ea", + "urls": [ + "bzz-raw://3f2757dd944613d0f7065e1dd6796ca7a198a1c393d095254bec9f785e3b5a39", + "dweb:/ipfs/QmXio4bSY6iKMuhfuGZG4kcpVWcPG5KjJnWPKJqzaXVdjk" + ], + "license": "UNLICENSED" + }, + "src/lib/ECDSA.sol": { + "keccak256": "0x14a31e9a4efb985d00c8f4d1f0d4d9a99eef64e88addcf563b0e93a0ddc525fa", + "urls": [ + "bzz-raw://9fc74e53f36bf2a0f484115dc28006c93716b09ad9b9a33c2034b6a58e0f6feb", + "dweb:/ipfs/QmTNp1QKavYLKFRpUCKCvLrqPNLf2hmgTFXoVonCfnKEuN" + ], + "license": "MIT" + }, + "src/lib/P256.sol": { + "keccak256": "0x794ff507aa419df92b39a1f9b6e7e1a5784c8aaf195b4f8e0da1b33894c72129", + "urls": [ + "bzz-raw://d37ca68a4f47803301f98b30d6ab38c3319ddc4fe7b0408480658db0ef9bb8e8", + "dweb:/ipfs/QmPENnN4ePVhZuuS1kY43zWuXPvWGLhMYMZgDVKY7eesKa" + ], + "license": "MIT" + }, + "src/lib/WebAuthnP256.sol": { + "keccak256": "0x26b2e618fffe1bd28e6e92815364d3286d673d0d722cfc0181575e2f97686def", + "urls": [ + "bzz-raw://51d3ddc5fb4fe4150207b989ac8434d61752072cc698d32dc05cb6247db4be2f", + "dweb:/ipfs/QmWPA77zXsZJUTVfkcenfzcmojgadMsnEEYMFB8DbXyJdn" + ], + "license": "MIT" + } + }, + "version": 1 + }, + "id": 1 +} diff --git a/app/abi/TestToken.json b/app/abi/TestToken.json new file mode 100644 index 0000000..bbbad3d --- /dev/null +++ b/app/abi/TestToken.json @@ -0,0 +1 @@ +{"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"allowance","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"spender","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"approve","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"balanceOf","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"decimals","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"type":"function","name":"mint","inputs":[{"name":"recipient","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"name","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"symbol","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"totalSupply","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"transfer","inputs":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"transferFrom","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"event","name":"Approval","inputs":[{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"spender","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"error","name":"ERC20InsufficientAllowance","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"allowance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC20InsufficientBalance","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"balance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC20InvalidApprover","inputs":[{"name":"approver","type":"address","internalType":"address"}]},{"type":"error","name":"ERC20InvalidReceiver","inputs":[{"name":"receiver","type":"address","internalType":"address"}]},{"type":"error","name":"ERC20InvalidSender","inputs":[{"name":"sender","type":"address","internalType":"address"}]},{"type":"error","name":"ERC20InvalidSpender","inputs":[{"name":"spender","type":"address","internalType":"address"}]}],"bytecode":{"object":"0x608060405234801561000f575f5ffd5b506040518060400160405280600981526020017f54657374546f6b656e00000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f54544f4b00000000000000000000000000000000000000000000000000000000815250816003908161008b91906102e0565b50806004908161009b91906102e0565b5050506103af565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061011e57607f821691505b602082108103610131576101306100da565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026101937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610158565b61019d8683610158565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6101e16101dc6101d7846101b5565b6101be565b6101b5565b9050919050565b5f819050919050565b6101fa836101c7565b61020e610206826101e8565b848454610164565b825550505050565b5f5f905090565b610225610216565b6102308184846101f1565b505050565b5b81811015610253576102485f8261021d565b600181019050610236565b5050565b601f8211156102985761026981610137565b61027284610149565b81016020851015610281578190505b61029561028d85610149565b830182610235565b50505b505050565b5f82821c905092915050565b5f6102b85f198460080261029d565b1980831691505092915050565b5f6102d083836102a9565b9150826002028217905092915050565b6102e9826100a3565b67ffffffffffffffff811115610302576103016100ad565b5b61030c8254610107565b610317828285610257565b5f60209050601f831160018114610348575f8415610336578287015190505b61034085826102c5565b8655506103a7565b601f19841661035686610137565b5f5b8281101561037d57848901518255600182019150602085019450602081019050610358565b8683101561039a5784890151610396601f8916826102a9565b8355505b6001600288020188555050505b505050505050565b610e96806103bc5f395ff3fe608060405234801561000f575f5ffd5b506004361061009c575f3560e01c806340c10f191161006457806340c10f191461015a57806370a082311461017657806395d89b41146101a6578063a9059cbb146101c4578063dd62ed3e146101f45761009c565b806306fdde03146100a0578063095ea7b3146100be57806318160ddd146100ee57806323b872dd1461010c578063313ce5671461013c575b5f5ffd5b6100a8610224565b6040516100b59190610b0f565b60405180910390f35b6100d860048036038101906100d39190610bc0565b6102b4565b6040516100e59190610c18565b60405180910390f35b6100f66102d6565b6040516101039190610c40565b60405180910390f35b61012660048036038101906101219190610c59565b6102df565b6040516101339190610c18565b60405180910390f35b61014461030d565b6040516101519190610cc4565b60405180910390f35b610174600480360381019061016f9190610bc0565b610315565b005b610190600480360381019061018b9190610cdd565b610323565b60405161019d9190610c40565b60405180910390f35b6101ae610368565b6040516101bb9190610b0f565b60405180910390f35b6101de60048036038101906101d99190610bc0565b6103f8565b6040516101eb9190610c18565b60405180910390f35b61020e60048036038101906102099190610d08565b61041a565b60405161021b9190610c40565b60405180910390f35b60606003805461023390610d73565b80601f016020809104026020016040519081016040528092919081815260200182805461025f90610d73565b80156102aa5780601f10610281576101008083540402835291602001916102aa565b820191905f5260205f20905b81548152906001019060200180831161028d57829003601f168201915b5050505050905090565b5f5f6102be61049c565b90506102cb8185856104a3565b600191505092915050565b5f600254905090565b5f5f6102e961049c565b90506102f68582856104b5565b610301858585610548565b60019150509392505050565b5f6012905090565b61031f8282610638565b5050565b5f5f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b60606004805461037790610d73565b80601f01602080910402602001604051908101604052809291908181526020018280546103a390610d73565b80156103ee5780601f106103c5576101008083540402835291602001916103ee565b820191905f5260205f20905b8154815290600101906020018083116103d157829003601f168201915b5050505050905090565b5f5f61040261049c565b905061040f818585610548565b600191505092915050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f33905090565b6104b083838360016106b7565b505050565b5f6104c0848461041a565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8110156105425781811015610533578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161052a93929190610db2565b60405180910390fd5b61054184848484035f6106b7565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036105b8575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016105af9190610de7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610628575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161061f9190610de7565b60405180910390fd5b610633838383610886565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036106a8575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161069f9190610de7565b60405180910390fd5b6106b35f8383610886565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610727575f6040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161071e9190610de7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610797575f6040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161078e9190610de7565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015610880578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516108779190610c40565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108d6578060025f8282546108ca9190610e2d565b925050819055506109a4565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561095f578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161095693929190610db2565b60405180910390fd5b8181035f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036109eb578060025f8282540392505081905550610a35565b805f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610a929190610c40565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f610ae182610a9f565b610aeb8185610aa9565b9350610afb818560208601610ab9565b610b0481610ac7565b840191505092915050565b5f6020820190508181035f830152610b278184610ad7565b905092915050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610b5c82610b33565b9050919050565b610b6c81610b52565b8114610b76575f5ffd5b50565b5f81359050610b8781610b63565b92915050565b5f819050919050565b610b9f81610b8d565b8114610ba9575f5ffd5b50565b5f81359050610bba81610b96565b92915050565b5f5f60408385031215610bd657610bd5610b2f565b5b5f610be385828601610b79565b9250506020610bf485828601610bac565b9150509250929050565b5f8115159050919050565b610c1281610bfe565b82525050565b5f602082019050610c2b5f830184610c09565b92915050565b610c3a81610b8d565b82525050565b5f602082019050610c535f830184610c31565b92915050565b5f5f5f60608486031215610c7057610c6f610b2f565b5b5f610c7d86828701610b79565b9350506020610c8e86828701610b79565b9250506040610c9f86828701610bac565b9150509250925092565b5f60ff82169050919050565b610cbe81610ca9565b82525050565b5f602082019050610cd75f830184610cb5565b92915050565b5f60208284031215610cf257610cf1610b2f565b5b5f610cff84828501610b79565b91505092915050565b5f5f60408385031215610d1e57610d1d610b2f565b5b5f610d2b85828601610b79565b9250506020610d3c85828601610b79565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610d8a57607f821691505b602082108103610d9d57610d9c610d46565b5b50919050565b610dac81610b52565b82525050565b5f606082019050610dc55f830186610da3565b610dd26020830185610c31565b610ddf6040830184610c31565b949350505050565b5f602082019050610dfa5f830184610da3565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610e3782610b8d565b9150610e4283610b8d565b9250828201905080821115610e5a57610e59610e00565b5b9291505056fea2646970667358221220638f982993fae58ce28ce12ab0e49d333fb8ead7aab594ccc1c640076134807564736f6c634300081e0033","sourceMap":"177:182:5:-:0;;;211:43;;;;;;;;;;1601:113:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1675:5;1667;:13;;;;;;:::i;:::-;;1700:7;1690;:17;;;;;;:::i;:::-;;1601:113;;177:182:5;;7:99:6;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:180::-;160:77;157:1;150:88;257:4;254:1;247:15;281:4;278:1;271:15;298:180;346:77;343:1;336:88;443:4;440:1;433:15;467:4;464:1;457:15;484:320;528:6;565:1;559:4;555:12;545:22;;612:1;606:4;602:12;633:18;623:81;;689:4;681:6;677:17;667:27;;623:81;751:2;743:6;740:14;720:18;717:38;714:84;;770:18;;:::i;:::-;714:84;535:269;484:320;;;:::o;810:141::-;859:4;882:3;874:11;;905:3;902:1;895:14;939:4;936:1;926:18;918:26;;810:141;;;:::o;957:93::-;994:6;1041:2;1036;1029:5;1025:14;1021:23;1011:33;;957:93;;;:::o;1056:107::-;1100:8;1150:5;1144:4;1140:16;1119:37;;1056:107;;;;:::o;1169:393::-;1238:6;1288:1;1276:10;1272:18;1311:97;1341:66;1330:9;1311:97;:::i;:::-;1429:39;1459:8;1448:9;1429:39;:::i;:::-;1417:51;;1501:4;1497:9;1490:5;1486:21;1477:30;;1550:4;1540:8;1536:19;1529:5;1526:30;1516:40;;1245:317;;1169:393;;;;;:::o;1568:77::-;1605:7;1634:5;1623:16;;1568:77;;;:::o;1651:60::-;1679:3;1700:5;1693:12;;1651:60;;;:::o;1717:142::-;1767:9;1800:53;1818:34;1827:24;1845:5;1827:24;:::i;:::-;1818:34;:::i;:::-;1800:53;:::i;:::-;1787:66;;1717:142;;;:::o;1865:75::-;1908:3;1929:5;1922:12;;1865:75;;;:::o;1946:269::-;2056:39;2087:7;2056:39;:::i;:::-;2117:91;2166:41;2190:16;2166:41;:::i;:::-;2158:6;2151:4;2145:11;2117:91;:::i;:::-;2111:4;2104:105;2022:193;1946:269;;;:::o;2221:73::-;2266:3;2287:1;2280:8;;2221:73;:::o;2300:189::-;2377:32;;:::i;:::-;2418:65;2476:6;2468;2462:4;2418:65;:::i;:::-;2353:136;2300:189;;:::o;2495:186::-;2555:120;2572:3;2565:5;2562:14;2555:120;;;2626:39;2663:1;2656:5;2626:39;:::i;:::-;2599:1;2592:5;2588:13;2579:22;;2555:120;;;2495:186;;:::o;2687:543::-;2788:2;2783:3;2780:11;2777:446;;;2822:38;2854:5;2822:38;:::i;:::-;2906:29;2924:10;2906:29;:::i;:::-;2896:8;2892:44;3089:2;3077:10;3074:18;3071:49;;;3110:8;3095:23;;3071:49;3133:80;3189:22;3207:3;3189:22;:::i;:::-;3179:8;3175:37;3162:11;3133:80;:::i;:::-;2792:431;;2777:446;2687:543;;;:::o;3236:117::-;3290:8;3340:5;3334:4;3330:16;3309:37;;3236:117;;;;:::o;3359:169::-;3403:6;3436:51;3484:1;3480:6;3472:5;3469:1;3465:13;3436:51;:::i;:::-;3432:56;3517:4;3511;3507:15;3497:25;;3410:118;3359:169;;;;:::o;3533:295::-;3609:4;3755:29;3780:3;3774:4;3755:29;:::i;:::-;3747:37;;3817:3;3814:1;3810:11;3804:4;3801:21;3793:29;;3533:295;;;;:::o;3833:1395::-;3950:37;3983:3;3950:37;:::i;:::-;4052:18;4044:6;4041:30;4038:56;;;4074:18;;:::i;:::-;4038:56;4118:38;4150:4;4144:11;4118:38;:::i;:::-;4203:67;4263:6;4255;4249:4;4203:67;:::i;:::-;4297:1;4321:4;4308:17;;4353:2;4345:6;4342:14;4370:1;4365:618;;;;5027:1;5044:6;5041:77;;;5093:9;5088:3;5084:19;5078:26;5069:35;;5041:77;5144:67;5204:6;5197:5;5144:67;:::i;:::-;5138:4;5131:81;5000:222;4335:887;;4365:618;4417:4;4413:9;4405:6;4401:22;4451:37;4483:4;4451:37;:::i;:::-;4510:1;4524:208;4538:7;4535:1;4532:14;4524:208;;;4617:9;4612:3;4608:19;4602:26;4594:6;4587:42;4668:1;4660:6;4656:14;4646:24;;4715:2;4704:9;4700:18;4687:31;;4561:4;4558:1;4554:12;4549:17;;4524:208;;;4760:6;4751:7;4748:19;4745:179;;;4818:9;4813:3;4809:19;4803:26;4861:48;4903:4;4895:6;4891:17;4880:9;4861:48;:::i;:::-;4853:6;4846:64;4768:156;4745:179;4970:1;4966;4958:6;4954:14;4950:22;4944:4;4937:36;4372:611;;;4335:887;;3925:1303;;;3833:1395;;:::o;177:182:5:-;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561000f575f5ffd5b506004361061009c575f3560e01c806340c10f191161006457806340c10f191461015a57806370a082311461017657806395d89b41146101a6578063a9059cbb146101c4578063dd62ed3e146101f45761009c565b806306fdde03146100a0578063095ea7b3146100be57806318160ddd146100ee57806323b872dd1461010c578063313ce5671461013c575b5f5ffd5b6100a8610224565b6040516100b59190610b0f565b60405180910390f35b6100d860048036038101906100d39190610bc0565b6102b4565b6040516100e59190610c18565b60405180910390f35b6100f66102d6565b6040516101039190610c40565b60405180910390f35b61012660048036038101906101219190610c59565b6102df565b6040516101339190610c18565b60405180910390f35b61014461030d565b6040516101519190610cc4565b60405180910390f35b610174600480360381019061016f9190610bc0565b610315565b005b610190600480360381019061018b9190610cdd565b610323565b60405161019d9190610c40565b60405180910390f35b6101ae610368565b6040516101bb9190610b0f565b60405180910390f35b6101de60048036038101906101d99190610bc0565b6103f8565b6040516101eb9190610c18565b60405180910390f35b61020e60048036038101906102099190610d08565b61041a565b60405161021b9190610c40565b60405180910390f35b60606003805461023390610d73565b80601f016020809104026020016040519081016040528092919081815260200182805461025f90610d73565b80156102aa5780601f10610281576101008083540402835291602001916102aa565b820191905f5260205f20905b81548152906001019060200180831161028d57829003601f168201915b5050505050905090565b5f5f6102be61049c565b90506102cb8185856104a3565b600191505092915050565b5f600254905090565b5f5f6102e961049c565b90506102f68582856104b5565b610301858585610548565b60019150509392505050565b5f6012905090565b61031f8282610638565b5050565b5f5f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b60606004805461037790610d73565b80601f01602080910402602001604051908101604052809291908181526020018280546103a390610d73565b80156103ee5780601f106103c5576101008083540402835291602001916103ee565b820191905f5260205f20905b8154815290600101906020018083116103d157829003601f168201915b5050505050905090565b5f5f61040261049c565b905061040f818585610548565b600191505092915050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f33905090565b6104b083838360016106b7565b505050565b5f6104c0848461041a565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8110156105425781811015610533578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161052a93929190610db2565b60405180910390fd5b61054184848484035f6106b7565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036105b8575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016105af9190610de7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610628575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161061f9190610de7565b60405180910390fd5b610633838383610886565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036106a8575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161069f9190610de7565b60405180910390fd5b6106b35f8383610886565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610727575f6040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161071e9190610de7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610797575f6040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161078e9190610de7565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015610880578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516108779190610c40565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108d6578060025f8282546108ca9190610e2d565b925050819055506109a4565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561095f578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161095693929190610db2565b60405180910390fd5b8181035f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036109eb578060025f8282540392505081905550610a35565b805f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610a929190610c40565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f610ae182610a9f565b610aeb8185610aa9565b9350610afb818560208601610ab9565b610b0481610ac7565b840191505092915050565b5f6020820190508181035f830152610b278184610ad7565b905092915050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610b5c82610b33565b9050919050565b610b6c81610b52565b8114610b76575f5ffd5b50565b5f81359050610b8781610b63565b92915050565b5f819050919050565b610b9f81610b8d565b8114610ba9575f5ffd5b50565b5f81359050610bba81610b96565b92915050565b5f5f60408385031215610bd657610bd5610b2f565b5b5f610be385828601610b79565b9250506020610bf485828601610bac565b9150509250929050565b5f8115159050919050565b610c1281610bfe565b82525050565b5f602082019050610c2b5f830184610c09565b92915050565b610c3a81610b8d565b82525050565b5f602082019050610c535f830184610c31565b92915050565b5f5f5f60608486031215610c7057610c6f610b2f565b5b5f610c7d86828701610b79565b9350506020610c8e86828701610b79565b9250506040610c9f86828701610bac565b9150509250925092565b5f60ff82169050919050565b610cbe81610ca9565b82525050565b5f602082019050610cd75f830184610cb5565b92915050565b5f60208284031215610cf257610cf1610b2f565b5b5f610cff84828501610b79565b91505092915050565b5f5f60408385031215610d1e57610d1d610b2f565b5b5f610d2b85828601610b79565b9250506020610d3c85828601610b79565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610d8a57607f821691505b602082108103610d9d57610d9c610d46565b5b50919050565b610dac81610b52565b82525050565b5f606082019050610dc55f830186610da3565b610dd26020830185610c31565b610ddf6040830184610c31565b949350505050565b5f602082019050610dfa5f830184610da3565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610e3782610b8d565b9150610e4283610b8d565b9250828201905080821115610e5a57610e59610e00565b5b9291505056fea2646970667358221220638f982993fae58ce28ce12ab0e49d333fb8ead7aab594ccc1c640076134807564736f6c634300081e0033","sourceMap":"177:182:5:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1779:89:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3998:186;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2849:97;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4776:244;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2707:82;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;260:97:5;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3004:116:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1981:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3315:178;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3551:140;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1779:89;1824:13;1856:5;1849:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1779:89;:::o;3998:186::-;4071:4;4087:13;4103:12;:10;:12::i;:::-;4087:28;;4125:31;4134:5;4141:7;4150:5;4125:8;:31::i;:::-;4173:4;4166:11;;;3998:186;;;;:::o;2849:97::-;2901:7;2927:12;;2920:19;;2849:97;:::o;4776:244::-;4863:4;4879:15;4897:12;:10;:12::i;:::-;4879:30;;4919:37;4935:4;4941:7;4950:5;4919:15;:37::i;:::-;4966:26;4976:4;4982:2;4986:5;4966:9;:26::i;:::-;5009:4;5002:11;;;4776:244;;;;;:::o;2707:82::-;2756:5;2780:2;2773:9;;2707:82;:::o;260:97:5:-;326:24;332:9;343:6;326:5;:24::i;:::-;260:97;;:::o;3004:116:1:-;3069:7;3095:9;:18;3105:7;3095:18;;;;;;;;;;;;;;;;3088:25;;3004:116;;;:::o;1981:93::-;2028:13;2060:7;2053:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1981:93;:::o;3315:178::-;3384:4;3400:13;3416:12;:10;:12::i;:::-;3400:28;;3438:27;3448:5;3455:2;3459:5;3438:9;:27::i;:::-;3482:4;3475:11;;;3315:178;;;;:::o;3551:140::-;3631:7;3657:11;:18;3669:5;3657:18;;;;;;;;;;;;;;;:27;3676:7;3657:27;;;;;;;;;;;;;;;;3650:34;;3551:140;;;;:::o;656:96:4:-;709:7;735:10;728:17;;656:96;:::o;8726:128:1:-;8810:37;8819:5;8826:7;8835:5;8842:4;8810:8;:37::i;:::-;8726:128;;;:::o;10415:476::-;10514:24;10541:25;10551:5;10558:7;10541:9;:25::i;:::-;10514:52;;10599:17;10580:16;:36;10576:309;;;10655:5;10636:16;:24;10632:130;;;10714:7;10723:16;10741:5;10687:60;;;;;;;;;;;;;:::i;:::-;;;;;;;;10632:130;10803:57;10812:5;10819:7;10847:5;10828:16;:24;10854:5;10803:8;:57::i;:::-;10576:309;10504:387;10415:476;;;:::o;5393:300::-;5492:1;5476:18;;:4;:18;;;5472:86;;5544:1;5517:30;;;;;;;;;;;:::i;:::-;;;;;;;;5472:86;5585:1;5571:16;;:2;:16;;;5567:86;;5639:1;5610:32;;;;;;;;;;;:::i;:::-;;;;;;;;5567:86;5662:24;5670:4;5676:2;5680:5;5662:7;:24::i;:::-;5393:300;;;:::o;7458:208::-;7547:1;7528:21;;:7;:21;;;7524:91;;7601:1;7572:32;;;;;;;;;;;:::i;:::-;;;;;;;;7524:91;7624:35;7640:1;7644:7;7653:5;7624:7;:35::i;:::-;7458:208;;:::o;9701:432::-;9830:1;9813:19;;:5;:19;;;9809:89;;9884:1;9855:32;;;;;;;;;;;:::i;:::-;;;;;;;;9809:89;9930:1;9911:21;;:7;:21;;;9907:90;;9983:1;9955:31;;;;;;;;;;;:::i;:::-;;;;;;;;9907:90;10036:5;10006:11;:18;10018:5;10006:18;;;;;;;;;;;;;;;:27;10025:7;10006:27;;;;;;;;;;;;;;;:35;;;;10055:9;10051:76;;;10101:7;10085:31;;10094:5;10085:31;;;10110:5;10085:31;;;;;;:::i;:::-;;;;;;;;10051:76;9701:432;;;;:::o;6008:1107::-;6113:1;6097:18;;:4;:18;;;6093:540;;6249:5;6233:12;;:21;;;;;;;:::i;:::-;;;;;;;;6093:540;;;6285:19;6307:9;:15;6317:4;6307:15;;;;;;;;;;;;;;;;6285:37;;6354:5;6340:11;:19;6336:115;;;6411:4;6417:11;6430:5;6386:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;6336:115;6603:5;6589:11;:19;6571:9;:15;6581:4;6571:15;;;;;;;;;;;;;;;:37;;;;6271:362;6093:540;6661:1;6647:16;;:2;:16;;;6643:425;;6826:5;6810:12;;:21;;;;;;;;;;;6643:425;;;7038:5;7021:9;:13;7031:2;7021:13;;;;;;;;;;;;;;;;:22;;;;;;;;;;;6643:425;7098:2;7083:25;;7092:4;7083:25;;;7102:5;7083:25;;;;;;:::i;:::-;;;;;;;;6008:1107;;;:::o;7:99:6:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:139::-;376:6;371:3;366;360:23;417:1;408:6;403:3;399:16;392:27;287:139;;;:::o;432:102::-;473:6;524:2;520:7;515:2;508:5;504:14;500:28;490:38;;432:102;;;:::o;540:377::-;628:3;656:39;689:5;656:39;:::i;:::-;711:71;775:6;770:3;711:71;:::i;:::-;704:78;;791:65;849:6;844:3;837:4;830:5;826:16;791:65;:::i;:::-;881:29;903:6;881:29;:::i;:::-;876:3;872:39;865:46;;632:285;540:377;;;;:::o;923:313::-;1036:4;1074:2;1063:9;1059:18;1051:26;;1123:9;1117:4;1113:20;1109:1;1098:9;1094:17;1087:47;1151:78;1224:4;1215:6;1151:78;:::i;:::-;1143:86;;923:313;;;;:::o;1323:117::-;1432:1;1429;1422:12;1569:126;1606:7;1646:42;1639:5;1635:54;1624:65;;1569:126;;;:::o;1701:96::-;1738:7;1767:24;1785:5;1767:24;:::i;:::-;1756:35;;1701:96;;;:::o;1803:122::-;1876:24;1894:5;1876:24;:::i;:::-;1869:5;1866:35;1856:63;;1915:1;1912;1905:12;1856:63;1803:122;:::o;1931:139::-;1977:5;2015:6;2002:20;1993:29;;2031:33;2058:5;2031:33;:::i;:::-;1931:139;;;;:::o;2076:77::-;2113:7;2142:5;2131:16;;2076:77;;;:::o;2159:122::-;2232:24;2250:5;2232:24;:::i;:::-;2225:5;2222:35;2212:63;;2271:1;2268;2261:12;2212:63;2159:122;:::o;2287:139::-;2333:5;2371:6;2358:20;2349:29;;2387:33;2414:5;2387:33;:::i;:::-;2287:139;;;;:::o;2432:474::-;2500:6;2508;2557:2;2545:9;2536:7;2532:23;2528:32;2525:119;;;2563:79;;:::i;:::-;2525:119;2683:1;2708:53;2753:7;2744:6;2733:9;2729:22;2708:53;:::i;:::-;2698:63;;2654:117;2810:2;2836:53;2881:7;2872:6;2861:9;2857:22;2836:53;:::i;:::-;2826:63;;2781:118;2432:474;;;;;:::o;2912:90::-;2946:7;2989:5;2982:13;2975:21;2964:32;;2912:90;;;:::o;3008:109::-;3089:21;3104:5;3089:21;:::i;:::-;3084:3;3077:34;3008:109;;:::o;3123:210::-;3210:4;3248:2;3237:9;3233:18;3225:26;;3261:65;3323:1;3312:9;3308:17;3299:6;3261:65;:::i;:::-;3123:210;;;;:::o;3339:118::-;3426:24;3444:5;3426:24;:::i;:::-;3421:3;3414:37;3339:118;;:::o;3463:222::-;3556:4;3594:2;3583:9;3579:18;3571:26;;3607:71;3675:1;3664:9;3660:17;3651:6;3607:71;:::i;:::-;3463:222;;;;:::o;3691:619::-;3768:6;3776;3784;3833:2;3821:9;3812:7;3808:23;3804:32;3801:119;;;3839:79;;:::i;:::-;3801:119;3959:1;3984:53;4029:7;4020:6;4009:9;4005:22;3984:53;:::i;:::-;3974:63;;3930:117;4086:2;4112:53;4157:7;4148:6;4137:9;4133:22;4112:53;:::i;:::-;4102:63;;4057:118;4214:2;4240:53;4285:7;4276:6;4265:9;4261:22;4240:53;:::i;:::-;4230:63;;4185:118;3691:619;;;;;:::o;4316:86::-;4351:7;4391:4;4384:5;4380:16;4369:27;;4316:86;;;:::o;4408:112::-;4491:22;4507:5;4491:22;:::i;:::-;4486:3;4479:35;4408:112;;:::o;4526:214::-;4615:4;4653:2;4642:9;4638:18;4630:26;;4666:67;4730:1;4719:9;4715:17;4706:6;4666:67;:::i;:::-;4526:214;;;;:::o;4746:329::-;4805:6;4854:2;4842:9;4833:7;4829:23;4825:32;4822:119;;;4860:79;;:::i;:::-;4822:119;4980:1;5005:53;5050:7;5041:6;5030:9;5026:22;5005:53;:::i;:::-;4995:63;;4951:117;4746:329;;;;:::o;5081:474::-;5149:6;5157;5206:2;5194:9;5185:7;5181:23;5177:32;5174:119;;;5212:79;;:::i;:::-;5174:119;5332:1;5357:53;5402:7;5393:6;5382:9;5378:22;5357:53;:::i;:::-;5347:63;;5303:117;5459:2;5485:53;5530:7;5521:6;5510:9;5506:22;5485:53;:::i;:::-;5475:63;;5430:118;5081:474;;;;;:::o;5561:180::-;5609:77;5606:1;5599:88;5706:4;5703:1;5696:15;5730:4;5727:1;5720:15;5747:320;5791:6;5828:1;5822:4;5818:12;5808:22;;5875:1;5869:4;5865:12;5896:18;5886:81;;5952:4;5944:6;5940:17;5930:27;;5886:81;6014:2;6006:6;6003:14;5983:18;5980:38;5977:84;;6033:18;;:::i;:::-;5977:84;5798:269;5747:320;;;:::o;6073:118::-;6160:24;6178:5;6160:24;:::i;:::-;6155:3;6148:37;6073:118;;:::o;6197:442::-;6346:4;6384:2;6373:9;6369:18;6361:26;;6397:71;6465:1;6454:9;6450:17;6441:6;6397:71;:::i;:::-;6478:72;6546:2;6535:9;6531:18;6522:6;6478:72;:::i;:::-;6560;6628:2;6617:9;6613:18;6604:6;6560:72;:::i;:::-;6197:442;;;;;;:::o;6645:222::-;6738:4;6776:2;6765:9;6761:18;6753:26;;6789:71;6857:1;6846:9;6842:17;6833:6;6789:71;:::i;:::-;6645:222;;;;:::o;6873:180::-;6921:77;6918:1;6911:88;7018:4;7015:1;7008:15;7042:4;7039:1;7032:15;7059:191;7099:3;7118:20;7136:1;7118:20;:::i;:::-;7113:25;;7152:20;7170:1;7152:20;:::i;:::-;7147:25;;7195:1;7192;7188:9;7181:16;;7216:3;7213:1;7210:10;7207:36;;;7223:18;;:::i;:::-;7207:36;7059:191;;;;:::o","linkReferences":{}},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","mint(address,uint256)":"40c10f19","name()":"06fdde03","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.30+commit.73712a01\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"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\":\"value\",\"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\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"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\":\"value\",\"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\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}]},\"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 `value` 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}.\"},\"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 `value`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. 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 `value`. - the caller must have allowance for ``from``'s tokens of at least `value`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/TestToken.sol\":\"TestToken\"},\"evmVersion\":\"prague\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":solady/=lib/solady/src/\"]},\"sources\":{\"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b\",\"dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x6ef9389a2c07bc40d8a7ba48914724ab2c108fac391ce12314f01321813e6368\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7a5cb39b1e6df68f4dd9a5e76e853d745a74ffb3dfd7df4ae4d2ace6992a171\",\"dweb:/ipfs/QmPbzKR19rdM8X3PLQjsmHRepUKhvoZnedSR63XyGtXZib\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf\",\"dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r\"]},\"lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"src/TestToken.sol\":{\"keccak256\":\"0xf61a41d105bb8c269ed0ede72abbfdc54edfe831875432da4f17fc13be72589b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2e9b7624bc531de49788c2abdcca77ac6d94721d8c276654065edf8bcf7c1d6a\",\"dweb:/ipfs/QmUMRP8cSbPxm2Atwxxevkz35z3EoHhcrj4sopmxAoWxoy\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.30+commit.73712a01"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"type":"error","name":"ERC20InsufficientAllowance"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"type":"error","name":"ERC20InsufficientBalance"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"type":"error","name":"ERC20InvalidApprover"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"type":"error","name":"ERC20InvalidReceiver"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"type":"error","name":"ERC20InvalidSender"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"type":"error","name":"ERC20InvalidSpender"},{"inputs":[{"internalType":"address","name":"owner","type":"address","indexed":true},{"internalType":"address","name":"spender","type":"address","indexed":true},{"internalType":"uint256","name":"value","type":"uint256","indexed":false}],"type":"event","name":"Approval","anonymous":false},{"inputs":[{"internalType":"address","name":"from","type":"address","indexed":true},{"internalType":"address","name":"to","type":"address","indexed":true},{"internalType":"uint256","name":"value","type":"uint256","indexed":false}],"type":"event","name":"Transfer","anonymous":false},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"stateMutability":"view","type":"function","name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}]},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"mint"},{"inputs":[],"stateMutability":"view","type":"function","name":"name","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}]}],"devdoc":{"kind":"dev","methods":{"allowance(address,address)":{"details":"See {IERC20-allowance}."},"approve(address,uint256)":{"details":"See {IERC20-approve}. NOTE: If `value` 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}."},"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 `value`."},"transferFrom(address,address,uint256)":{"details":"See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. 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 `value`. - the caller must have allowance for ``from``'s tokens of at least `value`."}},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/","solady/=lib/solady/src/"],"optimizer":{"enabled":false,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/TestToken.sol":"TestToken"},"evmVersion":"prague","libraries":{}},"sources":{"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol":{"keccak256":"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b","urls":["bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b","dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol":{"keccak256":"0x6ef9389a2c07bc40d8a7ba48914724ab2c108fac391ce12314f01321813e6368","urls":["bzz-raw://b7a5cb39b1e6df68f4dd9a5e76e853d745a74ffb3dfd7df4ae4d2ace6992a171","dweb:/ipfs/QmPbzKR19rdM8X3PLQjsmHRepUKhvoZnedSR63XyGtXZib"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7","urls":["bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db","dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"keccak256":"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330","urls":["bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf","dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Context.sol":{"keccak256":"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2","urls":["bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12","dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF"],"license":"MIT"},"src/TestToken.sol":{"keccak256":"0xf61a41d105bb8c269ed0ede72abbfdc54edfe831875432da4f17fc13be72589b","urls":["bzz-raw://2e9b7624bc531de49788c2abdcca77ac6d94721d8c276654065edf8bcf7c1d6a","dweb:/ipfs/QmUMRP8cSbPxm2Atwxxevkz35z3EoHhcrj4sopmxAoWxoy"],"license":"MIT"}},"version":1},"id":5} \ No newline at end of file From 8ee9466d00b654ac7bbedc27e318a301241f7b6f Mon Sep 17 00:00:00 2001 From: ricomateo Date: Thu, 13 Nov 2025 17:19:20 -0300 Subject: [PATCH 03/15] add dockerfile --- app/.dockerignore | 3 +++ app/Dockerfile | 35 +++++++++++++++++++++++++++++++++++ app/nginx.conf | 11 +++++++++++ 3 files changed, 49 insertions(+) create mode 100644 app/.dockerignore create mode 100644 app/Dockerfile create mode 100644 app/nginx.conf diff --git a/app/.dockerignore b/app/.dockerignore new file mode 100644 index 0000000..58f1445 --- /dev/null +++ b/app/.dockerignore @@ -0,0 +1,3 @@ +node_modules +build +npm-debug.log diff --git a/app/Dockerfile b/app/Dockerfile new file mode 100644 index 0000000..9eecdfe --- /dev/null +++ b/app/Dockerfile @@ -0,0 +1,35 @@ +FROM node:22-alpine3.21 AS build + +# Set the working directory inside the container +WORKDIR /usr/src/app + +# Copy package.json and package-lock.json into the container +COPY package*.json ./ + +# node-gyp requires python3 +RUN apk add --no-cache python3 make g++ + +# Install dependencies using npm +RUN npm install + +# Copy the project files into the working directory +COPY . . + +# Build the React app for production +RUN npm run build + + +# Use the official NGINX image for production +FROM nginx:stable-alpine AS production + +# copy nginx configuration in side conf.d folder +COPY --from=build /usr/src/app/nginx.conf /etc/nginx/conf.d + +# Copy the build output from the dist folder into the Nginx html directory +COPY --from=build /usr/src/app/dist /usr/share/nginx/html + +# Expose port 3000 to allow access to the app +EXPOSE 3000 + +# Run Nginx in the foreground +ENTRYPOINT ["nginx", "-g", "daemon off;"] diff --git a/app/nginx.conf b/app/nginx.conf new file mode 100644 index 0000000..0750d8f --- /dev/null +++ b/app/nginx.conf @@ -0,0 +1,11 @@ +server { + listen 3000; + server_name _; + + root /usr/share/nginx/html; + index index.html; + + location / { + try_files $uri $uri/ /index.html; + } +} From bc842cf2d1c4f73e8ea31a1e53f3bc48864c0c70 Mon Sep 17 00:00:00 2001 From: ricomateo Date: Thu, 13 Nov 2025 17:23:00 -0300 Subject: [PATCH 04/15] remove abi formatting --- app/abi/Delegation.json | 536 +--------------------------------------- 1 file changed, 1 insertion(+), 535 deletions(-) diff --git a/app/abi/Delegation.json b/app/abi/Delegation.json index c81dc67..8c00583 100644 --- a/app/abi/Delegation.json +++ b/app/abi/Delegation.json @@ -1,535 +1 @@ -{ - "abi": [ - { - "type": "receive", - "stateMutability": "payable" - }, - { - "type": "function", - "name": "authorize", - "inputs": [ - { - "name": "authorized", - "type": "tuple", - "internalType": "struct ECDSA.PublicKey", - "components": [ - { - "name": "x", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "y", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "name": "signature", - "type": "tuple", - "internalType": "struct ECDSA.RecoveredSignature", - "components": [ - { - "name": "r", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "s", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "yParity", - "type": "uint8", - "internalType": "uint8" - } - ] - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "authorizedKey", - "inputs": [], - "outputs": [ - { - "name": "x", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "y", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "execute", - "inputs": [ - { - "name": "to", - "type": "address", - "internalType": "address" - }, - { - "name": "value", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "data", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "signature", - "type": "tuple", - "internalType": "struct ECDSA.Signature", - "components": [ - { - "name": "r", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "s", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "name": "metadata", - "type": "tuple", - "internalType": "struct WebAuthnP256.Metadata", - "components": [ - { - "name": "authenticatorData", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "clientDataJSON", - "type": "string", - "internalType": "string" - }, - { - "name": "challengeIndex", - "type": "uint16", - "internalType": "uint16" - }, - { - "name": "typeIndex", - "type": "uint16", - "internalType": "uint16" - }, - { - "name": "userVerificationRequired", - "type": "bool", - "internalType": "bool" - } - ] - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "nonce", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "event", - "name": "Authorized", - "inputs": [ - { - "name": "authorized", - "type": "tuple", - "indexed": true, - "internalType": "struct ECDSA.PublicKey", - "components": [ - { - "name": "x", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "y", - "type": "uint256", - "internalType": "uint256" - } - ] - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "Executed", - "inputs": [ - { - "name": "to", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "value", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "data", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - } - ], - "anonymous": false - } - ], - "bytecode": { - "object": "0x6080604052348015600e575f5ffd5b506119d68061001c5f395ff3fe608060405260043610610042575f3560e01c80630f0b37851461004d5780633bc67d4b14610075578063affed0e01461009d578063c417a8c5146100c757610049565b3661004957005b5f5ffd5b348015610058575f5ffd5b50610073600480360381019061006e9190610b5a565b6100f2565b005b348015610080575f5ffd5b5061009b60048036038101906100969190610cc2565b610285565b005b3480156100a8575f5ffd5b506100b1610459565b6040516100be9190610d83565b60405180910390f35b3480156100d2575f5ffd5b506100db61045e565b6040516100e9929190610d9c565b60405180910390f35b5f5f54835f0135846020013560405160200161011093929190610de3565b6040516020818303038152906040528051906020012090505f5f81548092919061013990610e4c565b91905055505f6001825f8560400160208101906101569190610ec9565b60ff161461016557601c610168565b601b5b855f01355f1b86602001355f1b6040515f81526020016040526040516101919493929190610f1b565b6020604051602081039080840390855afa1580156101b1573d5f5f3e3d5ffd5b5050506020604051035190503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461022b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161022290610fb8565b60405180910390fd5b836001818161023a91906110d1565b9050508360405161024b9190611156565b60405180910390207f7ab2d3841cf199f7bdf9a46a067653d528b42029acf32bdbe62dd8191ce226ad60405160405180910390a250505050565b5f5f54878787876040516020016102a09594939291906111f1565b6040516020818303038152906040528051906020012090505f5f8154809291906102c990610e4c565b919050555061031281836102dc90611539565b858036038101906102ed9190611598565b60016040518060400160405290815f820154815260200160018201548152505061046f565b610351576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103489061160d565b60405180910390fd5b5f8773ffffffffffffffffffffffffffffffffffffffff1687878760405161037a92919061162b565b5f6040518083038185875af1925050503d805f81146103b4576040519150601f19603f3d011682016040523d82523d5f602084013e6103b9565b606091505b50509050806103fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103f49061168d565b60405180910390fd5b8773ffffffffffffffffffffffffffffffffffffffff167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f888888604051610447939291906116e7565b60405180910390a25050505050505050565b5f5481565b6001805f0154908060010154905082565b5f6025845f01515110806104af57506104ad845f015160208151811061049857610497611717565b5b602001015160f81c60f81b8560800151610675565b155b156104bc575f905061066d565b5f6040518060400160405280601581526020017f2274797065223a22776562617574686e2e676574220000000000000000000000815250905061050c818660200151876060015161ffff166107f9565b610519575f91505061066d565b5f6105458760405160200161052e9190611764565b6040516020818303038152906040526001806108f3565b90505f81604051602001610559919061181c565b6040516020818303038152906040529050610581818860200151896040015161ffff166107f9565b610590575f935050505061066d565b5f600288602001516040516105a5919061188a565b602060405180830381855afa1580156105c0573d5f5f3e3d5ffd5b5050506040513d601f19601f820116820180604052508101906105e391906118ca565b90505f6002895f0151836040516020016105fe9291906118f5565b60405160208183030381529060405260405161061a919061188a565b602060405180830381855afa158015610635573d5f5f3e3d5ffd5b5050506040513d601f19601f8201168201806040525081019061065891906118ca565b90506106658189896109fd565b955050505050505b949350505050565b5f600160f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916600160f81b84167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146106d3575f90506107f3565b81801561072e5750600460f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916600460f81b84167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b1561073b575f90506107f3565b600860f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916600860f81b84167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146107ee57601060f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916601060f81b84167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036107ed575f90506107f3565b5b600190505b92915050565b5f5f8490505f8490505f825190505f825190505f5f90505b828110156108e257818188610826919061191c565b10610838575f955050505050506108ec565b838188610845919061191c565b8151811061085657610855611717565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191685828151811061089657610895611717565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146108d5575f955050505050506108ec565b8080600101915050610811565b5060019450505050505b9392505050565b6060835180156109f5576003600282010460021b60405192507f4142434445464748494a4b4c4d4e4f505152535455565758595a616263646566601f526106708515027f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5f18603f526020830181810183886020010180515f82525b6001156109c25760038a0199508951603f8160121c16515f53603f81600c1c1651600153603f8160061c1651600253603f8116516003535f5185526004850194508385106109bc57506109c2565b5061096e565b8082526020830160405260038606600204613d3d60f01b81860352808915150290505f8186035280860388525050505050505b509392505050565b5f5f5f61010073ffffffffffffffffffffffffffffffffffffffff1686865f01518760200151875f01518860200151604051602001610a4095949392919061194f565b604051602081830303815290604052604051610a5c919061188a565b5f60405180830381855afa9150503d805f8114610a94576040519150601f19603f3d011682016040523d82523d5f602084013e610a99565b606091505b5091509150818015610aac575060208151145b8015610afb5750600160f81b81601f81518110610acc57610acb611717565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b915081925050509392505050565b5f604051905090565b5f5ffd5b5f5ffd5b5f5ffd5b5f60408284031215610b3357610b32610b1a565b5b81905092915050565b5f60608284031215610b5157610b50610b1a565b5b81905092915050565b5f5f60a08385031215610b7057610b6f610b12565b5b5f610b7d85828601610b1e565b9250506040610b8e85828601610b3c565b9150509250929050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610bc182610b98565b9050919050565b610bd181610bb7565b8114610bdb575f5ffd5b50565b5f81359050610bec81610bc8565b92915050565b5f819050919050565b610c0481610bf2565b8114610c0e575f5ffd5b50565b5f81359050610c1f81610bfb565b92915050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f840112610c4657610c45610c25565b5b8235905067ffffffffffffffff811115610c6357610c62610c29565b5b602083019150836001820283011115610c7f57610c7e610c2d565b5b9250929050565b5f60408284031215610c9b57610c9a610b1a565b5b81905092915050565b5f60a08284031215610cb957610cb8610b1a565b5b81905092915050565b5f5f5f5f5f5f60c08789031215610cdc57610cdb610b12565b5b5f610ce989828a01610bde565b9650506020610cfa89828a01610c11565b955050604087013567ffffffffffffffff811115610d1b57610d1a610b16565b5b610d2789828a01610c31565b94509450506060610d3a89828a01610c86565b92505060a087013567ffffffffffffffff811115610d5b57610d5a610b16565b5b610d6789828a01610ca4565b9150509295509295509295565b610d7d81610bf2565b82525050565b5f602082019050610d965f830184610d74565b92915050565b5f604082019050610daf5f830185610d74565b610dbc6020830184610d74565b9392505050565b5f819050919050565b610ddd610dd882610bf2565b610dc3565b82525050565b5f610dee8286610dcc565b602082019150610dfe8285610dcc565b602082019150610e0e8284610dcc565b602082019150819050949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610e5682610bf2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610e8857610e87610e1f565b5b600182019050919050565b5f60ff82169050919050565b610ea881610e93565b8114610eb2575f5ffd5b50565b5f81359050610ec381610e9f565b92915050565b5f60208284031215610ede57610edd610b12565b5b5f610eeb84828501610eb5565b91505092915050565b5f819050919050565b610f0681610ef4565b82525050565b610f1581610e93565b82525050565b5f608082019050610f2e5f830187610efd565b610f3b6020830186610f0c565b610f486040830185610efd565b610f556060830184610efd565b95945050505050565b5f82825260208201905092915050565b7f556e617574686f72697a656400000000000000000000000000000000000000005f82015250565b5f610fa2600c83610f5e565b9150610fad82610f6e565b602082019050919050565b5f6020820190508181035f830152610fcf81610f96565b9050919050565b5f8135610fe281610bfb565b80915050919050565b5f815f1b9050919050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61102184610feb565b9350801983169250808416831791505092915050565b5f819050919050565b5f61105a61105561105084610bf2565b611037565b610bf2565b9050919050565b5f819050919050565b61107382611040565b61108661107f82611061565b8354610ff6565b8255505050565b5f81015f83018061109d81610fd6565b90506110a9818461106a565b5050506001810160208301806110be81610fd6565b90506110ca818461106a565b5050505050565b6110db828261108d565b5050565b5f6110ed6020840184610c11565b905092915050565b6110fe81610bf2565b82525050565b5f61110f83836110f5565b60208301905092915050565b5f820161112a5f8301836110df565b6111348482611104565b93505061114460208301836110df565b61114e8482611104565b935050505050565b5f611161828461111b565b60408201915081905092915050565b5f8160601b9050919050565b5f61118682611170565b9050919050565b5f6111978261117c565b9050919050565b6111af6111aa82610bb7565b61118d565b82525050565b5f81905092915050565b828183375f83830152505050565b5f6111d883856111b5565b93506111e58385846111bf565b82840190509392505050565b5f6111fc8288610dcc565b60208201915061120c828761119e565b60148201915061121c8286610dcc565b60208201915061122d8284866111cd565b91508190509695505050505050565b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61128682611240565b810181811067ffffffffffffffff821117156112a5576112a4611250565b5b80604052505050565b5f6112b7610b09565b90506112c3828261127d565b919050565b5f5ffd5b5f5ffd5b5f67ffffffffffffffff8211156112ea576112e9611250565b5b6112f382611240565b9050602081019050919050565b5f61131261130d846112d0565b6112ae565b90508281526020810184848401111561132e5761132d6112cc565b5b6113398482856111bf565b509392505050565b5f82601f83011261135557611354610c25565b5b8135611365848260208601611300565b91505092915050565b5f67ffffffffffffffff82111561138857611387611250565b5b61139182611240565b9050602081019050919050565b5f6113b06113ab8461136e565b6112ae565b9050828152602081018484840111156113cc576113cb6112cc565b5b6113d78482856111bf565b509392505050565b5f82601f8301126113f3576113f2610c25565b5b813561140384826020860161139e565b91505092915050565b5f61ffff82169050919050565b6114228161140c565b811461142c575f5ffd5b50565b5f8135905061143d81611419565b92915050565b5f8115159050919050565b61145781611443565b8114611461575f5ffd5b50565b5f813590506114728161144e565b92915050565b5f60a0828403121561148d5761148c61123c565b5b61149760a06112ae565b90505f82013567ffffffffffffffff8111156114b6576114b56112c8565b5b6114c284828501611341565b5f83015250602082013567ffffffffffffffff8111156114e5576114e46112c8565b5b6114f1848285016113df565b60208301525060406115058482850161142f565b60408301525060606115198482850161142f565b606083015250608061152d84828501611464565b60808301525092915050565b5f6115443683611478565b9050919050565b5f604082840312156115605761155f61123c565b5b61156a60406112ae565b90505f61157984828501610c11565b5f83015250602061158c84828501610c11565b60208301525092915050565b5f604082840312156115ad576115ac610b12565b5b5f6115ba8482850161154b565b91505092915050565b7f496e76616c6964207369676e61747572650000000000000000000000000000005f82015250565b5f6115f7601183610f5e565b9150611602826115c3565b602082019050919050565b5f6020820190508181035f830152611624816115eb565b9050919050565b5f6116378284866111cd565b91508190509392505050565b7f43616c6c206661696c65640000000000000000000000000000000000000000005f82015250565b5f611677600b83610f5e565b915061168282611643565b602082019050919050565b5f6020820190508181035f8301526116a48161166b565b9050919050565b5f82825260208201905092915050565b5f6116c683856116ab565b93506116d38385846111bf565b6116dc83611240565b840190509392505050565b5f6040820190506116fa5f830186610d74565b818103602083015261170d8184866116bb565b9050949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b61175e61175982610ef4565b611744565b82525050565b5f61176f828461174d565b60208201915081905092915050565b7f226368616c6c656e6765223a2200000000000000000000000000000000000000815250565b5f81519050919050565b5f81905092915050565b8281835e5f83830152505050565b5f6117d0826117a4565b6117da81856117ae565b93506117ea8185602086016117b8565b80840191505092915050565b7f2200000000000000000000000000000000000000000000000000000000000000815250565b5f6118268261177e565b600d8201915061183682846117c6565b9150611841826117f6565b60018201915081905092915050565b5f81519050919050565b5f61186482611850565b61186e81856111b5565b935061187e8185602086016117b8565b80840191505092915050565b5f611895828461185a565b915081905092915050565b6118a981610ef4565b81146118b3575f5ffd5b50565b5f815190506118c4816118a0565b92915050565b5f602082840312156118df576118de610b12565b5b5f6118ec848285016118b6565b91505092915050565b5f611900828561185a565b915061190c828461174d565b6020820191508190509392505050565b5f61192682610bf2565b915061193183610bf2565b925082820190508082111561194957611948610e1f565b5b92915050565b5f60a0820190506119625f830188610efd565b61196f6020830187610d74565b61197c6040830186610d74565b6119896060830185610d74565b6119966080830184610d74565b969550505050505056fea2646970667358221220de9cf586a6d61b1ae7c694b1a3067ed2f9f3dd2d5d13b6b14a4d4f3626fa7d2764736f6c634300081e0033", - "sourceMap": "158:1767:1:-:0;;;;;;;;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x608060405260043610610042575f3560e01c80630f0b37851461004d5780633bc67d4b14610075578063affed0e01461009d578063c417a8c5146100c757610049565b3661004957005b5f5ffd5b348015610058575f5ffd5b50610073600480360381019061006e9190610b5a565b6100f2565b005b348015610080575f5ffd5b5061009b60048036038101906100969190610cc2565b610285565b005b3480156100a8575f5ffd5b506100b1610459565b6040516100be9190610d83565b60405180910390f35b3480156100d2575f5ffd5b506100db61045e565b6040516100e9929190610d9c565b60405180910390f35b5f5f54835f0135846020013560405160200161011093929190610de3565b6040516020818303038152906040528051906020012090505f5f81548092919061013990610e4c565b91905055505f6001825f8560400160208101906101569190610ec9565b60ff161461016557601c610168565b601b5b855f01355f1b86602001355f1b6040515f81526020016040526040516101919493929190610f1b565b6020604051602081039080840390855afa1580156101b1573d5f5f3e3d5ffd5b5050506020604051035190503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461022b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161022290610fb8565b60405180910390fd5b836001818161023a91906110d1565b9050508360405161024b9190611156565b60405180910390207f7ab2d3841cf199f7bdf9a46a067653d528b42029acf32bdbe62dd8191ce226ad60405160405180910390a250505050565b5f5f54878787876040516020016102a09594939291906111f1565b6040516020818303038152906040528051906020012090505f5f8154809291906102c990610e4c565b919050555061031281836102dc90611539565b858036038101906102ed9190611598565b60016040518060400160405290815f820154815260200160018201548152505061046f565b610351576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103489061160d565b60405180910390fd5b5f8773ffffffffffffffffffffffffffffffffffffffff1687878760405161037a92919061162b565b5f6040518083038185875af1925050503d805f81146103b4576040519150601f19603f3d011682016040523d82523d5f602084013e6103b9565b606091505b50509050806103fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103f49061168d565b60405180910390fd5b8773ffffffffffffffffffffffffffffffffffffffff167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f888888604051610447939291906116e7565b60405180910390a25050505050505050565b5f5481565b6001805f0154908060010154905082565b5f6025845f01515110806104af57506104ad845f015160208151811061049857610497611717565b5b602001015160f81c60f81b8560800151610675565b155b156104bc575f905061066d565b5f6040518060400160405280601581526020017f2274797065223a22776562617574686e2e676574220000000000000000000000815250905061050c818660200151876060015161ffff166107f9565b610519575f91505061066d565b5f6105458760405160200161052e9190611764565b6040516020818303038152906040526001806108f3565b90505f81604051602001610559919061181c565b6040516020818303038152906040529050610581818860200151896040015161ffff166107f9565b610590575f935050505061066d565b5f600288602001516040516105a5919061188a565b602060405180830381855afa1580156105c0573d5f5f3e3d5ffd5b5050506040513d601f19601f820116820180604052508101906105e391906118ca565b90505f6002895f0151836040516020016105fe9291906118f5565b60405160208183030381529060405260405161061a919061188a565b602060405180830381855afa158015610635573d5f5f3e3d5ffd5b5050506040513d601f19601f8201168201806040525081019061065891906118ca565b90506106658189896109fd565b955050505050505b949350505050565b5f600160f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916600160f81b84167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146106d3575f90506107f3565b81801561072e5750600460f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916600460f81b84167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b1561073b575f90506107f3565b600860f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916600860f81b84167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146107ee57601060f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916601060f81b84167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036107ed575f90506107f3565b5b600190505b92915050565b5f5f8490505f8490505f825190505f825190505f5f90505b828110156108e257818188610826919061191c565b10610838575f955050505050506108ec565b838188610845919061191c565b8151811061085657610855611717565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191685828151811061089657610895611717565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146108d5575f955050505050506108ec565b8080600101915050610811565b5060019450505050505b9392505050565b6060835180156109f5576003600282010460021b60405192507f4142434445464748494a4b4c4d4e4f505152535455565758595a616263646566601f526106708515027f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5f18603f526020830181810183886020010180515f82525b6001156109c25760038a0199508951603f8160121c16515f53603f81600c1c1651600153603f8160061c1651600253603f8116516003535f5185526004850194508385106109bc57506109c2565b5061096e565b8082526020830160405260038606600204613d3d60f01b81860352808915150290505f8186035280860388525050505050505b509392505050565b5f5f5f61010073ffffffffffffffffffffffffffffffffffffffff1686865f01518760200151875f01518860200151604051602001610a4095949392919061194f565b604051602081830303815290604052604051610a5c919061188a565b5f60405180830381855afa9150503d805f8114610a94576040519150601f19603f3d011682016040523d82523d5f602084013e610a99565b606091505b5091509150818015610aac575060208151145b8015610afb5750600160f81b81601f81518110610acc57610acb611717565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b915081925050509392505050565b5f604051905090565b5f5ffd5b5f5ffd5b5f5ffd5b5f60408284031215610b3357610b32610b1a565b5b81905092915050565b5f60608284031215610b5157610b50610b1a565b5b81905092915050565b5f5f60a08385031215610b7057610b6f610b12565b5b5f610b7d85828601610b1e565b9250506040610b8e85828601610b3c565b9150509250929050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610bc182610b98565b9050919050565b610bd181610bb7565b8114610bdb575f5ffd5b50565b5f81359050610bec81610bc8565b92915050565b5f819050919050565b610c0481610bf2565b8114610c0e575f5ffd5b50565b5f81359050610c1f81610bfb565b92915050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f840112610c4657610c45610c25565b5b8235905067ffffffffffffffff811115610c6357610c62610c29565b5b602083019150836001820283011115610c7f57610c7e610c2d565b5b9250929050565b5f60408284031215610c9b57610c9a610b1a565b5b81905092915050565b5f60a08284031215610cb957610cb8610b1a565b5b81905092915050565b5f5f5f5f5f5f60c08789031215610cdc57610cdb610b12565b5b5f610ce989828a01610bde565b9650506020610cfa89828a01610c11565b955050604087013567ffffffffffffffff811115610d1b57610d1a610b16565b5b610d2789828a01610c31565b94509450506060610d3a89828a01610c86565b92505060a087013567ffffffffffffffff811115610d5b57610d5a610b16565b5b610d6789828a01610ca4565b9150509295509295509295565b610d7d81610bf2565b82525050565b5f602082019050610d965f830184610d74565b92915050565b5f604082019050610daf5f830185610d74565b610dbc6020830184610d74565b9392505050565b5f819050919050565b610ddd610dd882610bf2565b610dc3565b82525050565b5f610dee8286610dcc565b602082019150610dfe8285610dcc565b602082019150610e0e8284610dcc565b602082019150819050949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610e5682610bf2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610e8857610e87610e1f565b5b600182019050919050565b5f60ff82169050919050565b610ea881610e93565b8114610eb2575f5ffd5b50565b5f81359050610ec381610e9f565b92915050565b5f60208284031215610ede57610edd610b12565b5b5f610eeb84828501610eb5565b91505092915050565b5f819050919050565b610f0681610ef4565b82525050565b610f1581610e93565b82525050565b5f608082019050610f2e5f830187610efd565b610f3b6020830186610f0c565b610f486040830185610efd565b610f556060830184610efd565b95945050505050565b5f82825260208201905092915050565b7f556e617574686f72697a656400000000000000000000000000000000000000005f82015250565b5f610fa2600c83610f5e565b9150610fad82610f6e565b602082019050919050565b5f6020820190508181035f830152610fcf81610f96565b9050919050565b5f8135610fe281610bfb565b80915050919050565b5f815f1b9050919050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61102184610feb565b9350801983169250808416831791505092915050565b5f819050919050565b5f61105a61105561105084610bf2565b611037565b610bf2565b9050919050565b5f819050919050565b61107382611040565b61108661107f82611061565b8354610ff6565b8255505050565b5f81015f83018061109d81610fd6565b90506110a9818461106a565b5050506001810160208301806110be81610fd6565b90506110ca818461106a565b5050505050565b6110db828261108d565b5050565b5f6110ed6020840184610c11565b905092915050565b6110fe81610bf2565b82525050565b5f61110f83836110f5565b60208301905092915050565b5f820161112a5f8301836110df565b6111348482611104565b93505061114460208301836110df565b61114e8482611104565b935050505050565b5f611161828461111b565b60408201915081905092915050565b5f8160601b9050919050565b5f61118682611170565b9050919050565b5f6111978261117c565b9050919050565b6111af6111aa82610bb7565b61118d565b82525050565b5f81905092915050565b828183375f83830152505050565b5f6111d883856111b5565b93506111e58385846111bf565b82840190509392505050565b5f6111fc8288610dcc565b60208201915061120c828761119e565b60148201915061121c8286610dcc565b60208201915061122d8284866111cd565b91508190509695505050505050565b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61128682611240565b810181811067ffffffffffffffff821117156112a5576112a4611250565b5b80604052505050565b5f6112b7610b09565b90506112c3828261127d565b919050565b5f5ffd5b5f5ffd5b5f67ffffffffffffffff8211156112ea576112e9611250565b5b6112f382611240565b9050602081019050919050565b5f61131261130d846112d0565b6112ae565b90508281526020810184848401111561132e5761132d6112cc565b5b6113398482856111bf565b509392505050565b5f82601f83011261135557611354610c25565b5b8135611365848260208601611300565b91505092915050565b5f67ffffffffffffffff82111561138857611387611250565b5b61139182611240565b9050602081019050919050565b5f6113b06113ab8461136e565b6112ae565b9050828152602081018484840111156113cc576113cb6112cc565b5b6113d78482856111bf565b509392505050565b5f82601f8301126113f3576113f2610c25565b5b813561140384826020860161139e565b91505092915050565b5f61ffff82169050919050565b6114228161140c565b811461142c575f5ffd5b50565b5f8135905061143d81611419565b92915050565b5f8115159050919050565b61145781611443565b8114611461575f5ffd5b50565b5f813590506114728161144e565b92915050565b5f60a0828403121561148d5761148c61123c565b5b61149760a06112ae565b90505f82013567ffffffffffffffff8111156114b6576114b56112c8565b5b6114c284828501611341565b5f83015250602082013567ffffffffffffffff8111156114e5576114e46112c8565b5b6114f1848285016113df565b60208301525060406115058482850161142f565b60408301525060606115198482850161142f565b606083015250608061152d84828501611464565b60808301525092915050565b5f6115443683611478565b9050919050565b5f604082840312156115605761155f61123c565b5b61156a60406112ae565b90505f61157984828501610c11565b5f83015250602061158c84828501610c11565b60208301525092915050565b5f604082840312156115ad576115ac610b12565b5b5f6115ba8482850161154b565b91505092915050565b7f496e76616c6964207369676e61747572650000000000000000000000000000005f82015250565b5f6115f7601183610f5e565b9150611602826115c3565b602082019050919050565b5f6020820190508181035f830152611624816115eb565b9050919050565b5f6116378284866111cd565b91508190509392505050565b7f43616c6c206661696c65640000000000000000000000000000000000000000005f82015250565b5f611677600b83610f5e565b915061168282611643565b602082019050919050565b5f6020820190508181035f8301526116a48161166b565b9050919050565b5f82825260208201905092915050565b5f6116c683856116ab565b93506116d38385846111bf565b6116dc83611240565b840190509392505050565b5f6040820190506116fa5f830186610d74565b818103602083015261170d8184866116bb565b9050949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b61175e61175982610ef4565b611744565b82525050565b5f61176f828461174d565b60208201915081905092915050565b7f226368616c6c656e6765223a2200000000000000000000000000000000000000815250565b5f81519050919050565b5f81905092915050565b8281835e5f83830152505050565b5f6117d0826117a4565b6117da81856117ae565b93506117ea8185602086016117b8565b80840191505092915050565b7f2200000000000000000000000000000000000000000000000000000000000000815250565b5f6118268261177e565b600d8201915061183682846117c6565b9150611841826117f6565b60018201915081905092915050565b5f81519050919050565b5f61186482611850565b61186e81856111b5565b935061187e8185602086016117b8565b80840191505092915050565b5f611895828461185a565b915081905092915050565b6118a981610ef4565b81146118b3575f5ffd5b50565b5f815190506118c4816118a0565b92915050565b5f602082840312156118df576118de610b12565b5b5f6118ec848285016118b6565b91505092915050565b5f611900828561185a565b915061190c828461174d565b6020820191508190509392505050565b5f61192682610bf2565b915061193183610bf2565b925082820190508082111561194957611948610e1f565b5b92915050565b5f60a0820190506119625f830188610efd565b61196f6020830187610d74565b61197c6040830186610d74565b6119896060830185610d74565b6119966080830184610d74565b969550505050505056fea2646970667358221220de9cf586a6d61b1ae7c694b1a3067ed2f9f3dd2d5d13b6b14a4d4f3626fa7d2764736f6c634300081e0033", - "sourceMap": "158:1767:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;591:563;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1361:527;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;310:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;336:36;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;591:563;709:14;753:5;;760:10;:12;;;774:10;:12;;;736:51;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;726:62;;;;;;709:79;;798:5;;:7;;;;;;;;;:::i;:::-;;;;;;816:14;833:153;856:6;897:1;876:9;:17;;;;;;;;;;:::i;:::-;:22;;;:32;;906:2;876:32;;;901:2;876:32;930:9;:11;;;922:20;;964:9;:11;;;956:20;;833:153;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;816:170;;1019:4;1001:23;;:6;:23;;;997:76;;1040:22;;;;;;;;;;:::i;:::-;;;;;;;;997:76;1099:10;1083:13;:26;;;;;;:::i;:::-;;;;1136:10;1125:22;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;699:455;;591:563;;:::o;1361:527::-;1520:17;1567:5;;1574:2;1578:5;1585:4;;1550:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1540:51;;;;;;1520:71;;1601:5;;:7;;;;;;;;;:::i;:::-;;;;;;1624:66;1644:9;1655:8;1624:66;;;:::i;:::-;1665:9;1624:66;;;;;;;;;;:::i;:::-;1676:13;1624:66;;;;;;;;;;;;;;;;;;;;;;;;;:19;:66::i;:::-;1619:125;;1706:27;;;;;;;;;;:::i;:::-;;;;;;;;1619:125;1755:12;1772:2;:7;;1787:5;1794:4;;1772:27;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1754:45;;;1817:7;1809:31;;;;;;;;;;;;:::i;:::-;;;;;;;;;1865:2;1856:25;;;1869:5;1876:4;;1856:25;;;;;;;;:::i;:::-;;;;;;;;1510:378;;1361:527;;;;;;:::o;310:20::-;;;;:::o;336:36::-;;;;;;;;;;;;;;:::o;5958:1444:4:-;6148:4;6272:2;6236:8;:26;;;:33;:38;:140;;;;6295:81;6310:8;:26;;;6337:2;6310:30;;;;;;;;:::i;:::-;;;;;;;;;;6342:8;:33;;;6295:14;:81::i;:::-;6294:82;6236:140;6219:205;;;6408:5;6401:12;;;;6219:205;6500:26;:52;;;;;;;;;;;;;;;;;;;6567:67;6576:12;6590:8;:23;;;6615:8;:18;;;6567:67;;:8;:67::i;:::-;6562:111;;6657:5;6650:12;;;;;6562:111;6740:29;6772:54;6803:9;6786:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;6815:4;6821;6772:13;:54::i;:::-;6740:86;;6836:31;6901:15;6870:52;;;;;;;;:::i;:::-;;;;;;;;;;;;;6836:86;;6938:77;6947:17;6966:8;:23;;;6991:8;:23;;;6938:77;;:8;:77::i;:::-;6933:121;;7038:5;7031:12;;;;;;;6933:121;7160:26;7189:38;7202:8;:23;;;7189:38;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7160:67;;7237:19;7259:72;7283:8;:26;;;7311:18;7266:64;;;;;;;;;:::i;:::-;;;;;;;;;;;;;7259:72;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7237:94;;7349:46;7361:11;7374:9;7385;7349:11;:46::i;:::-;7342:53;;;;;;;5958:1444;;;;;;;:::o;1686:915::-;1777:4;1300;1898:18;;1868:48;;;1300:4;1876:18;;1868:5;:26;:48;;;;1864:91;;1939:5;1932:12;;;;1864:91;2158:23;:77;;;;;1356:4;2217:18;;2185:50;;;1356:4;2194:18;;2186:5;:26;2185:50;;;;;2158:77;2154:120;;;2258:5;2251:12;;;;2154:120;1412:4;2430:18;;2400:48;;;1412:4;2408:18;;2400:5;:26;:48;;;;2396:177;;1468:4;2498:18;;2468:48;;;1468:4;2476:18;;2468:5;:26;:48;;;;2464:99;;2543:5;2536:12;;;;2464:99;2396:177;2590:4;2583:11;;1686:915;;;;;:::o;685:572::-;785:4;801:24;834:6;801:40;;851:21;881:3;851:34;;896:17;916:11;:18;896:38;;944:14;961:8;:15;944:32;;992:9;1004:1;992:13;;987:242;1011:9;1007:1;:13;987:242;;;1061:6;1056:1;1045:8;:12;;;;:::i;:::-;:22;1041:73;;1094:5;1087:12;;;;;;;;;1041:73;1150:8;1170:1;1159:8;:12;;;;:::i;:::-;1150:22;;;;;;;;:::i;:::-;;;;;;;;;;1132:40;;;:11;1144:1;1132:14;;;;;;;;:::i;:::-;;;;;;;;;;:40;;;;1128:91;;1199:5;1192:12;;;;;;;;;1128:91;1022:3;;;;;;;987:242;;;;1246:4;1239:11;;;;;;685:572;;;;;;:::o;722:2892:0:-;835:20;961:4;955:11;983:10;980:2618;;;1183:1;1179;1167:10;1163:18;1159:26;1156:1;1152:34;1294:4;1288:11;1278:21;;1664:34;1658:4;1651:48;1791:6;1780:8;1773:16;1769:29;1733:34;1729:70;1723:4;1716:84;1906:4;1898:6;1894:17;1948:13;1943:3;1939:23;2016:10;2009:4;2003;1999:15;1995:32;2070:7;2064:14;2153:4;2144:7;2137:21;2285:623;2292:1;2285:623;;;2337:1;2331:4;2327:12;2319:20;;2399:4;2393:11;2539:4;2531:5;2527:2;2523:14;2519:25;2513:32;2510:1;2502:44;2604:4;2596:5;2592:2;2588:14;2584:25;2578:32;2575:1;2567:44;2668:4;2660:5;2657:1;2653:13;2649:24;2643:31;2640:1;2632:43;2724:4;2717:5;2713:16;2707:23;2704:1;2696:35;2770:4;2764:11;2759:3;2752:24;2814:1;2809:3;2805:11;2798:18;;2875:3;2870;2867:12;2857:33;;2883:5;;;2857:33;2297:611;2285:623;;;2941:12;2932:7;2925:29;3035:4;3030:3;3026:14;3020:4;3013:28;3180:1;3168:10;3164:18;3161:1;3157:26;3313:6;3308:3;3304:16;3300:1;3295:3;3291:11;3284:37;3430:1;3417:9;3410:17;3403:25;3399:33;3394:38;;3469:1;3465;3460:3;3456:11;3449:22;3560:1;3545:13;3541:21;3533:6;3526:37;994:2604;;;;;;980:2618;923:2685;722:2892;;;;;:::o;670:556:3:-;817:4;976:12;990:19;1033:5;1025:25;;1062:6;1070:9;:11;;;1083:9;:11;;;1096:9;:11;;;1109:9;:11;;;1051:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1025:97;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;975:147;;;;1142:7;:30;;;;;1170:2;1153:6;:13;:19;1142:30;:52;;;;;1190:4;1176:18;;:6;1183:2;1176:10;;;;;;;;:::i;:::-;;;;;;;;;;:18;;;;1142:52;1132:62;;1212:7;1205:14;;;;670:556;;;;;:::o;7:75:5:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:117;443:1;440;433:12;487:232;561:5;602:2;593:6;588:3;584:16;580:25;577:112;;;608:79;;:::i;:::-;577:112;707:6;698:15;;487:232;;;;:::o;764:241::-;847:5;888:2;879:6;874:3;870:16;866:25;863:112;;;894:79;;:::i;:::-;863:112;993:6;984:15;;764:241;;;;:::o;1011:605::-;1144:6;1152;1201:3;1189:9;1180:7;1176:23;1172:33;1169:120;;;1208:79;;:::i;:::-;1169:120;1328:1;1353:81;1426:7;1417:6;1406:9;1402:22;1353:81;:::i;:::-;1343:91;;1299:145;1483:2;1509:90;1591:7;1582:6;1571:9;1567:22;1509:90;:::i;:::-;1499:100;;1454:155;1011:605;;;;;:::o;1622:126::-;1659:7;1699:42;1692:5;1688:54;1677:65;;1622:126;;;:::o;1754:96::-;1791:7;1820:24;1838:5;1820:24;:::i;:::-;1809:35;;1754:96;;;:::o;1856:122::-;1929:24;1947:5;1929:24;:::i;:::-;1922:5;1919:35;1909:63;;1968:1;1965;1958:12;1909:63;1856:122;:::o;1984:139::-;2030:5;2068:6;2055:20;2046:29;;2084:33;2111:5;2084:33;:::i;:::-;1984:139;;;;:::o;2129:77::-;2166:7;2195:5;2184:16;;2129:77;;;:::o;2212:122::-;2285:24;2303:5;2285:24;:::i;:::-;2278:5;2275:35;2265:63;;2324:1;2321;2314:12;2265:63;2212:122;:::o;2340:139::-;2386:5;2424:6;2411:20;2402:29;;2440:33;2467:5;2440:33;:::i;:::-;2340:139;;;;:::o;2485:117::-;2594:1;2591;2584:12;2608:117;2717:1;2714;2707:12;2731:117;2840:1;2837;2830:12;2867:552;2924:8;2934:6;2984:3;2977:4;2969:6;2965:17;2961:27;2951:122;;2992:79;;:::i;:::-;2951:122;3105:6;3092:20;3082:30;;3135:18;3127:6;3124:30;3121:117;;;3157:79;;:::i;:::-;3121:117;3271:4;3263:6;3259:17;3247:29;;3325:3;3317:4;3309:6;3305:17;3295:8;3291:32;3288:41;3285:128;;;3332:79;;:::i;:::-;3285:128;2867:552;;;;;:::o;3455:232::-;3529:5;3570:2;3561:6;3556:3;3552:16;3548:25;3545:112;;;3576:79;;:::i;:::-;3545:112;3675:6;3666:15;;3455:232;;;;:::o;3729:::-;3802:5;3843:3;3834:6;3829:3;3825:16;3821:26;3818:113;;;3850:79;;:::i;:::-;3818:113;3949:6;3940:15;;3729:232;;;;:::o;3967:1379::-;4128:6;4136;4144;4152;4160;4168;4217:3;4205:9;4196:7;4192:23;4188:33;4185:120;;;4224:79;;:::i;:::-;4185:120;4344:1;4369:53;4414:7;4405:6;4394:9;4390:22;4369:53;:::i;:::-;4359:63;;4315:117;4471:2;4497:53;4542:7;4533:6;4522:9;4518:22;4497:53;:::i;:::-;4487:63;;4442:118;4627:2;4616:9;4612:18;4599:32;4658:18;4650:6;4647:30;4644:117;;;4680:79;;:::i;:::-;4644:117;4793:64;4849:7;4840:6;4829:9;4825:22;4793:64;:::i;:::-;4775:82;;;;4570:297;4906:2;4932:81;5005:7;4996:6;4985:9;4981:22;4932:81;:::i;:::-;4922:91;;4877:146;5090:3;5079:9;5075:19;5062:33;5122:18;5114:6;5111:30;5108:117;;;5144:79;;:::i;:::-;5108:117;5249:80;5321:7;5312:6;5301:9;5297:22;5249:80;:::i;:::-;5239:90;;5033:306;3967:1379;;;;;;;;:::o;5352:118::-;5439:24;5457:5;5439:24;:::i;:::-;5434:3;5427:37;5352:118;;:::o;5476:222::-;5569:4;5607:2;5596:9;5592:18;5584:26;;5620:71;5688:1;5677:9;5673:17;5664:6;5620:71;:::i;:::-;5476:222;;;;:::o;5704:332::-;5825:4;5863:2;5852:9;5848:18;5840:26;;5876:71;5944:1;5933:9;5929:17;5920:6;5876:71;:::i;:::-;5957:72;6025:2;6014:9;6010:18;6001:6;5957:72;:::i;:::-;5704:332;;;;;:::o;6042:79::-;6081:7;6110:5;6099:16;;6042:79;;;:::o;6127:157::-;6232:45;6252:24;6270:5;6252:24;:::i;:::-;6232:45;:::i;:::-;6227:3;6220:58;6127:157;;:::o;6290:538::-;6458:3;6473:75;6544:3;6535:6;6473:75;:::i;:::-;6573:2;6568:3;6564:12;6557:19;;6586:75;6657:3;6648:6;6586:75;:::i;:::-;6686:2;6681:3;6677:12;6670:19;;6699:75;6770:3;6761:6;6699:75;:::i;:::-;6799:2;6794:3;6790:12;6783:19;;6819:3;6812:10;;6290:538;;;;;;:::o;6834:180::-;6882:77;6879:1;6872:88;6979:4;6976:1;6969:15;7003:4;7000:1;6993:15;7020:233;7059:3;7082:24;7100:5;7082:24;:::i;:::-;7073:33;;7128:66;7121:5;7118:77;7115:103;;7198:18;;:::i;:::-;7115:103;7245:1;7238:5;7234:13;7227:20;;7020:233;;;:::o;7259:86::-;7294:7;7334:4;7327:5;7323:16;7312:27;;7259:86;;;:::o;7351:118::-;7422:22;7438:5;7422:22;:::i;:::-;7415:5;7412:33;7402:61;;7459:1;7456;7449:12;7402:61;7351:118;:::o;7475:135::-;7519:5;7557:6;7544:20;7535:29;;7573:31;7598:5;7573:31;:::i;:::-;7475:135;;;;:::o;7616:325::-;7673:6;7722:2;7710:9;7701:7;7697:23;7693:32;7690:119;;;7728:79;;:::i;:::-;7690:119;7848:1;7873:51;7916:7;7907:6;7896:9;7892:22;7873:51;:::i;:::-;7863:61;;7819:115;7616:325;;;;:::o;7947:77::-;7984:7;8013:5;8002:16;;7947:77;;;:::o;8030:118::-;8117:24;8135:5;8117:24;:::i;:::-;8112:3;8105:37;8030:118;;:::o;8154:112::-;8237:22;8253:5;8237:22;:::i;:::-;8232:3;8225:35;8154:112;;:::o;8272:545::-;8445:4;8483:3;8472:9;8468:19;8460:27;;8497:71;8565:1;8554:9;8550:17;8541:6;8497:71;:::i;:::-;8578:68;8642:2;8631:9;8627:18;8618:6;8578:68;:::i;:::-;8656:72;8724:2;8713:9;8709:18;8700:6;8656:72;:::i;:::-;8738;8806:2;8795:9;8791:18;8782:6;8738:72;:::i;:::-;8272:545;;;;;;;:::o;8823:169::-;8907:11;8941:6;8936:3;8929:19;8981:4;8976:3;8972:14;8957:29;;8823:169;;;;:::o;8998:162::-;9138:14;9134:1;9126:6;9122:14;9115:38;8998:162;:::o;9166:366::-;9308:3;9329:67;9393:2;9388:3;9329:67;:::i;:::-;9322:74;;9405:93;9494:3;9405:93;:::i;:::-;9523:2;9518:3;9514:12;9507:19;;9166:366;;;:::o;9538:419::-;9704:4;9742:2;9731:9;9727:18;9719:26;;9791:9;9785:4;9781:20;9777:1;9766:9;9762:17;9755:47;9819:131;9945:4;9819:131;:::i;:::-;9811:139;;9538:419;;;:::o;10149:186::-;10194:11;10243:3;10230:17;10256:33;10283:5;10256:33;:::i;:::-;10323:5;10299:29;;10206:129;10149:186;;;:::o;10341:92::-;10373:8;10420:5;10417:1;10413:13;10392:34;;10341:92;;;:::o;10439:290::-;10497:6;10526:66;10613:22;10626:8;10613:22;:::i;:::-;10601:34;;10668:4;10664:9;10657:5;10653:21;10644:30;;10717:4;10707:8;10703:19;10696:5;10693:30;10683:40;;10504:225;10439:290;;;;:::o;10735:60::-;10763:3;10784:5;10777:12;;10735:60;;;:::o;10801:142::-;10851:9;10884:53;10902:34;10911:24;10929:5;10911:24;:::i;:::-;10902:34;:::i;:::-;10884:53;:::i;:::-;10871:66;;10801:142;;;:::o;10949:75::-;10992:3;11013:5;11006:12;;10949:75;;;:::o;11030:263::-;11141:39;11172:7;11141:39;:::i;:::-;11202:84;11244:41;11268:16;11244:41;:::i;:::-;11237:4;11231:11;11202:84;:::i;:::-;11196:4;11189:98;11107:186;11030:263;;:::o;11299:809::-;11477:1;11471:4;11467:12;11523:1;11516:5;11512:13;11573:12;11616:42;11644:13;11616:42;:::i;:::-;11599:59;;11672:79;11737:13;11725:10;11672:79;:::i;:::-;11434:328;;;11815:1;11809:4;11805:12;11861:2;11854:5;11850:14;11912:12;11955:42;11983:13;11955:42;:::i;:::-;11938:59;;12011:79;12076:13;12064:10;12011:79;:::i;:::-;11772:329;;;11299:809;;:::o;12114:261::-;12253:116;12361:7;12355:4;12253:116;:::i;:::-;12114:261;;:::o;12381:122::-;12433:5;12458:39;12493:2;12488:3;12484:12;12479:3;12458:39;:::i;:::-;12449:48;;12381:122;;;;:::o;12509:116::-;12594:24;12612:5;12594:24;:::i;:::-;12589:3;12582:37;12509:116;;:::o;12631:195::-;12708:10;12729:54;12779:3;12771:6;12729:54;:::i;:::-;12815:4;12810:3;12806:14;12792:28;;12631:195;;;;:::o;12888:605::-;13057:4;13052:3;13048:14;13124:50;13168:4;13161:5;13157:16;13150:5;13124:50;:::i;:::-;13194:70;13260:3;13246:12;13194:70;:::i;:::-;13187:77;;13072:202;13336:50;13380:4;13373:5;13369:16;13362:5;13336:50;:::i;:::-;13406:70;13472:3;13458:12;13406:70;:::i;:::-;13399:77;;13284:202;13026:467;12888:605;;:::o;13499:364::-;13665:3;13680:129;13805:3;13796:6;13680:129;:::i;:::-;13834:2;13829:3;13825:12;13818:19;;13854:3;13847:10;;13499:364;;;;:::o;13869:94::-;13902:8;13950:5;13946:2;13942:14;13921:35;;13869:94;;;:::o;13969:::-;14008:7;14037:20;14051:5;14037:20;:::i;:::-;14026:31;;13969:94;;;:::o;14069:100::-;14108:7;14137:26;14157:5;14137:26;:::i;:::-;14126:37;;14069:100;;;:::o;14175:157::-;14280:45;14300:24;14318:5;14300:24;:::i;:::-;14280:45;:::i;:::-;14275:3;14268:58;14175:157;;:::o;14338:147::-;14439:11;14476:3;14461:18;;14338:147;;;;:::o;14491:148::-;14589:6;14584:3;14579;14566:30;14630:1;14621:6;14616:3;14612:16;14605:27;14491:148;;;:::o;14667:327::-;14781:3;14802:88;14883:6;14878:3;14802:88;:::i;:::-;14795:95;;14900:56;14949:6;14944:3;14937:5;14900:56;:::i;:::-;14981:6;14976:3;14972:16;14965:23;;14667:327;;;;;:::o;15000:714::-;15224:3;15239:75;15310:3;15301:6;15239:75;:::i;:::-;15339:2;15334:3;15330:12;15323:19;;15352:75;15423:3;15414:6;15352:75;:::i;:::-;15452:2;15447:3;15443:12;15436:19;;15465:75;15536:3;15527:6;15465:75;:::i;:::-;15565:2;15560:3;15556:12;15549:19;;15585:103;15684:3;15675:6;15667;15585:103;:::i;:::-;15578:110;;15705:3;15698:10;;15000:714;;;;;;;;:::o;15720:117::-;15829:1;15826;15819:12;15843:102;15884:6;15935:2;15931:7;15926:2;15919:5;15915:14;15911:28;15901:38;;15843:102;;;:::o;15951:180::-;15999:77;15996:1;15989:88;16096:4;16093:1;16086:15;16120:4;16117:1;16110:15;16137:281;16220:27;16242:4;16220:27;:::i;:::-;16212:6;16208:40;16350:6;16338:10;16335:22;16314:18;16302:10;16299:34;16296:62;16293:88;;;16361:18;;:::i;:::-;16293:88;16401:10;16397:2;16390:22;16180:238;16137:281;;:::o;16424:129::-;16458:6;16485:20;;:::i;:::-;16475:30;;16514:33;16542:4;16534:6;16514:33;:::i;:::-;16424:129;;;:::o;16559:117::-;16668:1;16665;16658:12;16682:117;16791:1;16788;16781:12;16805:307;16866:4;16956:18;16948:6;16945:30;16942:56;;;16978:18;;:::i;:::-;16942:56;17016:29;17038:6;17016:29;:::i;:::-;17008:37;;17100:4;17094;17090:15;17082:23;;16805:307;;;:::o;17118:423::-;17195:5;17220:65;17236:48;17277:6;17236:48;:::i;:::-;17220:65;:::i;:::-;17211:74;;17308:6;17301:5;17294:21;17346:4;17339:5;17335:16;17384:3;17375:6;17370:3;17366:16;17363:25;17360:112;;;17391:79;;:::i;:::-;17360:112;17481:54;17528:6;17523:3;17518;17481:54;:::i;:::-;17201:340;17118:423;;;;;:::o;17560:338::-;17615:5;17664:3;17657:4;17649:6;17645:17;17641:27;17631:122;;17672:79;;:::i;:::-;17631:122;17789:6;17776:20;17814:78;17888:3;17880:6;17873:4;17865:6;17861:17;17814:78;:::i;:::-;17805:87;;17621:277;17560:338;;;;:::o;17904:308::-;17966:4;18056:18;18048:6;18045:30;18042:56;;;18078:18;;:::i;:::-;18042:56;18116:29;18138:6;18116:29;:::i;:::-;18108:37;;18200:4;18194;18190:15;18182:23;;17904:308;;;:::o;18218:425::-;18296:5;18321:66;18337:49;18379:6;18337:49;:::i;:::-;18321:66;:::i;:::-;18312:75;;18410:6;18403:5;18396:21;18448:4;18441:5;18437:16;18486:3;18477:6;18472:3;18468:16;18465:25;18462:112;;;18493:79;;:::i;:::-;18462:112;18583:54;18630:6;18625:3;18620;18583:54;:::i;:::-;18302:341;18218:425;;;;;:::o;18663:340::-;18719:5;18768:3;18761:4;18753:6;18749:17;18745:27;18735:122;;18776:79;;:::i;:::-;18735:122;18893:6;18880:20;18918:79;18993:3;18985:6;18978:4;18970:6;18966:17;18918:79;:::i;:::-;18909:88;;18725:278;18663:340;;;;:::o;19009:89::-;19045:7;19085:6;19078:5;19074:18;19063:29;;19009:89;;;:::o;19104:120::-;19176:23;19193:5;19176:23;:::i;:::-;19169:5;19166:34;19156:62;;19214:1;19211;19204:12;19156:62;19104:120;:::o;19230:137::-;19275:5;19313:6;19300:20;19291:29;;19329:32;19355:5;19329:32;:::i;:::-;19230:137;;;;:::o;19373:90::-;19407:7;19450:5;19443:13;19436:21;19425:32;;19373:90;;;:::o;19469:116::-;19539:21;19554:5;19539:21;:::i;:::-;19532:5;19529:32;19519:60;;19575:1;19572;19565:12;19519:60;19469:116;:::o;19591:133::-;19634:5;19672:6;19659:20;19650:29;;19688:30;19712:5;19688:30;:::i;:::-;19591:133;;;;:::o;19766:1450::-;19840:5;19884:4;19872:9;19867:3;19863:19;19859:30;19856:117;;;19892:79;;:::i;:::-;19856:117;19991:21;20007:4;19991:21;:::i;:::-;19982:30;;20112:1;20101:9;20097:17;20084:31;20142:18;20134:6;20131:30;20128:117;;;20164:79;;:::i;:::-;20128:117;20284:58;20338:3;20329:6;20318:9;20314:22;20284:58;:::i;:::-;20277:4;20270:5;20266:16;20259:84;20022:332;20451:2;20440:9;20436:18;20423:32;20482:18;20474:6;20471:30;20468:117;;;20504:79;;:::i;:::-;20468:117;20624:59;20679:3;20670:6;20659:9;20655:22;20624:59;:::i;:::-;20617:4;20610:5;20606:16;20599:85;20364:331;20764:2;20805:48;20849:3;20840:6;20829:9;20825:22;20805:48;:::i;:::-;20798:4;20791:5;20787:16;20780:74;20705:160;20929:2;20970:48;21014:3;21005:6;20994:9;20990:22;20970:48;:::i;:::-;20963:4;20956:5;20952:16;20945:74;20875:155;21109:3;21151:46;21193:3;21184:6;21173:9;21169:22;21151:46;:::i;:::-;21144:4;21137:5;21133:16;21126:72;21040:169;19766:1450;;;;:::o;21222:211::-;21324:9;21358:68;21411:14;21404:5;21358:68;:::i;:::-;21345:81;;21222:211;;;:::o;21469:569::-;21544:5;21588:4;21576:9;21571:3;21567:19;21563:30;21560:117;;;21596:79;;:::i;:::-;21560:117;21695:21;21711:4;21695:21;:::i;:::-;21686:30;;21772:1;21812:49;21857:3;21848:6;21837:9;21833:22;21812:49;:::i;:::-;21805:4;21798:5;21794:16;21787:75;21726:147;21929:2;21970:49;22015:3;22006:6;21995:9;21991:22;21970:49;:::i;:::-;21963:4;21956:5;21952:16;21945:75;21883:148;21469:569;;;;:::o;22044:381::-;22129:6;22178:2;22166:9;22157:7;22153:23;22149:32;22146:119;;;22184:79;;:::i;:::-;22146:119;22304:1;22329:79;22400:7;22391:6;22380:9;22376:22;22329:79;:::i;:::-;22319:89;;22275:143;22044:381;;;;:::o;22431:167::-;22571:19;22567:1;22559:6;22555:14;22548:43;22431:167;:::o;22604:366::-;22746:3;22767:67;22831:2;22826:3;22767:67;:::i;:::-;22760:74;;22843:93;22932:3;22843:93;:::i;:::-;22961:2;22956:3;22952:12;22945:19;;22604:366;;;:::o;22976:419::-;23142:4;23180:2;23169:9;23165:18;23157:26;;23229:9;23223:4;23219:20;23215:1;23204:9;23200:17;23193:47;23257:131;23383:4;23257:131;:::i;:::-;23249:139;;22976:419;;;:::o;23401:291::-;23541:3;23563:103;23662:3;23653:6;23645;23563:103;:::i;:::-;23556:110;;23683:3;23676:10;;23401:291;;;;;:::o;23698:161::-;23838:13;23834:1;23826:6;23822:14;23815:37;23698:161;:::o;23865:366::-;24007:3;24028:67;24092:2;24087:3;24028:67;:::i;:::-;24021:74;;24104:93;24193:3;24104:93;:::i;:::-;24222:2;24217:3;24213:12;24206:19;;23865:366;;;:::o;24237:419::-;24403:4;24441:2;24430:9;24426:18;24418:26;;24490:9;24484:4;24480:20;24476:1;24465:9;24461:17;24454:47;24518:131;24644:4;24518:131;:::i;:::-;24510:139;;24237:419;;;:::o;24662:168::-;24745:11;24779:6;24774:3;24767:19;24819:4;24814:3;24810:14;24795:29;;24662:168;;;;:::o;24858:314::-;24954:3;24975:70;25038:6;25033:3;24975:70;:::i;:::-;24968:77;;25055:56;25104:6;25099:3;25092:5;25055:56;:::i;:::-;25136:29;25158:6;25136:29;:::i;:::-;25131:3;25127:39;25120:46;;24858:314;;;;;:::o;25178:439::-;25327:4;25365:2;25354:9;25350:18;25342:26;;25378:71;25446:1;25435:9;25431:17;25422:6;25378:71;:::i;:::-;25496:9;25490:4;25486:20;25481:2;25470:9;25466:18;25459:48;25524:86;25605:4;25596:6;25588;25524:86;:::i;:::-;25516:94;;25178:439;;;;;;:::o;25623:180::-;25671:77;25668:1;25661:88;25768:4;25765:1;25758:15;25792:4;25789:1;25782:15;25809:79;25848:7;25877:5;25866:16;;25809:79;;;:::o;25894:157::-;25999:45;26019:24;26037:5;26019:24;:::i;:::-;25999:45;:::i;:::-;25994:3;25987:58;25894:157;;:::o;26057:256::-;26169:3;26184:75;26255:3;26246:6;26184:75;:::i;:::-;26284:2;26279:3;26275:12;26268:19;;26304:3;26297:10;;26057:256;;;;:::o;26319:242::-;26488:66;26483:3;26476:79;26319:242;:::o;26567:99::-;26619:6;26653:5;26647:12;26637:22;;26567:99;;;:::o;26672:148::-;26774:11;26811:3;26796:18;;26672:148;;;;:::o;26826:139::-;26915:6;26910:3;26905;26899:23;26956:1;26947:6;26942:3;26938:16;26931:27;26826:139;;;:::o;26971:390::-;27077:3;27105:39;27138:5;27105:39;:::i;:::-;27160:89;27242:6;27237:3;27160:89;:::i;:::-;27153:96;;27258:65;27316:6;27311:3;27304:4;27297:5;27293:16;27258:65;:::i;:::-;27348:6;27343:3;27339:16;27332:23;;27081:280;26971:390;;;;:::o;27367:241::-;27535:66;27530:3;27523:79;27367:241;:::o;27614:806::-;27927:3;27942:138;28076:3;27942:138;:::i;:::-;28105:2;28100:3;28096:12;28089:19;;28125:95;28216:3;28207:6;28125:95;:::i;:::-;28118:102;;28230:137;28363:3;28230:137;:::i;:::-;28392:1;28387:3;28383:11;28376:18;;28411:3;28404:10;;27614:806;;;;:::o;28426:98::-;28477:6;28511:5;28505:12;28495:22;;28426:98;;;:::o;28530:386::-;28634:3;28662:38;28694:5;28662:38;:::i;:::-;28716:88;28797:6;28792:3;28716:88;:::i;:::-;28709:95;;28813:65;28871:6;28866:3;28859:4;28852:5;28848:16;28813:65;:::i;:::-;28903:6;28898:3;28894:16;28887:23;;28638:278;28530:386;;;;:::o;28922:271::-;29052:3;29074:93;29163:3;29154:6;29074:93;:::i;:::-;29067:100;;29184:3;29177:10;;28922:271;;;;:::o;29199:122::-;29272:24;29290:5;29272:24;:::i;:::-;29265:5;29262:35;29252:63;;29311:1;29308;29301:12;29252:63;29199:122;:::o;29327:143::-;29384:5;29415:6;29409:13;29400:22;;29431:33;29458:5;29431:33;:::i;:::-;29327:143;;;;:::o;29476:351::-;29546:6;29595:2;29583:9;29574:7;29570:23;29566:32;29563:119;;;29601:79;;:::i;:::-;29563:119;29721:1;29746:64;29802:7;29793:6;29782:9;29778:22;29746:64;:::i;:::-;29736:74;;29692:128;29476:351;;;;:::o;29833:412::-;29991:3;30013:93;30102:3;30093:6;30013:93;:::i;:::-;30006:100;;30116:75;30187:3;30178:6;30116:75;:::i;:::-;30216:2;30211:3;30207:12;30200:19;;30236:3;30229:10;;29833:412;;;;;:::o;30251:191::-;30291:3;30310:20;30328:1;30310:20;:::i;:::-;30305:25;;30344:20;30362:1;30344:20;:::i;:::-;30339:25;;30387:1;30384;30380:9;30373:16;;30408:3;30405:1;30402:10;30399:36;;;30415:18;;:::i;:::-;30399:36;30251:191;;;;:::o;30448:664::-;30653:4;30691:3;30680:9;30676:19;30668:27;;30705:71;30773:1;30762:9;30758:17;30749:6;30705:71;:::i;:::-;30786:72;30854:2;30843:9;30839:18;30830:6;30786:72;:::i;:::-;30868;30936:2;30925:9;30921:18;30912:6;30868:72;:::i;:::-;30950;31018:2;31007:9;31003:18;30994:6;30950:72;:::i;:::-;31032:73;31100:3;31089:9;31085:19;31076:6;31032:73;:::i;:::-;30448:664;;;;;;;;:::o", - "linkReferences": {} - }, - "methodIdentifiers": { - "authorize((uint256,uint256),(uint256,uint256,uint8))": "0f0b3785", - "authorizedKey()": "c417a8c5", - "execute(address,uint256,bytes,(uint256,uint256),(bytes,string,uint16,uint16,bool))": "3bc67d4b", - "nonce()": "affed0e0" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.30+commit.73712a01\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"indexed\":true,\"internalType\":\"struct ECDSA.PublicKey\",\"name\":\"authorized\",\"type\":\"tuple\"}],\"name\":\"Authorized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"Executed\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"internalType\":\"struct ECDSA.PublicKey\",\"name\":\"authorized\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"r\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"s\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"yParity\",\"type\":\"uint8\"}],\"internalType\":\"struct ECDSA.RecoveredSignature\",\"name\":\"signature\",\"type\":\"tuple\"}],\"name\":\"authorize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"authorizedKey\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"r\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"s\",\"type\":\"uint256\"}],\"internalType\":\"struct ECDSA.Signature\",\"name\":\"signature\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"authenticatorData\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"clientDataJSON\",\"type\":\"string\"},{\"internalType\":\"uint16\",\"name\":\"challengeIndex\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"typeIndex\",\"type\":\"uint16\"},{\"internalType\":\"bool\",\"name\":\"userVerificationRequired\",\"type\":\"bool\"}],\"internalType\":\"struct WebAuthnP256.Metadata\",\"name\":\"metadata\",\"type\":\"tuple\"}],\"name\":\"execute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"authorize((uint256,uint256),(uint256,uint256,uint8))\":{\"params\":{\"authorized\":\"The public key to authorize\",\"signature\":\"The Ethereum signature to verify the authorization\"}},\"execute(address,uint256,bytes,(uint256,uint256),(bytes,string,uint16,uint16,bool))\":{\"params\":{\"data\":\"The calldata to send\",\"to\":\"The address of the contract to call\",\"value\":\"The amount of ether to send\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"authorize((uint256,uint256),(uint256,uint256,uint8))\":{\"notice\":\"Authorize a public key to execute transactions on behalf of the delegatee\"},\"execute(address,uint256,bytes,(uint256,uint256),(bytes,string,uint16,uint16,bool))\":{\"notice\":\"Execute a transaction on behalf of the delegatee\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/Delegation.sol\":\"Delegation\"},\"evmVersion\":\"prague\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":solady/=lib/solady/src/\"]},\"sources\":{\"lib/solady/src/utils/Base64.sol\":{\"keccak256\":\"0x07dcf983a86bc961e4cc0b57a2cfc3e46b20a50fed9b2092c7497e5fe3715a93\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://65c6c0a8a29cfc5b757abe84635c83e62a177a48c2ad0be24de6b0fba1a60ea2\",\"dweb:/ipfs/QmYuYwxHiBoUt6vaLTLbs2bZamRzqrTfA4BsNZ1TApTfrm\"]},\"src/Delegation.sol\":{\"keccak256\":\"0x5aff8f24c16e10848c348b0f400d4d91cc6ce029e37a8a5b526465c768c1c5ea\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://3f2757dd944613d0f7065e1dd6796ca7a198a1c393d095254bec9f785e3b5a39\",\"dweb:/ipfs/QmXio4bSY6iKMuhfuGZG4kcpVWcPG5KjJnWPKJqzaXVdjk\"]},\"src/lib/ECDSA.sol\":{\"keccak256\":\"0x14a31e9a4efb985d00c8f4d1f0d4d9a99eef64e88addcf563b0e93a0ddc525fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9fc74e53f36bf2a0f484115dc28006c93716b09ad9b9a33c2034b6a58e0f6feb\",\"dweb:/ipfs/QmTNp1QKavYLKFRpUCKCvLrqPNLf2hmgTFXoVonCfnKEuN\"]},\"src/lib/P256.sol\":{\"keccak256\":\"0x794ff507aa419df92b39a1f9b6e7e1a5784c8aaf195b4f8e0da1b33894c72129\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d37ca68a4f47803301f98b30d6ab38c3319ddc4fe7b0408480658db0ef9bb8e8\",\"dweb:/ipfs/QmPENnN4ePVhZuuS1kY43zWuXPvWGLhMYMZgDVKY7eesKa\"]},\"src/lib/WebAuthnP256.sol\":{\"keccak256\":\"0x26b2e618fffe1bd28e6e92815364d3286d673d0d722cfc0181575e2f97686def\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51d3ddc5fb4fe4150207b989ac8434d61752072cc698d32dc05cb6247db4be2f\",\"dweb:/ipfs/QmWPA77zXsZJUTVfkcenfzcmojgadMsnEEYMFB8DbXyJdn\"]}},\"version\":1}", - "metadata": { - "compiler": { - "version": "0.8.30+commit.73712a01" - }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { - "internalType": "struct ECDSA.PublicKey", - "name": "authorized", - "type": "tuple", - "components": [ - { - "internalType": "uint256", - "name": "x", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "y", - "type": "uint256" - } - ], - "indexed": true - } - ], - "type": "event", - "name": "Authorized", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256", - "indexed": false - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes", - "indexed": false - } - ], - "type": "event", - "name": "Executed", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "struct ECDSA.PublicKey", - "name": "authorized", - "type": "tuple", - "components": [ - { - "internalType": "uint256", - "name": "x", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "y", - "type": "uint256" - } - ] - }, - { - "internalType": "struct ECDSA.RecoveredSignature", - "name": "signature", - "type": "tuple", - "components": [ - { - "internalType": "uint256", - "name": "r", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "s", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "yParity", - "type": "uint8" - } - ] - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "authorize" - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "authorizedKey", - "outputs": [ - { - "internalType": "uint256", - "name": "x", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "y", - "type": "uint256" - } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "struct ECDSA.Signature", - "name": "signature", - "type": "tuple", - "components": [ - { - "internalType": "uint256", - "name": "r", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "s", - "type": "uint256" - } - ] - }, - { - "internalType": "struct WebAuthnP256.Metadata", - "name": "metadata", - "type": "tuple", - "components": [ - { - "internalType": "bytes", - "name": "authenticatorData", - "type": "bytes" - }, - { - "internalType": "string", - "name": "clientDataJSON", - "type": "string" - }, - { - "internalType": "uint16", - "name": "challengeIndex", - "type": "uint16" - }, - { - "internalType": "uint16", - "name": "typeIndex", - "type": "uint16" - }, - { - "internalType": "bool", - "name": "userVerificationRequired", - "type": "bool" - } - ] - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "execute" - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "nonce", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ] - }, - { - "inputs": [], - "stateMutability": "payable", - "type": "receive" - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "authorize((uint256,uint256),(uint256,uint256,uint8))": { - "params": { - "authorized": "The public key to authorize", - "signature": "The Ethereum signature to verify the authorization" - } - }, - "execute(address,uint256,bytes,(uint256,uint256),(bytes,string,uint16,uint16,bool))": { - "params": { - "data": "The calldata to send", - "to": "The address of the contract to call", - "value": "The amount of ether to send" - } - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": { - "authorize((uint256,uint256),(uint256,uint256,uint8))": { - "notice": "Authorize a public key to execute transactions on behalf of the delegatee" - }, - "execute(address,uint256,bytes,(uint256,uint256),(bytes,string,uint16,uint16,bool))": { - "notice": "Execute a transaction on behalf of the delegatee" - } - }, - "version": 1 - } - }, - "settings": { - "remappings": [ - "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/", - "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/", - "forge-std/=lib/forge-std/src/", - "halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/", - "openzeppelin-contracts/=lib/openzeppelin-contracts/", - "solady/=lib/solady/src/" - ], - "optimizer": { - "enabled": false, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs" - }, - "compilationTarget": { - "src/Delegation.sol": "Delegation" - }, - "evmVersion": "prague", - "libraries": {} - }, - "sources": { - "lib/solady/src/utils/Base64.sol": { - "keccak256": "0x07dcf983a86bc961e4cc0b57a2cfc3e46b20a50fed9b2092c7497e5fe3715a93", - "urls": [ - "bzz-raw://65c6c0a8a29cfc5b757abe84635c83e62a177a48c2ad0be24de6b0fba1a60ea2", - "dweb:/ipfs/QmYuYwxHiBoUt6vaLTLbs2bZamRzqrTfA4BsNZ1TApTfrm" - ], - "license": "MIT" - }, - "src/Delegation.sol": { - "keccak256": "0x5aff8f24c16e10848c348b0f400d4d91cc6ce029e37a8a5b526465c768c1c5ea", - "urls": [ - "bzz-raw://3f2757dd944613d0f7065e1dd6796ca7a198a1c393d095254bec9f785e3b5a39", - "dweb:/ipfs/QmXio4bSY6iKMuhfuGZG4kcpVWcPG5KjJnWPKJqzaXVdjk" - ], - "license": "UNLICENSED" - }, - "src/lib/ECDSA.sol": { - "keccak256": "0x14a31e9a4efb985d00c8f4d1f0d4d9a99eef64e88addcf563b0e93a0ddc525fa", - "urls": [ - "bzz-raw://9fc74e53f36bf2a0f484115dc28006c93716b09ad9b9a33c2034b6a58e0f6feb", - "dweb:/ipfs/QmTNp1QKavYLKFRpUCKCvLrqPNLf2hmgTFXoVonCfnKEuN" - ], - "license": "MIT" - }, - "src/lib/P256.sol": { - "keccak256": "0x794ff507aa419df92b39a1f9b6e7e1a5784c8aaf195b4f8e0da1b33894c72129", - "urls": [ - "bzz-raw://d37ca68a4f47803301f98b30d6ab38c3319ddc4fe7b0408480658db0ef9bb8e8", - "dweb:/ipfs/QmPENnN4ePVhZuuS1kY43zWuXPvWGLhMYMZgDVKY7eesKa" - ], - "license": "MIT" - }, - "src/lib/WebAuthnP256.sol": { - "keccak256": "0x26b2e618fffe1bd28e6e92815364d3286d673d0d722cfc0181575e2f97686def", - "urls": [ - "bzz-raw://51d3ddc5fb4fe4150207b989ac8434d61752072cc698d32dc05cb6247db4be2f", - "dweb:/ipfs/QmWPA77zXsZJUTVfkcenfzcmojgadMsnEEYMFB8DbXyJdn" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 1 -} +{"abi":[{"type":"receive","stateMutability":"payable"},{"type":"function","name":"authorize","inputs":[{"name":"authorized","type":"tuple","internalType":"struct ECDSA.PublicKey","components":[{"name":"x","type":"uint256","internalType":"uint256"},{"name":"y","type":"uint256","internalType":"uint256"}]},{"name":"signature","type":"tuple","internalType":"struct ECDSA.RecoveredSignature","components":[{"name":"r","type":"uint256","internalType":"uint256"},{"name":"s","type":"uint256","internalType":"uint256"},{"name":"yParity","type":"uint8","internalType":"uint8"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"authorizedKey","inputs":[],"outputs":[{"name":"x","type":"uint256","internalType":"uint256"},{"name":"y","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"execute","inputs":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"signature","type":"tuple","internalType":"struct ECDSA.Signature","components":[{"name":"r","type":"uint256","internalType":"uint256"},{"name":"s","type":"uint256","internalType":"uint256"}]},{"name":"metadata","type":"tuple","internalType":"struct WebAuthnP256.Metadata","components":[{"name":"authenticatorData","type":"bytes","internalType":"bytes"},{"name":"clientDataJSON","type":"string","internalType":"string"},{"name":"challengeIndex","type":"uint16","internalType":"uint16"},{"name":"typeIndex","type":"uint16","internalType":"uint16"},{"name":"userVerificationRequired","type":"bool","internalType":"bool"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"nonce","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"event","name":"Authorized","inputs":[{"name":"authorized","type":"tuple","indexed":true,"internalType":"struct ECDSA.PublicKey","components":[{"name":"x","type":"uint256","internalType":"uint256"},{"name":"y","type":"uint256","internalType":"uint256"}]}],"anonymous":false},{"type":"event","name":"Executed","inputs":[{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"data","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false}],"bytecode":{"object":"0x6080604052348015600e575f5ffd5b506119d68061001c5f395ff3fe608060405260043610610042575f3560e01c80630f0b37851461004d5780633bc67d4b14610075578063affed0e01461009d578063c417a8c5146100c757610049565b3661004957005b5f5ffd5b348015610058575f5ffd5b50610073600480360381019061006e9190610b5a565b6100f2565b005b348015610080575f5ffd5b5061009b60048036038101906100969190610cc2565b610285565b005b3480156100a8575f5ffd5b506100b1610459565b6040516100be9190610d83565b60405180910390f35b3480156100d2575f5ffd5b506100db61045e565b6040516100e9929190610d9c565b60405180910390f35b5f5f54835f0135846020013560405160200161011093929190610de3565b6040516020818303038152906040528051906020012090505f5f81548092919061013990610e4c565b91905055505f6001825f8560400160208101906101569190610ec9565b60ff161461016557601c610168565b601b5b855f01355f1b86602001355f1b6040515f81526020016040526040516101919493929190610f1b565b6020604051602081039080840390855afa1580156101b1573d5f5f3e3d5ffd5b5050506020604051035190503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461022b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161022290610fb8565b60405180910390fd5b836001818161023a91906110d1565b9050508360405161024b9190611156565b60405180910390207f7ab2d3841cf199f7bdf9a46a067653d528b42029acf32bdbe62dd8191ce226ad60405160405180910390a250505050565b5f5f54878787876040516020016102a09594939291906111f1565b6040516020818303038152906040528051906020012090505f5f8154809291906102c990610e4c565b919050555061031281836102dc90611539565b858036038101906102ed9190611598565b60016040518060400160405290815f820154815260200160018201548152505061046f565b610351576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103489061160d565b60405180910390fd5b5f8773ffffffffffffffffffffffffffffffffffffffff1687878760405161037a92919061162b565b5f6040518083038185875af1925050503d805f81146103b4576040519150601f19603f3d011682016040523d82523d5f602084013e6103b9565b606091505b50509050806103fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103f49061168d565b60405180910390fd5b8773ffffffffffffffffffffffffffffffffffffffff167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f888888604051610447939291906116e7565b60405180910390a25050505050505050565b5f5481565b6001805f0154908060010154905082565b5f6025845f01515110806104af57506104ad845f015160208151811061049857610497611717565b5b602001015160f81c60f81b8560800151610675565b155b156104bc575f905061066d565b5f6040518060400160405280601581526020017f2274797065223a22776562617574686e2e676574220000000000000000000000815250905061050c818660200151876060015161ffff166107f9565b610519575f91505061066d565b5f6105458760405160200161052e9190611764565b6040516020818303038152906040526001806108f3565b90505f81604051602001610559919061181c565b6040516020818303038152906040529050610581818860200151896040015161ffff166107f9565b610590575f935050505061066d565b5f600288602001516040516105a5919061188a565b602060405180830381855afa1580156105c0573d5f5f3e3d5ffd5b5050506040513d601f19601f820116820180604052508101906105e391906118ca565b90505f6002895f0151836040516020016105fe9291906118f5565b60405160208183030381529060405260405161061a919061188a565b602060405180830381855afa158015610635573d5f5f3e3d5ffd5b5050506040513d601f19601f8201168201806040525081019061065891906118ca565b90506106658189896109fd565b955050505050505b949350505050565b5f600160f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916600160f81b84167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146106d3575f90506107f3565b81801561072e5750600460f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916600460f81b84167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b1561073b575f90506107f3565b600860f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916600860f81b84167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146107ee57601060f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916601060f81b84167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036107ed575f90506107f3565b5b600190505b92915050565b5f5f8490505f8490505f825190505f825190505f5f90505b828110156108e257818188610826919061191c565b10610838575f955050505050506108ec565b838188610845919061191c565b8151811061085657610855611717565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191685828151811061089657610895611717565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146108d5575f955050505050506108ec565b8080600101915050610811565b5060019450505050505b9392505050565b6060835180156109f5576003600282010460021b60405192507f4142434445464748494a4b4c4d4e4f505152535455565758595a616263646566601f526106708515027f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5f18603f526020830181810183886020010180515f82525b6001156109c25760038a0199508951603f8160121c16515f53603f81600c1c1651600153603f8160061c1651600253603f8116516003535f5185526004850194508385106109bc57506109c2565b5061096e565b8082526020830160405260038606600204613d3d60f01b81860352808915150290505f8186035280860388525050505050505b509392505050565b5f5f5f61010073ffffffffffffffffffffffffffffffffffffffff1686865f01518760200151875f01518860200151604051602001610a4095949392919061194f565b604051602081830303815290604052604051610a5c919061188a565b5f60405180830381855afa9150503d805f8114610a94576040519150601f19603f3d011682016040523d82523d5f602084013e610a99565b606091505b5091509150818015610aac575060208151145b8015610afb5750600160f81b81601f81518110610acc57610acb611717565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b915081925050509392505050565b5f604051905090565b5f5ffd5b5f5ffd5b5f5ffd5b5f60408284031215610b3357610b32610b1a565b5b81905092915050565b5f60608284031215610b5157610b50610b1a565b5b81905092915050565b5f5f60a08385031215610b7057610b6f610b12565b5b5f610b7d85828601610b1e565b9250506040610b8e85828601610b3c565b9150509250929050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610bc182610b98565b9050919050565b610bd181610bb7565b8114610bdb575f5ffd5b50565b5f81359050610bec81610bc8565b92915050565b5f819050919050565b610c0481610bf2565b8114610c0e575f5ffd5b50565b5f81359050610c1f81610bfb565b92915050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f840112610c4657610c45610c25565b5b8235905067ffffffffffffffff811115610c6357610c62610c29565b5b602083019150836001820283011115610c7f57610c7e610c2d565b5b9250929050565b5f60408284031215610c9b57610c9a610b1a565b5b81905092915050565b5f60a08284031215610cb957610cb8610b1a565b5b81905092915050565b5f5f5f5f5f5f60c08789031215610cdc57610cdb610b12565b5b5f610ce989828a01610bde565b9650506020610cfa89828a01610c11565b955050604087013567ffffffffffffffff811115610d1b57610d1a610b16565b5b610d2789828a01610c31565b94509450506060610d3a89828a01610c86565b92505060a087013567ffffffffffffffff811115610d5b57610d5a610b16565b5b610d6789828a01610ca4565b9150509295509295509295565b610d7d81610bf2565b82525050565b5f602082019050610d965f830184610d74565b92915050565b5f604082019050610daf5f830185610d74565b610dbc6020830184610d74565b9392505050565b5f819050919050565b610ddd610dd882610bf2565b610dc3565b82525050565b5f610dee8286610dcc565b602082019150610dfe8285610dcc565b602082019150610e0e8284610dcc565b602082019150819050949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610e5682610bf2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610e8857610e87610e1f565b5b600182019050919050565b5f60ff82169050919050565b610ea881610e93565b8114610eb2575f5ffd5b50565b5f81359050610ec381610e9f565b92915050565b5f60208284031215610ede57610edd610b12565b5b5f610eeb84828501610eb5565b91505092915050565b5f819050919050565b610f0681610ef4565b82525050565b610f1581610e93565b82525050565b5f608082019050610f2e5f830187610efd565b610f3b6020830186610f0c565b610f486040830185610efd565b610f556060830184610efd565b95945050505050565b5f82825260208201905092915050565b7f556e617574686f72697a656400000000000000000000000000000000000000005f82015250565b5f610fa2600c83610f5e565b9150610fad82610f6e565b602082019050919050565b5f6020820190508181035f830152610fcf81610f96565b9050919050565b5f8135610fe281610bfb565b80915050919050565b5f815f1b9050919050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61102184610feb565b9350801983169250808416831791505092915050565b5f819050919050565b5f61105a61105561105084610bf2565b611037565b610bf2565b9050919050565b5f819050919050565b61107382611040565b61108661107f82611061565b8354610ff6565b8255505050565b5f81015f83018061109d81610fd6565b90506110a9818461106a565b5050506001810160208301806110be81610fd6565b90506110ca818461106a565b5050505050565b6110db828261108d565b5050565b5f6110ed6020840184610c11565b905092915050565b6110fe81610bf2565b82525050565b5f61110f83836110f5565b60208301905092915050565b5f820161112a5f8301836110df565b6111348482611104565b93505061114460208301836110df565b61114e8482611104565b935050505050565b5f611161828461111b565b60408201915081905092915050565b5f8160601b9050919050565b5f61118682611170565b9050919050565b5f6111978261117c565b9050919050565b6111af6111aa82610bb7565b61118d565b82525050565b5f81905092915050565b828183375f83830152505050565b5f6111d883856111b5565b93506111e58385846111bf565b82840190509392505050565b5f6111fc8288610dcc565b60208201915061120c828761119e565b60148201915061121c8286610dcc565b60208201915061122d8284866111cd565b91508190509695505050505050565b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61128682611240565b810181811067ffffffffffffffff821117156112a5576112a4611250565b5b80604052505050565b5f6112b7610b09565b90506112c3828261127d565b919050565b5f5ffd5b5f5ffd5b5f67ffffffffffffffff8211156112ea576112e9611250565b5b6112f382611240565b9050602081019050919050565b5f61131261130d846112d0565b6112ae565b90508281526020810184848401111561132e5761132d6112cc565b5b6113398482856111bf565b509392505050565b5f82601f83011261135557611354610c25565b5b8135611365848260208601611300565b91505092915050565b5f67ffffffffffffffff82111561138857611387611250565b5b61139182611240565b9050602081019050919050565b5f6113b06113ab8461136e565b6112ae565b9050828152602081018484840111156113cc576113cb6112cc565b5b6113d78482856111bf565b509392505050565b5f82601f8301126113f3576113f2610c25565b5b813561140384826020860161139e565b91505092915050565b5f61ffff82169050919050565b6114228161140c565b811461142c575f5ffd5b50565b5f8135905061143d81611419565b92915050565b5f8115159050919050565b61145781611443565b8114611461575f5ffd5b50565b5f813590506114728161144e565b92915050565b5f60a0828403121561148d5761148c61123c565b5b61149760a06112ae565b90505f82013567ffffffffffffffff8111156114b6576114b56112c8565b5b6114c284828501611341565b5f83015250602082013567ffffffffffffffff8111156114e5576114e46112c8565b5b6114f1848285016113df565b60208301525060406115058482850161142f565b60408301525060606115198482850161142f565b606083015250608061152d84828501611464565b60808301525092915050565b5f6115443683611478565b9050919050565b5f604082840312156115605761155f61123c565b5b61156a60406112ae565b90505f61157984828501610c11565b5f83015250602061158c84828501610c11565b60208301525092915050565b5f604082840312156115ad576115ac610b12565b5b5f6115ba8482850161154b565b91505092915050565b7f496e76616c6964207369676e61747572650000000000000000000000000000005f82015250565b5f6115f7601183610f5e565b9150611602826115c3565b602082019050919050565b5f6020820190508181035f830152611624816115eb565b9050919050565b5f6116378284866111cd565b91508190509392505050565b7f43616c6c206661696c65640000000000000000000000000000000000000000005f82015250565b5f611677600b83610f5e565b915061168282611643565b602082019050919050565b5f6020820190508181035f8301526116a48161166b565b9050919050565b5f82825260208201905092915050565b5f6116c683856116ab565b93506116d38385846111bf565b6116dc83611240565b840190509392505050565b5f6040820190506116fa5f830186610d74565b818103602083015261170d8184866116bb565b9050949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b61175e61175982610ef4565b611744565b82525050565b5f61176f828461174d565b60208201915081905092915050565b7f226368616c6c656e6765223a2200000000000000000000000000000000000000815250565b5f81519050919050565b5f81905092915050565b8281835e5f83830152505050565b5f6117d0826117a4565b6117da81856117ae565b93506117ea8185602086016117b8565b80840191505092915050565b7f2200000000000000000000000000000000000000000000000000000000000000815250565b5f6118268261177e565b600d8201915061183682846117c6565b9150611841826117f6565b60018201915081905092915050565b5f81519050919050565b5f61186482611850565b61186e81856111b5565b935061187e8185602086016117b8565b80840191505092915050565b5f611895828461185a565b915081905092915050565b6118a981610ef4565b81146118b3575f5ffd5b50565b5f815190506118c4816118a0565b92915050565b5f602082840312156118df576118de610b12565b5b5f6118ec848285016118b6565b91505092915050565b5f611900828561185a565b915061190c828461174d565b6020820191508190509392505050565b5f61192682610bf2565b915061193183610bf2565b925082820190508082111561194957611948610e1f565b5b92915050565b5f60a0820190506119625f830188610efd565b61196f6020830187610d74565b61197c6040830186610d74565b6119896060830185610d74565b6119966080830184610d74565b969550505050505056fea2646970667358221220de9cf586a6d61b1ae7c694b1a3067ed2f9f3dd2d5d13b6b14a4d4f3626fa7d2764736f6c634300081e0033","sourceMap":"158:1767:1:-:0;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405260043610610042575f3560e01c80630f0b37851461004d5780633bc67d4b14610075578063affed0e01461009d578063c417a8c5146100c757610049565b3661004957005b5f5ffd5b348015610058575f5ffd5b50610073600480360381019061006e9190610b5a565b6100f2565b005b348015610080575f5ffd5b5061009b60048036038101906100969190610cc2565b610285565b005b3480156100a8575f5ffd5b506100b1610459565b6040516100be9190610d83565b60405180910390f35b3480156100d2575f5ffd5b506100db61045e565b6040516100e9929190610d9c565b60405180910390f35b5f5f54835f0135846020013560405160200161011093929190610de3565b6040516020818303038152906040528051906020012090505f5f81548092919061013990610e4c565b91905055505f6001825f8560400160208101906101569190610ec9565b60ff161461016557601c610168565b601b5b855f01355f1b86602001355f1b6040515f81526020016040526040516101919493929190610f1b565b6020604051602081039080840390855afa1580156101b1573d5f5f3e3d5ffd5b5050506020604051035190503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461022b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161022290610fb8565b60405180910390fd5b836001818161023a91906110d1565b9050508360405161024b9190611156565b60405180910390207f7ab2d3841cf199f7bdf9a46a067653d528b42029acf32bdbe62dd8191ce226ad60405160405180910390a250505050565b5f5f54878787876040516020016102a09594939291906111f1565b6040516020818303038152906040528051906020012090505f5f8154809291906102c990610e4c565b919050555061031281836102dc90611539565b858036038101906102ed9190611598565b60016040518060400160405290815f820154815260200160018201548152505061046f565b610351576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103489061160d565b60405180910390fd5b5f8773ffffffffffffffffffffffffffffffffffffffff1687878760405161037a92919061162b565b5f6040518083038185875af1925050503d805f81146103b4576040519150601f19603f3d011682016040523d82523d5f602084013e6103b9565b606091505b50509050806103fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103f49061168d565b60405180910390fd5b8773ffffffffffffffffffffffffffffffffffffffff167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f888888604051610447939291906116e7565b60405180910390a25050505050505050565b5f5481565b6001805f0154908060010154905082565b5f6025845f01515110806104af57506104ad845f015160208151811061049857610497611717565b5b602001015160f81c60f81b8560800151610675565b155b156104bc575f905061066d565b5f6040518060400160405280601581526020017f2274797065223a22776562617574686e2e676574220000000000000000000000815250905061050c818660200151876060015161ffff166107f9565b610519575f91505061066d565b5f6105458760405160200161052e9190611764565b6040516020818303038152906040526001806108f3565b90505f81604051602001610559919061181c565b6040516020818303038152906040529050610581818860200151896040015161ffff166107f9565b610590575f935050505061066d565b5f600288602001516040516105a5919061188a565b602060405180830381855afa1580156105c0573d5f5f3e3d5ffd5b5050506040513d601f19601f820116820180604052508101906105e391906118ca565b90505f6002895f0151836040516020016105fe9291906118f5565b60405160208183030381529060405260405161061a919061188a565b602060405180830381855afa158015610635573d5f5f3e3d5ffd5b5050506040513d601f19601f8201168201806040525081019061065891906118ca565b90506106658189896109fd565b955050505050505b949350505050565b5f600160f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916600160f81b84167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146106d3575f90506107f3565b81801561072e5750600460f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916600460f81b84167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b1561073b575f90506107f3565b600860f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916600860f81b84167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146107ee57601060f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916601060f81b84167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036107ed575f90506107f3565b5b600190505b92915050565b5f5f8490505f8490505f825190505f825190505f5f90505b828110156108e257818188610826919061191c565b10610838575f955050505050506108ec565b838188610845919061191c565b8151811061085657610855611717565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191685828151811061089657610895611717565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146108d5575f955050505050506108ec565b8080600101915050610811565b5060019450505050505b9392505050565b6060835180156109f5576003600282010460021b60405192507f4142434445464748494a4b4c4d4e4f505152535455565758595a616263646566601f526106708515027f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5f18603f526020830181810183886020010180515f82525b6001156109c25760038a0199508951603f8160121c16515f53603f81600c1c1651600153603f8160061c1651600253603f8116516003535f5185526004850194508385106109bc57506109c2565b5061096e565b8082526020830160405260038606600204613d3d60f01b81860352808915150290505f8186035280860388525050505050505b509392505050565b5f5f5f61010073ffffffffffffffffffffffffffffffffffffffff1686865f01518760200151875f01518860200151604051602001610a4095949392919061194f565b604051602081830303815290604052604051610a5c919061188a565b5f60405180830381855afa9150503d805f8114610a94576040519150601f19603f3d011682016040523d82523d5f602084013e610a99565b606091505b5091509150818015610aac575060208151145b8015610afb5750600160f81b81601f81518110610acc57610acb611717565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b915081925050509392505050565b5f604051905090565b5f5ffd5b5f5ffd5b5f5ffd5b5f60408284031215610b3357610b32610b1a565b5b81905092915050565b5f60608284031215610b5157610b50610b1a565b5b81905092915050565b5f5f60a08385031215610b7057610b6f610b12565b5b5f610b7d85828601610b1e565b9250506040610b8e85828601610b3c565b9150509250929050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610bc182610b98565b9050919050565b610bd181610bb7565b8114610bdb575f5ffd5b50565b5f81359050610bec81610bc8565b92915050565b5f819050919050565b610c0481610bf2565b8114610c0e575f5ffd5b50565b5f81359050610c1f81610bfb565b92915050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f840112610c4657610c45610c25565b5b8235905067ffffffffffffffff811115610c6357610c62610c29565b5b602083019150836001820283011115610c7f57610c7e610c2d565b5b9250929050565b5f60408284031215610c9b57610c9a610b1a565b5b81905092915050565b5f60a08284031215610cb957610cb8610b1a565b5b81905092915050565b5f5f5f5f5f5f60c08789031215610cdc57610cdb610b12565b5b5f610ce989828a01610bde565b9650506020610cfa89828a01610c11565b955050604087013567ffffffffffffffff811115610d1b57610d1a610b16565b5b610d2789828a01610c31565b94509450506060610d3a89828a01610c86565b92505060a087013567ffffffffffffffff811115610d5b57610d5a610b16565b5b610d6789828a01610ca4565b9150509295509295509295565b610d7d81610bf2565b82525050565b5f602082019050610d965f830184610d74565b92915050565b5f604082019050610daf5f830185610d74565b610dbc6020830184610d74565b9392505050565b5f819050919050565b610ddd610dd882610bf2565b610dc3565b82525050565b5f610dee8286610dcc565b602082019150610dfe8285610dcc565b602082019150610e0e8284610dcc565b602082019150819050949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610e5682610bf2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610e8857610e87610e1f565b5b600182019050919050565b5f60ff82169050919050565b610ea881610e93565b8114610eb2575f5ffd5b50565b5f81359050610ec381610e9f565b92915050565b5f60208284031215610ede57610edd610b12565b5b5f610eeb84828501610eb5565b91505092915050565b5f819050919050565b610f0681610ef4565b82525050565b610f1581610e93565b82525050565b5f608082019050610f2e5f830187610efd565b610f3b6020830186610f0c565b610f486040830185610efd565b610f556060830184610efd565b95945050505050565b5f82825260208201905092915050565b7f556e617574686f72697a656400000000000000000000000000000000000000005f82015250565b5f610fa2600c83610f5e565b9150610fad82610f6e565b602082019050919050565b5f6020820190508181035f830152610fcf81610f96565b9050919050565b5f8135610fe281610bfb565b80915050919050565b5f815f1b9050919050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61102184610feb565b9350801983169250808416831791505092915050565b5f819050919050565b5f61105a61105561105084610bf2565b611037565b610bf2565b9050919050565b5f819050919050565b61107382611040565b61108661107f82611061565b8354610ff6565b8255505050565b5f81015f83018061109d81610fd6565b90506110a9818461106a565b5050506001810160208301806110be81610fd6565b90506110ca818461106a565b5050505050565b6110db828261108d565b5050565b5f6110ed6020840184610c11565b905092915050565b6110fe81610bf2565b82525050565b5f61110f83836110f5565b60208301905092915050565b5f820161112a5f8301836110df565b6111348482611104565b93505061114460208301836110df565b61114e8482611104565b935050505050565b5f611161828461111b565b60408201915081905092915050565b5f8160601b9050919050565b5f61118682611170565b9050919050565b5f6111978261117c565b9050919050565b6111af6111aa82610bb7565b61118d565b82525050565b5f81905092915050565b828183375f83830152505050565b5f6111d883856111b5565b93506111e58385846111bf565b82840190509392505050565b5f6111fc8288610dcc565b60208201915061120c828761119e565b60148201915061121c8286610dcc565b60208201915061122d8284866111cd565b91508190509695505050505050565b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61128682611240565b810181811067ffffffffffffffff821117156112a5576112a4611250565b5b80604052505050565b5f6112b7610b09565b90506112c3828261127d565b919050565b5f5ffd5b5f5ffd5b5f67ffffffffffffffff8211156112ea576112e9611250565b5b6112f382611240565b9050602081019050919050565b5f61131261130d846112d0565b6112ae565b90508281526020810184848401111561132e5761132d6112cc565b5b6113398482856111bf565b509392505050565b5f82601f83011261135557611354610c25565b5b8135611365848260208601611300565b91505092915050565b5f67ffffffffffffffff82111561138857611387611250565b5b61139182611240565b9050602081019050919050565b5f6113b06113ab8461136e565b6112ae565b9050828152602081018484840111156113cc576113cb6112cc565b5b6113d78482856111bf565b509392505050565b5f82601f8301126113f3576113f2610c25565b5b813561140384826020860161139e565b91505092915050565b5f61ffff82169050919050565b6114228161140c565b811461142c575f5ffd5b50565b5f8135905061143d81611419565b92915050565b5f8115159050919050565b61145781611443565b8114611461575f5ffd5b50565b5f813590506114728161144e565b92915050565b5f60a0828403121561148d5761148c61123c565b5b61149760a06112ae565b90505f82013567ffffffffffffffff8111156114b6576114b56112c8565b5b6114c284828501611341565b5f83015250602082013567ffffffffffffffff8111156114e5576114e46112c8565b5b6114f1848285016113df565b60208301525060406115058482850161142f565b60408301525060606115198482850161142f565b606083015250608061152d84828501611464565b60808301525092915050565b5f6115443683611478565b9050919050565b5f604082840312156115605761155f61123c565b5b61156a60406112ae565b90505f61157984828501610c11565b5f83015250602061158c84828501610c11565b60208301525092915050565b5f604082840312156115ad576115ac610b12565b5b5f6115ba8482850161154b565b91505092915050565b7f496e76616c6964207369676e61747572650000000000000000000000000000005f82015250565b5f6115f7601183610f5e565b9150611602826115c3565b602082019050919050565b5f6020820190508181035f830152611624816115eb565b9050919050565b5f6116378284866111cd565b91508190509392505050565b7f43616c6c206661696c65640000000000000000000000000000000000000000005f82015250565b5f611677600b83610f5e565b915061168282611643565b602082019050919050565b5f6020820190508181035f8301526116a48161166b565b9050919050565b5f82825260208201905092915050565b5f6116c683856116ab565b93506116d38385846111bf565b6116dc83611240565b840190509392505050565b5f6040820190506116fa5f830186610d74565b818103602083015261170d8184866116bb565b9050949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b61175e61175982610ef4565b611744565b82525050565b5f61176f828461174d565b60208201915081905092915050565b7f226368616c6c656e6765223a2200000000000000000000000000000000000000815250565b5f81519050919050565b5f81905092915050565b8281835e5f83830152505050565b5f6117d0826117a4565b6117da81856117ae565b93506117ea8185602086016117b8565b80840191505092915050565b7f2200000000000000000000000000000000000000000000000000000000000000815250565b5f6118268261177e565b600d8201915061183682846117c6565b9150611841826117f6565b60018201915081905092915050565b5f81519050919050565b5f61186482611850565b61186e81856111b5565b935061187e8185602086016117b8565b80840191505092915050565b5f611895828461185a565b915081905092915050565b6118a981610ef4565b81146118b3575f5ffd5b50565b5f815190506118c4816118a0565b92915050565b5f602082840312156118df576118de610b12565b5b5f6118ec848285016118b6565b91505092915050565b5f611900828561185a565b915061190c828461174d565b6020820191508190509392505050565b5f61192682610bf2565b915061193183610bf2565b925082820190508082111561194957611948610e1f565b5b92915050565b5f60a0820190506119625f830188610efd565b61196f6020830187610d74565b61197c6040830186610d74565b6119896060830185610d74565b6119966080830184610d74565b969550505050505056fea2646970667358221220de9cf586a6d61b1ae7c694b1a3067ed2f9f3dd2d5d13b6b14a4d4f3626fa7d2764736f6c634300081e0033","sourceMap":"158:1767:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;591:563;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1361:527;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;310:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;336:36;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;591:563;709:14;753:5;;760:10;:12;;;774:10;:12;;;736:51;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;726:62;;;;;;709:79;;798:5;;:7;;;;;;;;;:::i;:::-;;;;;;816:14;833:153;856:6;897:1;876:9;:17;;;;;;;;;;:::i;:::-;:22;;;:32;;906:2;876:32;;;901:2;876:32;930:9;:11;;;922:20;;964:9;:11;;;956:20;;833:153;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;816:170;;1019:4;1001:23;;:6;:23;;;997:76;;1040:22;;;;;;;;;;:::i;:::-;;;;;;;;997:76;1099:10;1083:13;:26;;;;;;:::i;:::-;;;;1136:10;1125:22;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;699:455;;591:563;;:::o;1361:527::-;1520:17;1567:5;;1574:2;1578:5;1585:4;;1550:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1540:51;;;;;;1520:71;;1601:5;;:7;;;;;;;;;:::i;:::-;;;;;;1624:66;1644:9;1655:8;1624:66;;;:::i;:::-;1665:9;1624:66;;;;;;;;;;:::i;:::-;1676:13;1624:66;;;;;;;;;;;;;;;;;;;;;;;;;:19;:66::i;:::-;1619:125;;1706:27;;;;;;;;;;:::i;:::-;;;;;;;;1619:125;1755:12;1772:2;:7;;1787:5;1794:4;;1772:27;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1754:45;;;1817:7;1809:31;;;;;;;;;;;;:::i;:::-;;;;;;;;;1865:2;1856:25;;;1869:5;1876:4;;1856:25;;;;;;;;:::i;:::-;;;;;;;;1510:378;;1361:527;;;;;;:::o;310:20::-;;;;:::o;336:36::-;;;;;;;;;;;;;;:::o;5958:1444:4:-;6148:4;6272:2;6236:8;:26;;;:33;:38;:140;;;;6295:81;6310:8;:26;;;6337:2;6310:30;;;;;;;;:::i;:::-;;;;;;;;;;6342:8;:33;;;6295:14;:81::i;:::-;6294:82;6236:140;6219:205;;;6408:5;6401:12;;;;6219:205;6500:26;:52;;;;;;;;;;;;;;;;;;;6567:67;6576:12;6590:8;:23;;;6615:8;:18;;;6567:67;;:8;:67::i;:::-;6562:111;;6657:5;6650:12;;;;;6562:111;6740:29;6772:54;6803:9;6786:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;6815:4;6821;6772:13;:54::i;:::-;6740:86;;6836:31;6901:15;6870:52;;;;;;;;:::i;:::-;;;;;;;;;;;;;6836:86;;6938:77;6947:17;6966:8;:23;;;6991:8;:23;;;6938:77;;:8;:77::i;:::-;6933:121;;7038:5;7031:12;;;;;;;6933:121;7160:26;7189:38;7202:8;:23;;;7189:38;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7160:67;;7237:19;7259:72;7283:8;:26;;;7311:18;7266:64;;;;;;;;;:::i;:::-;;;;;;;;;;;;;7259:72;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7237:94;;7349:46;7361:11;7374:9;7385;7349:11;:46::i;:::-;7342:53;;;;;;;5958:1444;;;;;;;:::o;1686:915::-;1777:4;1300;1898:18;;1868:48;;;1300:4;1876:18;;1868:5;:26;:48;;;;1864:91;;1939:5;1932:12;;;;1864:91;2158:23;:77;;;;;1356:4;2217:18;;2185:50;;;1356:4;2194:18;;2186:5;:26;2185:50;;;;;2158:77;2154:120;;;2258:5;2251:12;;;;2154:120;1412:4;2430:18;;2400:48;;;1412:4;2408:18;;2400:5;:26;:48;;;;2396:177;;1468:4;2498:18;;2468:48;;;1468:4;2476:18;;2468:5;:26;:48;;;;2464:99;;2543:5;2536:12;;;;2464:99;2396:177;2590:4;2583:11;;1686:915;;;;;:::o;685:572::-;785:4;801:24;834:6;801:40;;851:21;881:3;851:34;;896:17;916:11;:18;896:38;;944:14;961:8;:15;944:32;;992:9;1004:1;992:13;;987:242;1011:9;1007:1;:13;987:242;;;1061:6;1056:1;1045:8;:12;;;;:::i;:::-;:22;1041:73;;1094:5;1087:12;;;;;;;;;1041:73;1150:8;1170:1;1159:8;:12;;;;:::i;:::-;1150:22;;;;;;;;:::i;:::-;;;;;;;;;;1132:40;;;:11;1144:1;1132:14;;;;;;;;:::i;:::-;;;;;;;;;;:40;;;;1128:91;;1199:5;1192:12;;;;;;;;;1128:91;1022:3;;;;;;;987:242;;;;1246:4;1239:11;;;;;;685:572;;;;;;:::o;722:2892:0:-;835:20;961:4;955:11;983:10;980:2618;;;1183:1;1179;1167:10;1163:18;1159:26;1156:1;1152:34;1294:4;1288:11;1278:21;;1664:34;1658:4;1651:48;1791:6;1780:8;1773:16;1769:29;1733:34;1729:70;1723:4;1716:84;1906:4;1898:6;1894:17;1948:13;1943:3;1939:23;2016:10;2009:4;2003;1999:15;1995:32;2070:7;2064:14;2153:4;2144:7;2137:21;2285:623;2292:1;2285:623;;;2337:1;2331:4;2327:12;2319:20;;2399:4;2393:11;2539:4;2531:5;2527:2;2523:14;2519:25;2513:32;2510:1;2502:44;2604:4;2596:5;2592:2;2588:14;2584:25;2578:32;2575:1;2567:44;2668:4;2660:5;2657:1;2653:13;2649:24;2643:31;2640:1;2632:43;2724:4;2717:5;2713:16;2707:23;2704:1;2696:35;2770:4;2764:11;2759:3;2752:24;2814:1;2809:3;2805:11;2798:18;;2875:3;2870;2867:12;2857:33;;2883:5;;;2857:33;2297:611;2285:623;;;2941:12;2932:7;2925:29;3035:4;3030:3;3026:14;3020:4;3013:28;3180:1;3168:10;3164:18;3161:1;3157:26;3313:6;3308:3;3304:16;3300:1;3295:3;3291:11;3284:37;3430:1;3417:9;3410:17;3403:25;3399:33;3394:38;;3469:1;3465;3460:3;3456:11;3449:22;3560:1;3545:13;3541:21;3533:6;3526:37;994:2604;;;;;;980:2618;923:2685;722:2892;;;;;:::o;670:556:3:-;817:4;976:12;990:19;1033:5;1025:25;;1062:6;1070:9;:11;;;1083:9;:11;;;1096:9;:11;;;1109:9;:11;;;1051:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1025:97;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;975:147;;;;1142:7;:30;;;;;1170:2;1153:6;:13;:19;1142:30;:52;;;;;1190:4;1176:18;;:6;1183:2;1176:10;;;;;;;;:::i;:::-;;;;;;;;;;:18;;;;1142:52;1132:62;;1212:7;1205:14;;;;670:556;;;;;:::o;7:75:5:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:117;443:1;440;433:12;487:232;561:5;602:2;593:6;588:3;584:16;580:25;577:112;;;608:79;;:::i;:::-;577:112;707:6;698:15;;487:232;;;;:::o;764:241::-;847:5;888:2;879:6;874:3;870:16;866:25;863:112;;;894:79;;:::i;:::-;863:112;993:6;984:15;;764:241;;;;:::o;1011:605::-;1144:6;1152;1201:3;1189:9;1180:7;1176:23;1172:33;1169:120;;;1208:79;;:::i;:::-;1169:120;1328:1;1353:81;1426:7;1417:6;1406:9;1402:22;1353:81;:::i;:::-;1343:91;;1299:145;1483:2;1509:90;1591:7;1582:6;1571:9;1567:22;1509:90;:::i;:::-;1499:100;;1454:155;1011:605;;;;;:::o;1622:126::-;1659:7;1699:42;1692:5;1688:54;1677:65;;1622:126;;;:::o;1754:96::-;1791:7;1820:24;1838:5;1820:24;:::i;:::-;1809:35;;1754:96;;;:::o;1856:122::-;1929:24;1947:5;1929:24;:::i;:::-;1922:5;1919:35;1909:63;;1968:1;1965;1958:12;1909:63;1856:122;:::o;1984:139::-;2030:5;2068:6;2055:20;2046:29;;2084:33;2111:5;2084:33;:::i;:::-;1984:139;;;;:::o;2129:77::-;2166:7;2195:5;2184:16;;2129:77;;;:::o;2212:122::-;2285:24;2303:5;2285:24;:::i;:::-;2278:5;2275:35;2265:63;;2324:1;2321;2314:12;2265:63;2212:122;:::o;2340:139::-;2386:5;2424:6;2411:20;2402:29;;2440:33;2467:5;2440:33;:::i;:::-;2340:139;;;;:::o;2485:117::-;2594:1;2591;2584:12;2608:117;2717:1;2714;2707:12;2731:117;2840:1;2837;2830:12;2867:552;2924:8;2934:6;2984:3;2977:4;2969:6;2965:17;2961:27;2951:122;;2992:79;;:::i;:::-;2951:122;3105:6;3092:20;3082:30;;3135:18;3127:6;3124:30;3121:117;;;3157:79;;:::i;:::-;3121:117;3271:4;3263:6;3259:17;3247:29;;3325:3;3317:4;3309:6;3305:17;3295:8;3291:32;3288:41;3285:128;;;3332:79;;:::i;:::-;3285:128;2867:552;;;;;:::o;3455:232::-;3529:5;3570:2;3561:6;3556:3;3552:16;3548:25;3545:112;;;3576:79;;:::i;:::-;3545:112;3675:6;3666:15;;3455:232;;;;:::o;3729:::-;3802:5;3843:3;3834:6;3829:3;3825:16;3821:26;3818:113;;;3850:79;;:::i;:::-;3818:113;3949:6;3940:15;;3729:232;;;;:::o;3967:1379::-;4128:6;4136;4144;4152;4160;4168;4217:3;4205:9;4196:7;4192:23;4188:33;4185:120;;;4224:79;;:::i;:::-;4185:120;4344:1;4369:53;4414:7;4405:6;4394:9;4390:22;4369:53;:::i;:::-;4359:63;;4315:117;4471:2;4497:53;4542:7;4533:6;4522:9;4518:22;4497:53;:::i;:::-;4487:63;;4442:118;4627:2;4616:9;4612:18;4599:32;4658:18;4650:6;4647:30;4644:117;;;4680:79;;:::i;:::-;4644:117;4793:64;4849:7;4840:6;4829:9;4825:22;4793:64;:::i;:::-;4775:82;;;;4570:297;4906:2;4932:81;5005:7;4996:6;4985:9;4981:22;4932:81;:::i;:::-;4922:91;;4877:146;5090:3;5079:9;5075:19;5062:33;5122:18;5114:6;5111:30;5108:117;;;5144:79;;:::i;:::-;5108:117;5249:80;5321:7;5312:6;5301:9;5297:22;5249:80;:::i;:::-;5239:90;;5033:306;3967:1379;;;;;;;;:::o;5352:118::-;5439:24;5457:5;5439:24;:::i;:::-;5434:3;5427:37;5352:118;;:::o;5476:222::-;5569:4;5607:2;5596:9;5592:18;5584:26;;5620:71;5688:1;5677:9;5673:17;5664:6;5620:71;:::i;:::-;5476:222;;;;:::o;5704:332::-;5825:4;5863:2;5852:9;5848:18;5840:26;;5876:71;5944:1;5933:9;5929:17;5920:6;5876:71;:::i;:::-;5957:72;6025:2;6014:9;6010:18;6001:6;5957:72;:::i;:::-;5704:332;;;;;:::o;6042:79::-;6081:7;6110:5;6099:16;;6042:79;;;:::o;6127:157::-;6232:45;6252:24;6270:5;6252:24;:::i;:::-;6232:45;:::i;:::-;6227:3;6220:58;6127:157;;:::o;6290:538::-;6458:3;6473:75;6544:3;6535:6;6473:75;:::i;:::-;6573:2;6568:3;6564:12;6557:19;;6586:75;6657:3;6648:6;6586:75;:::i;:::-;6686:2;6681:3;6677:12;6670:19;;6699:75;6770:3;6761:6;6699:75;:::i;:::-;6799:2;6794:3;6790:12;6783:19;;6819:3;6812:10;;6290:538;;;;;;:::o;6834:180::-;6882:77;6879:1;6872:88;6979:4;6976:1;6969:15;7003:4;7000:1;6993:15;7020:233;7059:3;7082:24;7100:5;7082:24;:::i;:::-;7073:33;;7128:66;7121:5;7118:77;7115:103;;7198:18;;:::i;:::-;7115:103;7245:1;7238:5;7234:13;7227:20;;7020:233;;;:::o;7259:86::-;7294:7;7334:4;7327:5;7323:16;7312:27;;7259:86;;;:::o;7351:118::-;7422:22;7438:5;7422:22;:::i;:::-;7415:5;7412:33;7402:61;;7459:1;7456;7449:12;7402:61;7351:118;:::o;7475:135::-;7519:5;7557:6;7544:20;7535:29;;7573:31;7598:5;7573:31;:::i;:::-;7475:135;;;;:::o;7616:325::-;7673:6;7722:2;7710:9;7701:7;7697:23;7693:32;7690:119;;;7728:79;;:::i;:::-;7690:119;7848:1;7873:51;7916:7;7907:6;7896:9;7892:22;7873:51;:::i;:::-;7863:61;;7819:115;7616:325;;;;:::o;7947:77::-;7984:7;8013:5;8002:16;;7947:77;;;:::o;8030:118::-;8117:24;8135:5;8117:24;:::i;:::-;8112:3;8105:37;8030:118;;:::o;8154:112::-;8237:22;8253:5;8237:22;:::i;:::-;8232:3;8225:35;8154:112;;:::o;8272:545::-;8445:4;8483:3;8472:9;8468:19;8460:27;;8497:71;8565:1;8554:9;8550:17;8541:6;8497:71;:::i;:::-;8578:68;8642:2;8631:9;8627:18;8618:6;8578:68;:::i;:::-;8656:72;8724:2;8713:9;8709:18;8700:6;8656:72;:::i;:::-;8738;8806:2;8795:9;8791:18;8782:6;8738:72;:::i;:::-;8272:545;;;;;;;:::o;8823:169::-;8907:11;8941:6;8936:3;8929:19;8981:4;8976:3;8972:14;8957:29;;8823:169;;;;:::o;8998:162::-;9138:14;9134:1;9126:6;9122:14;9115:38;8998:162;:::o;9166:366::-;9308:3;9329:67;9393:2;9388:3;9329:67;:::i;:::-;9322:74;;9405:93;9494:3;9405:93;:::i;:::-;9523:2;9518:3;9514:12;9507:19;;9166:366;;;:::o;9538:419::-;9704:4;9742:2;9731:9;9727:18;9719:26;;9791:9;9785:4;9781:20;9777:1;9766:9;9762:17;9755:47;9819:131;9945:4;9819:131;:::i;:::-;9811:139;;9538:419;;;:::o;10149:186::-;10194:11;10243:3;10230:17;10256:33;10283:5;10256:33;:::i;:::-;10323:5;10299:29;;10206:129;10149:186;;;:::o;10341:92::-;10373:8;10420:5;10417:1;10413:13;10392:34;;10341:92;;;:::o;10439:290::-;10497:6;10526:66;10613:22;10626:8;10613:22;:::i;:::-;10601:34;;10668:4;10664:9;10657:5;10653:21;10644:30;;10717:4;10707:8;10703:19;10696:5;10693:30;10683:40;;10504:225;10439:290;;;;:::o;10735:60::-;10763:3;10784:5;10777:12;;10735:60;;;:::o;10801:142::-;10851:9;10884:53;10902:34;10911:24;10929:5;10911:24;:::i;:::-;10902:34;:::i;:::-;10884:53;:::i;:::-;10871:66;;10801:142;;;:::o;10949:75::-;10992:3;11013:5;11006:12;;10949:75;;;:::o;11030:263::-;11141:39;11172:7;11141:39;:::i;:::-;11202:84;11244:41;11268:16;11244:41;:::i;:::-;11237:4;11231:11;11202:84;:::i;:::-;11196:4;11189:98;11107:186;11030:263;;:::o;11299:809::-;11477:1;11471:4;11467:12;11523:1;11516:5;11512:13;11573:12;11616:42;11644:13;11616:42;:::i;:::-;11599:59;;11672:79;11737:13;11725:10;11672:79;:::i;:::-;11434:328;;;11815:1;11809:4;11805:12;11861:2;11854:5;11850:14;11912:12;11955:42;11983:13;11955:42;:::i;:::-;11938:59;;12011:79;12076:13;12064:10;12011:79;:::i;:::-;11772:329;;;11299:809;;:::o;12114:261::-;12253:116;12361:7;12355:4;12253:116;:::i;:::-;12114:261;;:::o;12381:122::-;12433:5;12458:39;12493:2;12488:3;12484:12;12479:3;12458:39;:::i;:::-;12449:48;;12381:122;;;;:::o;12509:116::-;12594:24;12612:5;12594:24;:::i;:::-;12589:3;12582:37;12509:116;;:::o;12631:195::-;12708:10;12729:54;12779:3;12771:6;12729:54;:::i;:::-;12815:4;12810:3;12806:14;12792:28;;12631:195;;;;:::o;12888:605::-;13057:4;13052:3;13048:14;13124:50;13168:4;13161:5;13157:16;13150:5;13124:50;:::i;:::-;13194:70;13260:3;13246:12;13194:70;:::i;:::-;13187:77;;13072:202;13336:50;13380:4;13373:5;13369:16;13362:5;13336:50;:::i;:::-;13406:70;13472:3;13458:12;13406:70;:::i;:::-;13399:77;;13284:202;13026:467;12888:605;;:::o;13499:364::-;13665:3;13680:129;13805:3;13796:6;13680:129;:::i;:::-;13834:2;13829:3;13825:12;13818:19;;13854:3;13847:10;;13499:364;;;;:::o;13869:94::-;13902:8;13950:5;13946:2;13942:14;13921:35;;13869:94;;;:::o;13969:::-;14008:7;14037:20;14051:5;14037:20;:::i;:::-;14026:31;;13969:94;;;:::o;14069:100::-;14108:7;14137:26;14157:5;14137:26;:::i;:::-;14126:37;;14069:100;;;:::o;14175:157::-;14280:45;14300:24;14318:5;14300:24;:::i;:::-;14280:45;:::i;:::-;14275:3;14268:58;14175:157;;:::o;14338:147::-;14439:11;14476:3;14461:18;;14338:147;;;;:::o;14491:148::-;14589:6;14584:3;14579;14566:30;14630:1;14621:6;14616:3;14612:16;14605:27;14491:148;;;:::o;14667:327::-;14781:3;14802:88;14883:6;14878:3;14802:88;:::i;:::-;14795:95;;14900:56;14949:6;14944:3;14937:5;14900:56;:::i;:::-;14981:6;14976:3;14972:16;14965:23;;14667:327;;;;;:::o;15000:714::-;15224:3;15239:75;15310:3;15301:6;15239:75;:::i;:::-;15339:2;15334:3;15330:12;15323:19;;15352:75;15423:3;15414:6;15352:75;:::i;:::-;15452:2;15447:3;15443:12;15436:19;;15465:75;15536:3;15527:6;15465:75;:::i;:::-;15565:2;15560:3;15556:12;15549:19;;15585:103;15684:3;15675:6;15667;15585:103;:::i;:::-;15578:110;;15705:3;15698:10;;15000:714;;;;;;;;:::o;15720:117::-;15829:1;15826;15819:12;15843:102;15884:6;15935:2;15931:7;15926:2;15919:5;15915:14;15911:28;15901:38;;15843:102;;;:::o;15951:180::-;15999:77;15996:1;15989:88;16096:4;16093:1;16086:15;16120:4;16117:1;16110:15;16137:281;16220:27;16242:4;16220:27;:::i;:::-;16212:6;16208:40;16350:6;16338:10;16335:22;16314:18;16302:10;16299:34;16296:62;16293:88;;;16361:18;;:::i;:::-;16293:88;16401:10;16397:2;16390:22;16180:238;16137:281;;:::o;16424:129::-;16458:6;16485:20;;:::i;:::-;16475:30;;16514:33;16542:4;16534:6;16514:33;:::i;:::-;16424:129;;;:::o;16559:117::-;16668:1;16665;16658:12;16682:117;16791:1;16788;16781:12;16805:307;16866:4;16956:18;16948:6;16945:30;16942:56;;;16978:18;;:::i;:::-;16942:56;17016:29;17038:6;17016:29;:::i;:::-;17008:37;;17100:4;17094;17090:15;17082:23;;16805:307;;;:::o;17118:423::-;17195:5;17220:65;17236:48;17277:6;17236:48;:::i;:::-;17220:65;:::i;:::-;17211:74;;17308:6;17301:5;17294:21;17346:4;17339:5;17335:16;17384:3;17375:6;17370:3;17366:16;17363:25;17360:112;;;17391:79;;:::i;:::-;17360:112;17481:54;17528:6;17523:3;17518;17481:54;:::i;:::-;17201:340;17118:423;;;;;:::o;17560:338::-;17615:5;17664:3;17657:4;17649:6;17645:17;17641:27;17631:122;;17672:79;;:::i;:::-;17631:122;17789:6;17776:20;17814:78;17888:3;17880:6;17873:4;17865:6;17861:17;17814:78;:::i;:::-;17805:87;;17621:277;17560:338;;;;:::o;17904:308::-;17966:4;18056:18;18048:6;18045:30;18042:56;;;18078:18;;:::i;:::-;18042:56;18116:29;18138:6;18116:29;:::i;:::-;18108:37;;18200:4;18194;18190:15;18182:23;;17904:308;;;:::o;18218:425::-;18296:5;18321:66;18337:49;18379:6;18337:49;:::i;:::-;18321:66;:::i;:::-;18312:75;;18410:6;18403:5;18396:21;18448:4;18441:5;18437:16;18486:3;18477:6;18472:3;18468:16;18465:25;18462:112;;;18493:79;;:::i;:::-;18462:112;18583:54;18630:6;18625:3;18620;18583:54;:::i;:::-;18302:341;18218:425;;;;;:::o;18663:340::-;18719:5;18768:3;18761:4;18753:6;18749:17;18745:27;18735:122;;18776:79;;:::i;:::-;18735:122;18893:6;18880:20;18918:79;18993:3;18985:6;18978:4;18970:6;18966:17;18918:79;:::i;:::-;18909:88;;18725:278;18663:340;;;;:::o;19009:89::-;19045:7;19085:6;19078:5;19074:18;19063:29;;19009:89;;;:::o;19104:120::-;19176:23;19193:5;19176:23;:::i;:::-;19169:5;19166:34;19156:62;;19214:1;19211;19204:12;19156:62;19104:120;:::o;19230:137::-;19275:5;19313:6;19300:20;19291:29;;19329:32;19355:5;19329:32;:::i;:::-;19230:137;;;;:::o;19373:90::-;19407:7;19450:5;19443:13;19436:21;19425:32;;19373:90;;;:::o;19469:116::-;19539:21;19554:5;19539:21;:::i;:::-;19532:5;19529:32;19519:60;;19575:1;19572;19565:12;19519:60;19469:116;:::o;19591:133::-;19634:5;19672:6;19659:20;19650:29;;19688:30;19712:5;19688:30;:::i;:::-;19591:133;;;;:::o;19766:1450::-;19840:5;19884:4;19872:9;19867:3;19863:19;19859:30;19856:117;;;19892:79;;:::i;:::-;19856:117;19991:21;20007:4;19991:21;:::i;:::-;19982:30;;20112:1;20101:9;20097:17;20084:31;20142:18;20134:6;20131:30;20128:117;;;20164:79;;:::i;:::-;20128:117;20284:58;20338:3;20329:6;20318:9;20314:22;20284:58;:::i;:::-;20277:4;20270:5;20266:16;20259:84;20022:332;20451:2;20440:9;20436:18;20423:32;20482:18;20474:6;20471:30;20468:117;;;20504:79;;:::i;:::-;20468:117;20624:59;20679:3;20670:6;20659:9;20655:22;20624:59;:::i;:::-;20617:4;20610:5;20606:16;20599:85;20364:331;20764:2;20805:48;20849:3;20840:6;20829:9;20825:22;20805:48;:::i;:::-;20798:4;20791:5;20787:16;20780:74;20705:160;20929:2;20970:48;21014:3;21005:6;20994:9;20990:22;20970:48;:::i;:::-;20963:4;20956:5;20952:16;20945:74;20875:155;21109:3;21151:46;21193:3;21184:6;21173:9;21169:22;21151:46;:::i;:::-;21144:4;21137:5;21133:16;21126:72;21040:169;19766:1450;;;;:::o;21222:211::-;21324:9;21358:68;21411:14;21404:5;21358:68;:::i;:::-;21345:81;;21222:211;;;:::o;21469:569::-;21544:5;21588:4;21576:9;21571:3;21567:19;21563:30;21560:117;;;21596:79;;:::i;:::-;21560:117;21695:21;21711:4;21695:21;:::i;:::-;21686:30;;21772:1;21812:49;21857:3;21848:6;21837:9;21833:22;21812:49;:::i;:::-;21805:4;21798:5;21794:16;21787:75;21726:147;21929:2;21970:49;22015:3;22006:6;21995:9;21991:22;21970:49;:::i;:::-;21963:4;21956:5;21952:16;21945:75;21883:148;21469:569;;;;:::o;22044:381::-;22129:6;22178:2;22166:9;22157:7;22153:23;22149:32;22146:119;;;22184:79;;:::i;:::-;22146:119;22304:1;22329:79;22400:7;22391:6;22380:9;22376:22;22329:79;:::i;:::-;22319:89;;22275:143;22044:381;;;;:::o;22431:167::-;22571:19;22567:1;22559:6;22555:14;22548:43;22431:167;:::o;22604:366::-;22746:3;22767:67;22831:2;22826:3;22767:67;:::i;:::-;22760:74;;22843:93;22932:3;22843:93;:::i;:::-;22961:2;22956:3;22952:12;22945:19;;22604:366;;;:::o;22976:419::-;23142:4;23180:2;23169:9;23165:18;23157:26;;23229:9;23223:4;23219:20;23215:1;23204:9;23200:17;23193:47;23257:131;23383:4;23257:131;:::i;:::-;23249:139;;22976:419;;;:::o;23401:291::-;23541:3;23563:103;23662:3;23653:6;23645;23563:103;:::i;:::-;23556:110;;23683:3;23676:10;;23401:291;;;;;:::o;23698:161::-;23838:13;23834:1;23826:6;23822:14;23815:37;23698:161;:::o;23865:366::-;24007:3;24028:67;24092:2;24087:3;24028:67;:::i;:::-;24021:74;;24104:93;24193:3;24104:93;:::i;:::-;24222:2;24217:3;24213:12;24206:19;;23865:366;;;:::o;24237:419::-;24403:4;24441:2;24430:9;24426:18;24418:26;;24490:9;24484:4;24480:20;24476:1;24465:9;24461:17;24454:47;24518:131;24644:4;24518:131;:::i;:::-;24510:139;;24237:419;;;:::o;24662:168::-;24745:11;24779:6;24774:3;24767:19;24819:4;24814:3;24810:14;24795:29;;24662:168;;;;:::o;24858:314::-;24954:3;24975:70;25038:6;25033:3;24975:70;:::i;:::-;24968:77;;25055:56;25104:6;25099:3;25092:5;25055:56;:::i;:::-;25136:29;25158:6;25136:29;:::i;:::-;25131:3;25127:39;25120:46;;24858:314;;;;;:::o;25178:439::-;25327:4;25365:2;25354:9;25350:18;25342:26;;25378:71;25446:1;25435:9;25431:17;25422:6;25378:71;:::i;:::-;25496:9;25490:4;25486:20;25481:2;25470:9;25466:18;25459:48;25524:86;25605:4;25596:6;25588;25524:86;:::i;:::-;25516:94;;25178:439;;;;;;:::o;25623:180::-;25671:77;25668:1;25661:88;25768:4;25765:1;25758:15;25792:4;25789:1;25782:15;25809:79;25848:7;25877:5;25866:16;;25809:79;;;:::o;25894:157::-;25999:45;26019:24;26037:5;26019:24;:::i;:::-;25999:45;:::i;:::-;25994:3;25987:58;25894:157;;:::o;26057:256::-;26169:3;26184:75;26255:3;26246:6;26184:75;:::i;:::-;26284:2;26279:3;26275:12;26268:19;;26304:3;26297:10;;26057:256;;;;:::o;26319:242::-;26488:66;26483:3;26476:79;26319:242;:::o;26567:99::-;26619:6;26653:5;26647:12;26637:22;;26567:99;;;:::o;26672:148::-;26774:11;26811:3;26796:18;;26672:148;;;;:::o;26826:139::-;26915:6;26910:3;26905;26899:23;26956:1;26947:6;26942:3;26938:16;26931:27;26826:139;;;:::o;26971:390::-;27077:3;27105:39;27138:5;27105:39;:::i;:::-;27160:89;27242:6;27237:3;27160:89;:::i;:::-;27153:96;;27258:65;27316:6;27311:3;27304:4;27297:5;27293:16;27258:65;:::i;:::-;27348:6;27343:3;27339:16;27332:23;;27081:280;26971:390;;;;:::o;27367:241::-;27535:66;27530:3;27523:79;27367:241;:::o;27614:806::-;27927:3;27942:138;28076:3;27942:138;:::i;:::-;28105:2;28100:3;28096:12;28089:19;;28125:95;28216:3;28207:6;28125:95;:::i;:::-;28118:102;;28230:137;28363:3;28230:137;:::i;:::-;28392:1;28387:3;28383:11;28376:18;;28411:3;28404:10;;27614:806;;;;:::o;28426:98::-;28477:6;28511:5;28505:12;28495:22;;28426:98;;;:::o;28530:386::-;28634:3;28662:38;28694:5;28662:38;:::i;:::-;28716:88;28797:6;28792:3;28716:88;:::i;:::-;28709:95;;28813:65;28871:6;28866:3;28859:4;28852:5;28848:16;28813:65;:::i;:::-;28903:6;28898:3;28894:16;28887:23;;28638:278;28530:386;;;;:::o;28922:271::-;29052:3;29074:93;29163:3;29154:6;29074:93;:::i;:::-;29067:100;;29184:3;29177:10;;28922:271;;;;:::o;29199:122::-;29272:24;29290:5;29272:24;:::i;:::-;29265:5;29262:35;29252:63;;29311:1;29308;29301:12;29252:63;29199:122;:::o;29327:143::-;29384:5;29415:6;29409:13;29400:22;;29431:33;29458:5;29431:33;:::i;:::-;29327:143;;;;:::o;29476:351::-;29546:6;29595:2;29583:9;29574:7;29570:23;29566:32;29563:119;;;29601:79;;:::i;:::-;29563:119;29721:1;29746:64;29802:7;29793:6;29782:9;29778:22;29746:64;:::i;:::-;29736:74;;29692:128;29476:351;;;;:::o;29833:412::-;29991:3;30013:93;30102:3;30093:6;30013:93;:::i;:::-;30006:100;;30116:75;30187:3;30178:6;30116:75;:::i;:::-;30216:2;30211:3;30207:12;30200:19;;30236:3;30229:10;;29833:412;;;;;:::o;30251:191::-;30291:3;30310:20;30328:1;30310:20;:::i;:::-;30305:25;;30344:20;30362:1;30344:20;:::i;:::-;30339:25;;30387:1;30384;30380:9;30373:16;;30408:3;30405:1;30402:10;30399:36;;;30415:18;;:::i;:::-;30399:36;30251:191;;;;:::o;30448:664::-;30653:4;30691:3;30680:9;30676:19;30668:27;;30705:71;30773:1;30762:9;30758:17;30749:6;30705:71;:::i;:::-;30786:72;30854:2;30843:9;30839:18;30830:6;30786:72;:::i;:::-;30868;30936:2;30925:9;30921:18;30912:6;30868:72;:::i;:::-;30950;31018:2;31007:9;31003:18;30994:6;30950:72;:::i;:::-;31032:73;31100:3;31089:9;31085:19;31076:6;31032:73;:::i;:::-;30448:664;;;;;;;;:::o","linkReferences":{}},"methodIdentifiers":{"authorize((uint256,uint256),(uint256,uint256,uint8))":"0f0b3785","authorizedKey()":"c417a8c5","execute(address,uint256,bytes,(uint256,uint256),(bytes,string,uint16,uint16,bool))":"3bc67d4b","nonce()":"affed0e0"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.30+commit.73712a01\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"indexed\":true,\"internalType\":\"struct ECDSA.PublicKey\",\"name\":\"authorized\",\"type\":\"tuple\"}],\"name\":\"Authorized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"Executed\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"internalType\":\"struct ECDSA.PublicKey\",\"name\":\"authorized\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"r\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"s\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"yParity\",\"type\":\"uint8\"}],\"internalType\":\"struct ECDSA.RecoveredSignature\",\"name\":\"signature\",\"type\":\"tuple\"}],\"name\":\"authorize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"authorizedKey\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"r\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"s\",\"type\":\"uint256\"}],\"internalType\":\"struct ECDSA.Signature\",\"name\":\"signature\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"authenticatorData\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"clientDataJSON\",\"type\":\"string\"},{\"internalType\":\"uint16\",\"name\":\"challengeIndex\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"typeIndex\",\"type\":\"uint16\"},{\"internalType\":\"bool\",\"name\":\"userVerificationRequired\",\"type\":\"bool\"}],\"internalType\":\"struct WebAuthnP256.Metadata\",\"name\":\"metadata\",\"type\":\"tuple\"}],\"name\":\"execute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"authorize((uint256,uint256),(uint256,uint256,uint8))\":{\"params\":{\"authorized\":\"The public key to authorize\",\"signature\":\"The Ethereum signature to verify the authorization\"}},\"execute(address,uint256,bytes,(uint256,uint256),(bytes,string,uint16,uint16,bool))\":{\"params\":{\"data\":\"The calldata to send\",\"to\":\"The address of the contract to call\",\"value\":\"The amount of ether to send\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"authorize((uint256,uint256),(uint256,uint256,uint8))\":{\"notice\":\"Authorize a public key to execute transactions on behalf of the delegatee\"},\"execute(address,uint256,bytes,(uint256,uint256),(bytes,string,uint16,uint16,bool))\":{\"notice\":\"Execute a transaction on behalf of the delegatee\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/Delegation.sol\":\"Delegation\"},\"evmVersion\":\"prague\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":solady/=lib/solady/src/\"]},\"sources\":{\"lib/solady/src/utils/Base64.sol\":{\"keccak256\":\"0x07dcf983a86bc961e4cc0b57a2cfc3e46b20a50fed9b2092c7497e5fe3715a93\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://65c6c0a8a29cfc5b757abe84635c83e62a177a48c2ad0be24de6b0fba1a60ea2\",\"dweb:/ipfs/QmYuYwxHiBoUt6vaLTLbs2bZamRzqrTfA4BsNZ1TApTfrm\"]},\"src/Delegation.sol\":{\"keccak256\":\"0x5aff8f24c16e10848c348b0f400d4d91cc6ce029e37a8a5b526465c768c1c5ea\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://3f2757dd944613d0f7065e1dd6796ca7a198a1c393d095254bec9f785e3b5a39\",\"dweb:/ipfs/QmXio4bSY6iKMuhfuGZG4kcpVWcPG5KjJnWPKJqzaXVdjk\"]},\"src/lib/ECDSA.sol\":{\"keccak256\":\"0x14a31e9a4efb985d00c8f4d1f0d4d9a99eef64e88addcf563b0e93a0ddc525fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9fc74e53f36bf2a0f484115dc28006c93716b09ad9b9a33c2034b6a58e0f6feb\",\"dweb:/ipfs/QmTNp1QKavYLKFRpUCKCvLrqPNLf2hmgTFXoVonCfnKEuN\"]},\"src/lib/P256.sol\":{\"keccak256\":\"0x794ff507aa419df92b39a1f9b6e7e1a5784c8aaf195b4f8e0da1b33894c72129\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d37ca68a4f47803301f98b30d6ab38c3319ddc4fe7b0408480658db0ef9bb8e8\",\"dweb:/ipfs/QmPENnN4ePVhZuuS1kY43zWuXPvWGLhMYMZgDVKY7eesKa\"]},\"src/lib/WebAuthnP256.sol\":{\"keccak256\":\"0x26b2e618fffe1bd28e6e92815364d3286d673d0d722cfc0181575e2f97686def\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51d3ddc5fb4fe4150207b989ac8434d61752072cc698d32dc05cb6247db4be2f\",\"dweb:/ipfs/QmWPA77zXsZJUTVfkcenfzcmojgadMsnEEYMFB8DbXyJdn\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.30+commit.73712a01"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"struct ECDSA.PublicKey","name":"authorized","type":"tuple","components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"indexed":true}],"type":"event","name":"Authorized","anonymous":false},{"inputs":[{"internalType":"address","name":"to","type":"address","indexed":true},{"internalType":"uint256","name":"value","type":"uint256","indexed":false},{"internalType":"bytes","name":"data","type":"bytes","indexed":false}],"type":"event","name":"Executed","anonymous":false},{"inputs":[{"internalType":"struct ECDSA.PublicKey","name":"authorized","type":"tuple","components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}]},{"internalType":"struct ECDSA.RecoveredSignature","name":"signature","type":"tuple","components":[{"internalType":"uint256","name":"r","type":"uint256"},{"internalType":"uint256","name":"s","type":"uint256"},{"internalType":"uint8","name":"yParity","type":"uint8"}]}],"stateMutability":"nonpayable","type":"function","name":"authorize"},{"inputs":[],"stateMutability":"view","type":"function","name":"authorizedKey","outputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"struct ECDSA.Signature","name":"signature","type":"tuple","components":[{"internalType":"uint256","name":"r","type":"uint256"},{"internalType":"uint256","name":"s","type":"uint256"}]},{"internalType":"struct WebAuthnP256.Metadata","name":"metadata","type":"tuple","components":[{"internalType":"bytes","name":"authenticatorData","type":"bytes"},{"internalType":"string","name":"clientDataJSON","type":"string"},{"internalType":"uint16","name":"challengeIndex","type":"uint16"},{"internalType":"uint16","name":"typeIndex","type":"uint16"},{"internalType":"bool","name":"userVerificationRequired","type":"bool"}]}],"stateMutability":"nonpayable","type":"function","name":"execute"},{"inputs":[],"stateMutability":"view","type":"function","name":"nonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"payable","type":"receive"}],"devdoc":{"kind":"dev","methods":{"authorize((uint256,uint256),(uint256,uint256,uint8))":{"params":{"authorized":"The public key to authorize","signature":"The Ethereum signature to verify the authorization"}},"execute(address,uint256,bytes,(uint256,uint256),(bytes,string,uint16,uint16,bool))":{"params":{"data":"The calldata to send","to":"The address of the contract to call","value":"The amount of ether to send"}}},"version":1},"userdoc":{"kind":"user","methods":{"authorize((uint256,uint256),(uint256,uint256,uint8))":{"notice":"Authorize a public key to execute transactions on behalf of the delegatee"},"execute(address,uint256,bytes,(uint256,uint256),(bytes,string,uint16,uint16,bool))":{"notice":"Execute a transaction on behalf of the delegatee"}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/","solady/=lib/solady/src/"],"optimizer":{"enabled":false,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/Delegation.sol":"Delegation"},"evmVersion":"prague","libraries":{}},"sources":{"lib/solady/src/utils/Base64.sol":{"keccak256":"0x07dcf983a86bc961e4cc0b57a2cfc3e46b20a50fed9b2092c7497e5fe3715a93","urls":["bzz-raw://65c6c0a8a29cfc5b757abe84635c83e62a177a48c2ad0be24de6b0fba1a60ea2","dweb:/ipfs/QmYuYwxHiBoUt6vaLTLbs2bZamRzqrTfA4BsNZ1TApTfrm"],"license":"MIT"},"src/Delegation.sol":{"keccak256":"0x5aff8f24c16e10848c348b0f400d4d91cc6ce029e37a8a5b526465c768c1c5ea","urls":["bzz-raw://3f2757dd944613d0f7065e1dd6796ca7a198a1c393d095254bec9f785e3b5a39","dweb:/ipfs/QmXio4bSY6iKMuhfuGZG4kcpVWcPG5KjJnWPKJqzaXVdjk"],"license":"UNLICENSED"},"src/lib/ECDSA.sol":{"keccak256":"0x14a31e9a4efb985d00c8f4d1f0d4d9a99eef64e88addcf563b0e93a0ddc525fa","urls":["bzz-raw://9fc74e53f36bf2a0f484115dc28006c93716b09ad9b9a33c2034b6a58e0f6feb","dweb:/ipfs/QmTNp1QKavYLKFRpUCKCvLrqPNLf2hmgTFXoVonCfnKEuN"],"license":"MIT"},"src/lib/P256.sol":{"keccak256":"0x794ff507aa419df92b39a1f9b6e7e1a5784c8aaf195b4f8e0da1b33894c72129","urls":["bzz-raw://d37ca68a4f47803301f98b30d6ab38c3319ddc4fe7b0408480658db0ef9bb8e8","dweb:/ipfs/QmPENnN4ePVhZuuS1kY43zWuXPvWGLhMYMZgDVKY7eesKa"],"license":"MIT"},"src/lib/WebAuthnP256.sol":{"keccak256":"0x26b2e618fffe1bd28e6e92815364d3286d673d0d722cfc0181575e2f97686def","urls":["bzz-raw://51d3ddc5fb4fe4150207b989ac8434d61752072cc698d32dc05cb6247db4be2f","dweb:/ipfs/QmWPA77zXsZJUTVfkcenfzcmojgadMsnEEYMFB8DbXyJdn"],"license":"MIT"}},"version":1},"id":1} From cd86d2d757844ee6bab0c747bd62ed371576c4d5 Mon Sep 17 00:00:00 2001 From: ricomateo Date: Fri, 14 Nov 2025 14:18:04 -0300 Subject: [PATCH 05/15] change Dockerfile to build the app in the entrypoint --- app/Dockerfile | 20 ++++---------------- app/nginx.conf | 11 ----------- app/package.json | 3 ++- app/vite.config.ts | 4 ++++ 4 files changed, 10 insertions(+), 28 deletions(-) delete mode 100644 app/nginx.conf diff --git a/app/Dockerfile b/app/Dockerfile index 9eecdfe..87466d8 100644 --- a/app/Dockerfile +++ b/app/Dockerfile @@ -15,21 +15,9 @@ RUN npm install # Copy the project files into the working directory COPY . . -# Build the React app for production -RUN npm run build - - -# Use the official NGINX image for production -FROM nginx:stable-alpine AS production - -# copy nginx configuration in side conf.d folder -COPY --from=build /usr/src/app/nginx.conf /etc/nginx/conf.d - -# Copy the build output from the dist folder into the Nginx html directory -COPY --from=build /usr/src/app/dist /usr/share/nginx/html - -# Expose port 3000 to allow access to the app EXPOSE 3000 -# Run Nginx in the foreground -ENTRYPOINT ["nginx", "-g", "daemon off;"] +# Build and start the app +# TODO: change this so that the app can read the environment variables +# without the need to build the app every time +ENTRYPOINT ["npm", "run", "prod"] diff --git a/app/nginx.conf b/app/nginx.conf deleted file mode 100644 index 0750d8f..0000000 --- a/app/nginx.conf +++ /dev/null @@ -1,11 +0,0 @@ -server { - listen 3000; - server_name _; - - root /usr/share/nginx/html; - index index.html; - - location / { - try_files $uri $uri/ /index.html; - } -} diff --git a/app/package.json b/app/package.json index 447ff48..c63c4fd 100644 --- a/app/package.json +++ b/app/package.json @@ -7,7 +7,8 @@ "dev": "vite", "build": "tsc -b && vite build", "lint": "eslint .", - "preview": "vite preview" + "preview": "vite preview", + "prod": "npm run build && npm run preview" }, "dependencies": { "@tailwindcss/vite": "^4.0.14", diff --git a/app/vite.config.ts b/app/vite.config.ts index 6c86777..da33fa9 100644 --- a/app/vite.config.ts +++ b/app/vite.config.ts @@ -8,4 +8,8 @@ export default defineConfig({ react(), tailwindcss() ], + preview: { + host: true, + port: 3000, + } }) From 6f46cd1b37c4b336af0618fb7ae49a40d5dfb2e8 Mon Sep 17 00:00:00 2001 From: ricomateo Date: Fri, 14 Nov 2025 14:19:36 -0300 Subject: [PATCH 06/15] add doc comment --- app/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Dockerfile b/app/Dockerfile index 87466d8..ed7d8f6 100644 --- a/app/Dockerfile +++ b/app/Dockerfile @@ -18,6 +18,6 @@ COPY . . EXPOSE 3000 # Build and start the app -# TODO: change this so that the app can read the environment variables +# TODO: change this so that the app can replace the environment variables at runtime # without the need to build the app every time ENTRYPOINT ["npm", "run", "prod"] From e7afb28b4a51ee89b31419c82751f13b935919cb Mon Sep 17 00:00:00 2001 From: ricomateo Date: Fri, 14 Nov 2025 15:01:43 -0300 Subject: [PATCH 07/15] rename prod command to build:preview --- app/Dockerfile | 2 +- app/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Dockerfile b/app/Dockerfile index ed7d8f6..306a754 100644 --- a/app/Dockerfile +++ b/app/Dockerfile @@ -20,4 +20,4 @@ EXPOSE 3000 # Build and start the app # TODO: change this so that the app can replace the environment variables at runtime # without the need to build the app every time -ENTRYPOINT ["npm", "run", "prod"] +ENTRYPOINT ["npm", "run", "build:preview"] diff --git a/app/package.json b/app/package.json index c63c4fd..61a4249 100644 --- a/app/package.json +++ b/app/package.json @@ -8,7 +8,7 @@ "build": "tsc -b && vite build", "lint": "eslint .", "preview": "vite preview", - "prod": "npm run build && npm run preview" + "build:preview": "npm run build && npm run preview" }, "dependencies": { "@tailwindcss/vite": "^4.0.14", From bd4622eaa0b303436110795afa3648a7dfed943b Mon Sep 17 00:00:00 2001 From: ricomateo Date: Mon, 17 Nov 2025 17:44:09 -0300 Subject: [PATCH 08/15] add github actions workflow scaffolding --- .github/workflows/docker-image.yml | 49 ++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 .github/workflows/docker-image.yml diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml new file mode 100644 index 0000000..da1d7bf --- /dev/null +++ b/.github/workflows/docker-image.yml @@ -0,0 +1,49 @@ +name: Demo Push + +on: + push: + branches: + - main + tags: + - v* + pull_request: + +env: + IMAGE_NAME: ethrex_l2_hub +# +jobs: + # This pushes the image to GitHub Packages. + push: + runs-on: ubuntu-latest + + permissions: + packages: write + contents: read + # + steps: + - uses: actions/checkout@v5 + + - name: Build image + working-directory: ./app + # TODO: add step to compile the contracts using rex + run: docker build . --file Dockerfile --tag $IMAGE_NAME --label "runnumber=${GITHUB_RUN_ID}" + + - name: Log in to registry + run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin + + - name: Push image + run: | + IMAGE_ID=ghcr.io/${{ github.repository_owner }}/$IMAGE_NAME + + # This changes all uppercase characters to lowercase. + IMAGE_ID=$(echo $IMAGE_ID | tr '[A-Z]' '[a-z]') + # This strips the git ref prefix from the version. + VERSION=$(echo "${{ github.ref }}" | sed -e 's,.*/\(.*\),\1,') + # This strips the "v" prefix from the tag name. + [[ "${{ github.ref }}" == "refs/tags/"* ]] && VERSION=$(echo $VERSION | sed -e 's/^v//') + # This uses the Docker `latest` tag convention. + [ "$VERSION" == "main" ] && VERSION=latest + echo IMAGE_ID=$IMAGE_ID + echo VERSION=$VERSION + docker tag $IMAGE_NAME $IMAGE_ID:$VERSION + docker push $IMAGE_ID:$VERSION From bc9c95b0349fc5ff13bab58ea9c9e44ac6052296 Mon Sep 17 00:00:00 2001 From: ricomateo Date: Mon, 17 Nov 2025 18:00:08 -0300 Subject: [PATCH 09/15] change Dockerfile to run npm run dev --- app/Dockerfile | 4 ++-- app/package.json | 2 +- app/vite.config.ts | 4 ++++ 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/app/Dockerfile b/app/Dockerfile index 306a754..2233bd5 100644 --- a/app/Dockerfile +++ b/app/Dockerfile @@ -15,9 +15,9 @@ RUN npm install # Copy the project files into the working directory COPY . . -EXPOSE 3000 +EXPOSE 5173 # Build and start the app # TODO: change this so that the app can replace the environment variables at runtime # without the need to build the app every time -ENTRYPOINT ["npm", "run", "build:preview"] +ENTRYPOINT ["npm", "run", "dev"] diff --git a/app/package.json b/app/package.json index 43bf000..35a4758 100644 --- a/app/package.json +++ b/app/package.json @@ -4,7 +4,7 @@ "version": "0.0.0", "type": "module", "scripts": { - "dev": "vite", + "dev": "vite --host", "build": "tsc -b && vite build", "lint": "eslint .", "preview": "vite preview", diff --git a/app/vite.config.ts b/app/vite.config.ts index da33fa9..8606e5a 100644 --- a/app/vite.config.ts +++ b/app/vite.config.ts @@ -11,5 +11,9 @@ export default defineConfig({ preview: { host: true, port: 3000, + }, + server: { + host: true, + port: 5173 } }) From a7812dcd60f9da82cda7737e9e027489ecf5f443 Mon Sep 17 00:00:00 2001 From: ricomateo Date: Mon, 17 Nov 2025 18:11:44 -0300 Subject: [PATCH 10/15] add step to install rex --- .github/workflows/docker-image.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml index da1d7bf..dc0b299 100644 --- a/.github/workflows/docker-image.yml +++ b/.github/workflows/docker-image.yml @@ -23,6 +23,12 @@ jobs: steps: - uses: actions/checkout@v5 + - name: Install rex + uses: dtolnay/rust-toolchain@stable + run: | + cargo install --locked --git https://github.com/lambdaclass/rex.git --branch add_abi_json_flag + rex --version + - name: Build image working-directory: ./app # TODO: add step to compile the contracts using rex From f85534c03346a5f93ca7b013dcf2d386c6f01a18 Mon Sep 17 00:00:00 2001 From: ricomateo Date: Mon, 17 Nov 2025 18:14:21 -0300 Subject: [PATCH 11/15] fix rex installation step --- .github/workflows/docker-image.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml index dc0b299..4f15f28 100644 --- a/.github/workflows/docker-image.yml +++ b/.github/workflows/docker-image.yml @@ -25,9 +25,7 @@ jobs: - name: Install rex uses: dtolnay/rust-toolchain@stable - run: | - cargo install --locked --git https://github.com/lambdaclass/rex.git --branch add_abi_json_flag - rex --version + run: cargo install --locked --git https://github.com/lambdaclass/rex.git --branch add_abi_json_flag - name: Build image working-directory: ./app From ed22d5f75f22645c94f6d08fd999f179123ca2b2 Mon Sep 17 00:00:00 2001 From: ricomateo Date: Mon, 17 Nov 2025 18:21:01 -0300 Subject: [PATCH 12/15] fix --- .github/workflows/docker-image.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml index 4f15f28..bc1d14e 100644 --- a/.github/workflows/docker-image.yml +++ b/.github/workflows/docker-image.yml @@ -10,7 +10,7 @@ on: env: IMAGE_NAME: ethrex_l2_hub -# + jobs: # This pushes the image to GitHub Packages. push: @@ -22,9 +22,10 @@ jobs: # steps: - uses: actions/checkout@v5 + + - uses: dtolnay/rust-toolchain@stable - name: Install rex - uses: dtolnay/rust-toolchain@stable run: cargo install --locked --git https://github.com/lambdaclass/rex.git --branch add_abi_json_flag - name: Build image From 4178d548229aa6f4c901086baf246cde1b987221 Mon Sep 17 00:00:00 2001 From: ricomateo Date: Mon, 17 Nov 2025 19:08:36 -0300 Subject: [PATCH 13/15] change docker image to read the committed abis --- .github/workflows/docker-image.yml | 6 ------ app/src/utils/token.ts | 4 ++-- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml index bc1d14e..0f774a3 100644 --- a/.github/workflows/docker-image.yml +++ b/.github/workflows/docker-image.yml @@ -19,14 +19,8 @@ jobs: permissions: packages: write contents: read - # steps: - uses: actions/checkout@v5 - - - uses: dtolnay/rust-toolchain@stable - - - name: Install rex - run: cargo install --locked --git https://github.com/lambdaclass/rex.git --branch add_abi_json_flag - name: Build image working-directory: ./app diff --git a/app/src/utils/token.ts b/app/src/utils/token.ts index e86e45d..f31b070 100644 --- a/app/src/utils/token.ts +++ b/app/src/utils/token.ts @@ -3,8 +3,8 @@ import { waitForTransactionReceipt, writeContract, } from "viem/actions"; -import Delegation from "../../../solc_out/Delegation.json"; -import TestToken from "../../../solc_out/TestToken.json"; +import Delegation from "../../abi/Delegation.json"; +import TestToken from "../../abi/TestToken.json"; import { type TransactionReceipt, type Address, From 6ca83f232150a78ac59c979aff76d0e6c264aae0 Mon Sep 17 00:00:00 2001 From: ricomateo Date: Mon, 17 Nov 2025 19:16:29 -0300 Subject: [PATCH 14/15] fix: abi path --- app/src/utils/passkeyAccounts.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/utils/passkeyAccounts.ts b/app/src/utils/passkeyAccounts.ts index 4028bc1..9ba9f9b 100644 --- a/app/src/utils/passkeyAccounts.ts +++ b/app/src/utils/passkeyAccounts.ts @@ -15,7 +15,7 @@ import { waitForTransactionReceipt, writeContract, } from "viem/actions"; -import Delegation from "../../../solc_out/Delegation.json"; +import Delegation from "../../abi/Delegation.json"; export const signUp = async ({ client, From 5e381cb2a82496ca5562745a03944f9b33b01af7 Mon Sep 17 00:00:00 2001 From: ricomateo Date: Mon, 17 Nov 2025 19:36:33 -0300 Subject: [PATCH 15/15] add instructions to run with docker --- README.md | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/README.md b/README.md index 49e584c..fed0d8c 100644 --- a/README.md +++ b/README.md @@ -125,6 +125,37 @@ The app should now be running at `http://localhost:5173` make run-front ``` +## Running with Docker + +Pull the image from the registry with + +```bash +docker pull ghcr.io/lambdaclass/ethrex_l2_hub:merge +``` + +Run the image with + +```bash +docker run --name ethrex_l2_hub -p 5173:5173 --env-file /path/to/.env ghcr.io/lambdaclass/ethrex_l2_hub:merge +``` + +The `.env` file must contain the following environment variables (make sure to replace them with the actual values) + +```.env +VITE_L1_NAME="Ethrex L1 Local" +VITE_L1_RPC_URL=http://host.docker.internal:8545 +VITE_L1_CHAIN_ID=9 +VITE_L1_BRIDGE_ADDRESS=0xebc31Eff9D9f5F63F65A68734816b7De1256845B +VITE_L2_NAME="Ethrex L2 Local" +VITE_L2_RPC_URL=http://host.docker.internal:1729 +VITE_L2_CHAIN_ID=65536999 +VITE_L2_BRIDGE_ADDRESS=0x000000000000000000000000000000000000ffff +VITE_WALLETCONNECT_PROJECT_ID= +VITE_DELEGATION_CONTRACT_ADDRESS=0x00e29d532f1c62a923ee51ee439bfc1500b1ce4d +VITE_TEST_TOKEN_CONTRACT_ADDRESS=0x4b8a3d616d9146d9ec66a33b76d63612eabede02 + +``` + ## Features ### L1 ↔ L2 Bridge