UNPKG

@settlemint/solidity-zeto

Version:

Smart contract set to build Zero Knowledge tokens in SettleMint

1 lines 142 kB
{"abi":[{"type":"function","name":"UPGRADE_INTERFACE_VERSION","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"__ZetoFungible_init","inputs":[{"name":"_depositVerifier","type":"address","internalType":"contract Groth16Verifier_CheckHashesValue"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"_deposit","inputs":[{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"utxo","type":"uint256","internalType":"uint256"},{"name":"proof","type":"tuple","internalType":"struct Commonlib.Proof","components":[{"name":"pA","type":"uint256[2]","internalType":"uint256[2]"},{"name":"pB","type":"uint256[2][2]","internalType":"uint256[2][2]"},{"name":"pC","type":"uint256[2]","internalType":"uint256[2]"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"_withdrawWithNullifiers","inputs":[{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"nullifiers","type":"uint256[]","internalType":"uint256[]"},{"name":"output","type":"uint256","internalType":"uint256"},{"name":"root","type":"uint256","internalType":"uint256"},{"name":"proof","type":"tuple","internalType":"struct Commonlib.Proof","components":[{"name":"pA","type":"uint256[2]","internalType":"uint256[2]"},{"name":"pB","type":"uint256[2][2]","internalType":"uint256[2][2]"},{"name":"pC","type":"uint256[2]","internalType":"uint256[2]"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"deposit","inputs":[{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"utxo","type":"uint256","internalType":"uint256"},{"name":"proof","type":"tuple","internalType":"struct Commonlib.Proof","components":[{"name":"pA","type":"uint256[2]","internalType":"uint256[2]"},{"name":"pB","type":"uint256[2][2]","internalType":"uint256[2][2]"},{"name":"pC","type":"uint256[2]","internalType":"uint256[2]"}]},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"getIdentitiesRoot","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getRoot","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"initialOwner","type":"address","internalType":"address"},{"name":"_verifier","type":"address","internalType":"contract Groth16Verifier_AnonNullifierKyc"},{"name":"_depositVerifier","type":"address","internalType":"contract Groth16Verifier_CheckHashesValue"},{"name":"_withdrawVerifier","type":"address","internalType":"contract Groth16Verifier_CheckNullifierValue"},{"name":"_batchVerifier","type":"address","internalType":"contract Groth16Verifier_AnonNullifierKycBatch"},{"name":"_batchWithdrawVerifier","type":"address","internalType":"contract Groth16Verifier_CheckNullifierValueBatch"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"isRegistered","inputs":[{"name":"publicKey","type":"uint256[2]","internalType":"uint256[2]"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"lockProof","inputs":[{"name":"proof","type":"tuple","internalType":"struct Commonlib.Proof","components":[{"name":"pA","type":"uint256[2]","internalType":"uint256[2]"},{"name":"pB","type":"uint256[2][2]","internalType":"uint256[2][2]"},{"name":"pC","type":"uint256[2]","internalType":"uint256[2]"}]},{"name":"delegate","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"mint","inputs":[{"name":"utxos","type":"uint256[]","internalType":"uint256[]"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"proxiableUUID","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"register","inputs":[{"name":"publicKey","type":"uint256[2]","internalType":"uint256[2]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setERC20","inputs":[{"name":"_erc20","type":"address","internalType":"contract IERC20"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"transfer","inputs":[{"name":"nullifiers","type":"uint256[]","internalType":"uint256[]"},{"name":"outputs","type":"uint256[]","internalType":"uint256[]"},{"name":"root","type":"uint256","internalType":"uint256"},{"name":"proof","type":"tuple","internalType":"struct Commonlib.Proof","components":[{"name":"pA","type":"uint256[2]","internalType":"uint256[2]"},{"name":"pB","type":"uint256[2][2]","internalType":"uint256[2][2]"},{"name":"pC","type":"uint256[2]","internalType":"uint256[2]"}]},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"upgradeToAndCall","inputs":[{"name":"newImplementation","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"withdraw","inputs":[{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"nullifiers","type":"uint256[]","internalType":"uint256[]"},{"name":"output","type":"uint256","internalType":"uint256"},{"name":"root","type":"uint256","internalType":"uint256"},{"name":"proof","type":"tuple","internalType":"struct Commonlib.Proof","components":[{"name":"pA","type":"uint256[2]","internalType":"uint256[2]"},{"name":"pB","type":"uint256[2][2]","internalType":"uint256[2][2]"},{"name":"pC","type":"uint256[2]","internalType":"uint256[2]"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"IdentityRegistered","inputs":[{"name":"publicKey","type":"uint256[2]","indexed":false,"internalType":"uint256[2]"}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"UTXOMint","inputs":[{"name":"outputs","type":"uint256[]","indexed":false,"internalType":"uint256[]"},{"name":"submitter","type":"address","indexed":true,"internalType":"address"},{"name":"data","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"UTXOTransfer","inputs":[{"name":"inputs","type":"uint256[]","indexed":false,"internalType":"uint256[]"},{"name":"outputs","type":"uint256[]","indexed":false,"internalType":"uint256[]"},{"name":"submitter","type":"address","indexed":true,"internalType":"address"},{"name":"data","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"Upgraded","inputs":[{"name":"implementation","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"error","name":"AddressEmptyCode","inputs":[{"name":"target","type":"address","internalType":"address"}]},{"type":"error","name":"AlreadyRegistered","inputs":[{"name":"","type":"uint256[2]","internalType":"uint256[2]"}]},{"type":"error","name":"ERC1967InvalidImplementation","inputs":[{"name":"implementation","type":"address","internalType":"address"}]},{"type":"error","name":"ERC1967NonPayable","inputs":[]},{"type":"error","name":"FailedCall","inputs":[]},{"type":"error","name":"IdentityNotRegistered","inputs":[{"name":"addr","type":"address","internalType":"address"}]},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"NotInitializing","inputs":[]},{"type":"error","name":"OwnableInvalidOwner","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"OwnableUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"}]},{"type":"error","name":"UTXOAlreadyOwned","inputs":[{"name":"utxo","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"UTXOAlreadySpent","inputs":[{"name":"utxo","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"UTXOArrayTooLarge","inputs":[{"name":"maxAllowed","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"UTXODuplicate","inputs":[{"name":"utxo","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"UTXONotMinted","inputs":[{"name":"utxo","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"UTXORootNotFound","inputs":[{"name":"root","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"UUPSUnauthorizedCallContext","inputs":[]},{"type":"error","name":"UUPSUnsupportedProxiableUUID","inputs":[{"name":"slot","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"WithdrawArrayTooLarge","inputs":[{"name":"maxAllowed","type":"uint256","internalType":"uint256"}]}],"bytecode":{"object":"0x60a0806040523460295730608052613454908161002e8239608051818181610a0501526119d20152f35b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c8063092a18bc1461015457806312c0fed21461014f57806322414cf31461014a5780632e6ea994146101455780633442af5c146101405780634f1ef2861461013b57806352d1902d146101365780635ca1e16514610131578063715018a61461012c57806373295241146101275780638bb2513b146101225780638da5cb5b1461011d5780639b2e8b52146101185780639e2a7194146101135780639fcc50af1461010e578063ad3cb1cc14610109578063c29a6fda14610104578063cc2a9a5b146100ff578063f2fde38b146100fa5763f756356a146100f5575f80fd5b6111f9565b6111cc565b610f2b565b610ec3565b610e4d565b610de5565b610dcb565b610d44565b610cf2565b610c8f565b610c3c565b610b18565b610a7d565b6109de565b610963565b6107a1565b61077f565b6106e3565b6104a3565b610210565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f601f19910116810190811067ffffffffffffffff8211176101a957604052565b610159565b906101bc6040519283610186565b565b604060031982011261020c57806023121561020c57604051906101e2604083610186565b819060441161020c576004905b604482106101fc57505090565b81358152602091820191016101ef565b5f80fd5b3461020c576102566020610223366101be565b604051809381927f29a5f2f600000000000000000000000000000000000000000000000000000000835260048301612316565b038173__$0b40bab74903eb2328320c00ca3daa3e88$__5af49081156103c2576102d1916020915f916103f6575b5061028f60606101ae565b908082528282015260016040820152604051809381927f25cc70e800000000000000000000000000000000000000000000000000000000835260048301612343565b038173__$abc2523fb3bac9ceee4baf18a48b86000d$__5af49081156103c25761033f9160a0915f916103c7575b50604051809381927fe170cf6e00000000000000000000000000000000000000000000000000000000835260048301919060206040840193603881520152565b038173__$a9045d4c56ee07180ebebc7f688ffab42f$__5af480156103c25761038f915f91610393575b505161037481611290565b61037d81611290565b60405190151581529081906020820190565b0390f35b6103b5915060a03d60a0116103bb575b6103ad8183610186565b810190611223565b5f610369565b503d6103a3565b611285565b6103e9915060203d6020116103ef575b6103e18183610186565b810190611936565b5f6102ff565b503d6103d7565b61040d9150823d84116103ef576103e18183610186565b5f610284565b60031961010091011261020c57600490565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c61010091011261020c57606490565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbc61010091011261020c57604490565b73ffffffffffffffffffffffffffffffffffffffff81160361020c57565b3461020c5761012060031936011261020c576106076104c136610413565b6105c761010435916104d283610485565b61053960c06104e26101006101ae565b833581529260208101356020850152610525610518604083018035604088015261050c8160200190565b35606088015260400190565b8035608087015260200190565b3560a085015201803560c084015260200190565b3560e082015260405161056281610554602082019485612370565b03601f198101835282610186565b51902073ffffffffffffffffffffffffffffffffffffffff6105a861058e835f525f60205260405f2090565b5473ffffffffffffffffffffffffffffffffffffffff1690565b16158015610609575b6105ba906112c7565b5f525f60205260405f2090565b9073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b005b506105ba61062161058e835f525f60205260405f2090565b73ffffffffffffffffffffffffffffffffffffffff16331490506105b1565b67ffffffffffffffff81116101a95760051b60200190565b9080601f8301121561020c57813561066f81610640565b9261067d6040519485610186565b81845260208085019260051b82010192831161020c57602001905b8282106106a55750505090565b8135815260209182019101610698565b9181601f8401121561020c5782359167ffffffffffffffff831161020c576020838186019501011161020c57565b3461020c5761018060031936011261020c5760043567ffffffffffffffff811161020c57610715903690600401610658565b60243567ffffffffffffffff811161020c57610735903690600401610658565b906044359161074336610425565b91610164359267ffffffffffffffff841161020c5761038f9461076d61037d9536906004016106b5565b949093611680565b5f91031261020c57565b3461020c575f60031936011261020c576020610799611945565b604051908152f35b3461020c576107af366101be565b6107b7612abb565b6107c0816130f1565b9073__$a9045d4c56ee07180ebebc7f688ffab42f$__6040517fe170cf6e00000000000000000000000000000000000000000000000000000000815260a081806108198760048301919060206040840193603881520152565b0381855af49081156103c2575f91610928575b505161083781611290565b61084081611290565b6108f057803b1561020c576040517fc1d29f01000000000000000000000000000000000000000000000000000000008152603860048201526024810184905260448101939093525f90839060649082905af49081156103c2577fa45339511611c62ec2e52472de1a3e6a561aa425af3ba3b39473e928be537edd926108d1926108d6575b5060405191829182612b27565b0390a1005b806108e45f6108ea93610186565b80610775565b5f6108c4565b6040517f7d714ba9000000000000000000000000000000000000000000000000000000008152806109248460048301612b27565b0390fd5b610941915060a03d60a0116103bb576103ad8183610186565b5f61082c565b67ffffffffffffffff81116101a957601f01601f191660200190565b604060031936011261020c5760043561097b81610485565b6024359067ffffffffffffffff821161020c573660238301121561020c578160040135906109a882610947565b916109b66040519384610186565b808352366024828601011161020c576020815f926024610607970183870137840101526119b9565b3461020c575f60031936011261020c5773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163003610a555760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b7fe07c8dba000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461020c575f60031936011261020c576040517f79f971250000000000000000000000000000000000000000000000000000000081526001600482015260208160248173__$a9045d4c56ee07180ebebc7f688ffab42f$__5af480156103c25761038f915f91610af9575b506040519081529081906020820190565b610b12915060203d6020116103ef576103e18183610186565b5f610ae8565b3461020c575f60031936011261020c57610b30612abb565b5f73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300547fffffffffffffffffffffffff000000000000000000000000000000000000000081167f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b61018060031982011261020c576004359160243567ffffffffffffffff811161020c5782610c0491600401610658565b91604435916101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7c60643593011261020c57608490565b3461020c57610607610c8a610c75610c5336610bd4565b92610c6481979596929397516115c1565b9087610c6f83611442565b5261239c565b95908095610c84848984612487565b50611c83565b612986565b3461020c57604060031936011261020c5760043567ffffffffffffffff811161020c57610cc0903690600401610658565b6024359067ffffffffffffffff821161020c57610ce46106079236906004016106b5565b91610ced612abb565b612b5c565b3461020c575f60031936011261020c57602073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b3461020c5761016060031936011261020c57602435600435610d6536610455565b906101443567ffffffffffffffff811161020c578392610d8c610d949236906004016106b5565b94909361220d565b6040805190610da38183610186565b60018252601f1901366020830137805115610dc657610607936020820152612b5c565b611415565b3461020c57610607610ddc36610bd4565b93929092611c83565b3461020c57602060031936011261020c5773ffffffffffffffffffffffffffffffffffffffff600435610e1781610485565b610e1f612e69565b167fffffffffffffffffffffffff000000000000000000000000000000000000000060345416176034555f80f35b3461020c575f60031936011261020c576040805190610e6c8183610186565b6005825260208201917f352e302e300000000000000000000000000000000000000000000000000000008352601f19601f8351948593602085525180918160208701528686015e5f85828601015201168101030190f35b3461020c57602060031936011261020c5773ffffffffffffffffffffffffffffffffffffffff600435610ef581610485565b610efd612abb565b167fffffffffffffffffffffffff000000000000000000000000000000000000000060355416176035555f80f35b3461020c5760c060031936011261020c57600435610f4881610485565b60243590610f5582610485565b604435610f6181610485565b606435610f6d81610485565b60843590610f7a82610485565b60a43592610f8784610485565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549567ffffffffffffffff610fcd60ff60408a901c16159867ffffffffffffffff1690565b16801590816111c4575b60011490816111ba575b1590816111b1575b506111895761106a958761106160017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000007ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b61110e57611f18565b61107057005b6110db7fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29080602081016108d1565b611184680100000000000000007fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b611f18565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050155f610fe9565b303b159150610fe1565b889150610fd7565b3461020c57602060031936011261020c576106076004356111ec81610485565b6111f4612abb565b6120cb565b3461020c5761014060031936011261020c5761060760043560243561121d36610455565b9161220d565b908160a091031261020c576040519060a0820182811067ffffffffffffffff8211176101a957604052805190600382101561020c5760809183526020810151602084015260408101516040840152606081015160608401520151608082015290565b6040513d5f823e3d90fd5b6003111561129a57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b156112ce57565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f6f6620616c7265616479206c6f636b656420627920616e6f746865722060448201527f70617274790000000000000000000000000000000000000000000000000000006064820152fd5b1561135957565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f496e76616c6964207472616e73616374696f6e2070726f706f73616c000000006044820152fd5b604051906101006113c88184610186565b368337565b604051906104006113c88184610186565b604051906113ed60e083610186565b60e0368337565b604051906102e06113c88184610186565b6040908151916113c88184610186565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b805115610dc65760200190565b8051821015610dc65760209160051b010190565b906008811015610dc65760051b0190565b9081602091031261020c5751801515810361020c5790565b905f905b6002821061149d57505050565b6040808281866001953701930191019091611490565b909493926040906114d3610100948361020086019986378385019061148c565b60c0830137015f905b600882106114e957505050565b60208060019285518152019301910190916114dc565b1561150657565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f496e76616c69642070726f6f66000000000000000000000000000000000000006044820152fd5b906020811015610dc65760051b0190565b90949392604090611595610100948361050086019986378385019061148c565b60c0830137015f905b602082106115ab57505050565b602080600192855181520193019101909161159e565b906115cb82610640565b6115d86040519182610186565b828152601f196115e88294610640565b0190602036910137565b90602080835192838152019201905f5b81811061160f5750505090565b8251845260209384019390920191600101611602565b601f8260209493601f1993818652868601375f8582860101520116010190565b929061167d949261166161166f926060875260608701906115f2565b9085820360208701526115f2565b926040818503910152611625565b90565b9061168d9196939661239c565b9590916116a361169e828986612487565b611352565b6002835111801561192b575b15611863576116bf9087846128bc565b906116c86113cd565b915f5b60208110611844575050611757916020916117176116fe606b5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b906040518095819482937f3cc08b2400000000000000000000000000000000000000000000000000000000845260c0810190604081019060048601611575565b03915afa80156103c257611772915f91611815575b506114ff565b61177c8582612986565b61178681516115c1565b9161179186516115c1565b935f5b83518110156117d257806117aa6001928661144f565b516117b5828861144f565b526117c0818a61144f565b516117cb828961144f565b5201611794565b50929461180d9196507fcb56a7130431b68e0e636f24584d40580490c1bf882bef3701f317d47ba98c38949250604051938493339785611645565b0390a2600190565b611837915060203d60201161183d575b61182f8183610186565b810190611474565b5f61176c565b503d611825565b806118516001928461144f565b5161185c8287611564565b52016116cb565b61186e9087846127c6565b906118776113b7565b915f5b6008811061190c5750506118ed916020916118ad6116fe606a5473ffffffffffffffffffffffffffffffffffffffff1690565b906040518095819482937fc9219a7a00000000000000000000000000000000000000000000000000000000845260c08101906040810190600486016114b3565b03915afa80156103c257611907915f9161181557506114ff565b611772565b806119196001928461144f565b516119248287611463565b520161187a565b5060028751116116af565b9081602091031261020c575190565b6040517f79f971250000000000000000000000000000000000000000000000000000000081526038600482015260208160248173__$a9045d4c56ee07180ebebc7f688ffab42f$__5af49081156103c2575f916119a0575090565b61167d915060203d6020116103ef576103e18183610186565b909173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803014908115611b22575b50610a5557611a0a612abb565b604051927f52d1902d00000000000000000000000000000000000000000000000000000000845260208460048173ffffffffffffffffffffffffffffffffffffffff87165afa5f9481611b01575b50611aa0577f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5273ffffffffffffffffffffffffffffffffffffffff831660045260245b5ffd5b90917f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8403611ad4576101bc929350613154565b7faa1d49a4000000000000000000000000000000000000000000000000000000005f52600484905260245ffd5b611b1b91955060203d6020116103ef576103e18183610186565b935f611a58565b905073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541614155f6119fd565b906007811015610dc65760051b0190565b90949392604090611b9561010094836101e086019986378385019061148c565b60c0830137015f905b60078210611bab57505050565b6020806001928551815201930191019091611b9e565b906017811015610dc65760051b0190565b90949392604090611bf261010094836103e086019986378385019061148c565b60c0830137015f905b60178210611c0857505050565b6020806001928551815201930191019091611bfb565b15611c2557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4661696c656420746f207472616e7366657220455243323020746f6b656e73006044820152fd5b9392909160028351115f14611e49576017835111611e1c57611ca59285612db2565b90611cae6113f4565b915f5b60178110611dfd575050611d2491602091611ce46116fe60375473ffffffffffffffffffffffffffffffffffffffff1690565b906040518095819482937fa0c2a19a00000000000000000000000000000000000000000000000000000000845260c0810190604081019060048601611bd2565b03915afa80156103c2575f92611d46611dac926020948691611de657506114ff565b611d686116fe60355473ffffffffffffffffffffffffffffffffffffffff1690565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815233600482015260248101929092529093849283919082906044820190565b03925af180156103c2576101bc915f91611dc7575b50611c1e565b611de0915060203d60201161183d5761182f8183610186565b5f611dc1565b6118379150853d871161183d5761182f8183610186565b80611e0a6001928461144f565b51611e158287611bc1565b5201611cb1565b7f71798fb5000000000000000000000000000000000000000000000000000000005f52601760045260245ffd5b611e539285612cd3565b90611e5c6113de565b915f5b60078110611ef9575050611ed291602091611e926116fe60365473ffffffffffffffffffffffffffffffffffffffff1690565b906040518095819482937fc894e75700000000000000000000000000000000000000000000000000000000845260c0810190604081019060048601611b75565b03915afa80156103c2575f92611ef4611dac926020948691611de657506114ff565b611d46565b80611f066001928461144f565b51611f118287611b64565b5201611e5f565b949291909394611f26612e69565b73__$a9045d4c56ee07180ebebc7f688ffab42f$__803b1561020c57604051917f9e43b8130000000000000000000000000000000000000000000000000000000083525f9260386004820152604060248201525f81604481865af480156103c2576120b4575b50611fb190611f99612e69565b611fa1612e69565b611fa9612e69565b6111f4612e69565b803b156120b05781604491604051928380927f9e43b81300000000000000000000000000000000000000000000000000000000825260016004830152604060248301525af480156103c257612098575b5050612057926101bc95949261201692612ec0565b73ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000606a541617606a55565b73ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000606b541617606b55565b6120a3828092610186565b6120ad5780612001565b80fd5b5080fd5b6120c19193505f90610186565b5f91611fb1611f8c565b73ffffffffffffffffffffffffffffffffffffffff16801561218c5773ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054827fffffffffffffffffffffffff00000000000000000000000000000000000000008216177f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b905f905b600282106121c957505050565b60208060019285518152019301910190916121bc565b60406101bc94612201610100949897958361014086019a86378385019061148c565b60c083013701906121b8565b916122889160209161221d611405565b8581529160208301526122486116fe60345473ffffffffffffffffffffffffffffffffffffffff1690565b906040518095819482937ff5c9d69e00000000000000000000000000000000000000000000000000000000845260c08101906040810190600486016121df565b03915afa80156103c2575f926122aa611dac926020948691611de657506114ff565b6122cc6116fe60355473ffffffffffffffffffffffffffffffffffffffff1690565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101929092529093849283919082906064820190565b919060408301925f905b6002821061232d57505050565b6020806001928551815201930191019091612320565b919060608301925f905b6003821061235a57505050565b602080600192855181520193019101909161234d565b905f825b60088210612386575050506101000190565b6020806001928551815201930191019091612374565b9190918051908351600a8311801561241e575b6123f157600261167d93119081156123e6575b50156123da576123d4600a8092612f6a565b93612f6a565b6123d460028092612f6a565b60029150115f6123c2565b7f9ebbc98e000000000000000000000000000000000000000000000000000000005f52600a60045260245ffd5b50600a81116123af565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820191821161248257565b612428565b9061249491939293612fd3565b5f9291925b835181101561259d576124ac818561144f565b51156125955780151580612570575b6125375760016124ef6124ea6124e36124d4858961144f565b515f52603360205260405f2090565b5460ff1690565b151590565b146124fe576001905b01612499565b61250b611a9d918561144f565b517f41a06d28000000000000000000000000000000000000000000000000000000005f52600452602490565b612544611a9d918561144f565b517fdd574831000000000000000000000000000000000000000000000000000000005f52600452602490565b5061257b818561144f565b5161258e61258883612455565b8661144f565b51146124bb565b6001906124f8565b50915073__$a9045d4c56ee07180ebebc7f688ffab42f$__905f5b83518110156126e8576125cb818561144f565b51156126e057801515806126c1575b6125375761263560a06125f66125f0848861144f565b51613061565b604051809381927fe170cf6e00000000000000000000000000000000000000000000000000000000835260048301919060206040840193600181520152565b0381875af49081156103c2575f916126a3575b505161265381611290565b61265c81611290565b61266a576001905b016125b8565b612677611a9d918561144f565b517f79e1da47000000000000000000000000000000000000000000000000000000005f52600452602490565b6126bb915060a03d81116103bb576103ad8183610186565b5f612648565b506126cc818561144f565b516126d961258883612455565b51146125da565b600190612664565b50929150602060405180927f92f5b06c00000000000000000000000000000000000000000000000000000000825281806127318760048301919060206040840193600181520152565b03915af49081156103c2575f9161277a575b501561274f5750600190565b7f4acd7ab8000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b612793915060203d60201161183d5761182f8183610186565b5f612743565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146124825760010190565b6127d060086115c1565b915f945f5b835181101561280657806127eb6001928661144f565b516127ff6127f88a612799565b998861144f565b52016127d5565b50909361281c61281587612799565b968561144f565b525f5b825181101561286257806128356001928561144f565b5161285b575f965b61285460ff61284b83612799565b9916918761144f565b520161281f565b819661283d565b5092905061286e611945565b61288161287a86612799565b958461144f565b525f5b81518110156128b5578061289a6001928461144f565b516128ae6128a788612799565b978661144f565b5201612884565b5090925050565b6128c660206115c1565b915f945f5b83518110156128f557806128e16001928661144f565b516128ee6127f88a612799565b52016128cb565b50909361290461281587612799565b525f5b8251811015612941578061291d6001928561144f565b5161293a575f965b61293360ff61284b83612799565b5201612907565b8196612925565b5092905061294d611945565b61295961287a86612799565b525f5b81518110156128b557806129726001928461144f565b5161297f6128a788612799565b520161295c565b9190915f5b81518110156129ed57806129a16001928461144f565b516129ad575b0161298b565b6129e86129bd6124d4838661144f565b60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055565b6129a7565b50505f5b8251811015612ab657612a04818461144f565b51612a12575b6001016129f1565b73__$a9045d4c56ee07180ebebc7f688ffab42f$__90612a32818561144f565b51612a3d828661144f565b51833b1561020c576040517fc1d29f010000000000000000000000000000000000000000000000000000000081526001600482015260248101929092526044820152915f90839060649082905af49182156103c257600192612aa2575b509050612a0a565b806108e45f612ab093610186565b5f612a9a565b509050565b73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054163303612afb57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b6040810192916101bc91906121b8565b91612b4e61167d94926040855260408501906115f2565b926020818503910152611625565b9091925f9373__$a9045d4c56ee07180ebebc7f688ffab42f$__945b8351811015612c9657612b8b818561144f565b51908115612c8d57612ba160a06125f684613061565b03818b5af49081156103c2575f91612c6f575b5051612bbf81611290565b612bc881611290565b612c4257863b1561020c576040517fc1d29f01000000000000000000000000000000000000000000000000000000008152600160048201526024810183905260448101929092525f826064818a5af49182156103c257600192612c2e575b505b01612b78565b806108e45f612c3c93610186565b5f612c26565b7f79e1da47000000000000000000000000000000000000000000000000000000005f52600482905260245ffd5b612c87915060a03d81116103bb576103ad8183610186565b5f612bb4565b60019150612c28565b509093507f7ff08e0ca1fce6b202b83128811e4f6ceda54930aa074cd365bf68f95c20ce199192612cce604051928392339684612b37565b0390a2565b9092612cdf60076115c1565b936001918293612cee87611442565b52825f815b612d7c575b5050612d0d612d0685612799565b948761144f565b525f825b612d31575b50505080612d26612d2d92612799565b508361144f565b5290565b8151811015612d7757908282612d4882948461144f565b51612d70575f955b612d6760ff612d5e83612799565b9816918a61144f565b52019091612d11565b8195612d50565b612d16565b8351811015612dad5780612d9183928661144f565b51612da5612d9e89612799565b988b61144f565b520181612cf3565b612cf8565b9092612dbe60176115c1565b936001918293612dcd87611442565b52825f815b612e3a575b5050612de5612d0685612799565b525f825b612dfd5750505080612d26612d2d92612799565b8151811015612d7757908282612e1482948461144f565b51612e33575f955b612e2a60ff612d5e83612799565b52019091612de9565b8195612e1c565b8351811015612e645780612e4f83928661144f565b51612e5c612d9e89612799565b520181612dd2565b612dd7565b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c1615612e9857565b7fd7e6bcf8000000000000000000000000000000000000000000000000000000005f5260045ffd5b73ffffffffffffffffffffffffffffffffffffffff9291838092612ee2612e69565b612eea612e69565b167fffffffffffffffffffffffff00000000000000000000000000000000000000006034541617603455167fffffffffffffffffffffffff00000000000000000000000000000000000000006036541617603655167fffffffffffffffffffffffff00000000000000000000000000000000000000006037541617603755565b9181835114612fcf57612f7c826115c1565b905f5b8451811015612fa75780612f956001928761144f565b51612fa0828661144f565b5201612f7f565b5092919091515b818110612fba57505090565b805f612fc86001938661144f565b5201612fae565b9050565b9190612fdf83516115c1565b90612fea81516115c1565b905f5b855181101561301557806130036001928861144f565b5161300e828761144f565b5201612fed565b5091929093505f5b825181101561304557806130336001928561144f565b5161303e828861144f565b520161301d565b50919050613052816132c9565b5061305c836132c9565b509190565b604051606081019080821067ffffffffffffffff8311176101a9576130c7926020926040528082528282015260016040820152604051809381927f25cc70e800000000000000000000000000000000000000000000000000000000835260048301612343565b038173__$abc2523fb3bac9ceee4baf18a48b86000d$__5af49081156103c2575f916119a0575090565b602061312a91604051809381927f29a5f2f600000000000000000000000000000000000000000000000000000000835260048301612316565b038173__$0b40bab74903eb2328320c00ca3daa3e88$__5af49081156103c2575f916119a0575090565b90813b156132435773ffffffffffffffffffffffffffffffffffffffff8216807fffffffffffffffffffffffff00000000000000000000000000000000000000007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a28051156132125761320f91613285565b50565b50503461321b57565b7fb398979f000000000000000000000000000000000000000000000000000000005f5260045ffd5b73ffffffffffffffffffffffffffffffffffffffff827f4c9c8ce3000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b5f8061167d93602081519101845af43d156132c1573d916132a583610947565b926132b36040519485610186565b83523d5f602085013e6132e1565b6060916132e1565b61167d60016020835160051b8401016020840161337a565b9061331e57508051156132f657805190602001fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580613371575b61332f575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b15613327565b91906040838203106134195782519282818095602084015b8581106133b857505082518151845281526133ac9261337a565b60206101bc930161337a565b915091508051856001146133f3577f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffd5b8211613406575b60200184918691613392565b60209095018051865182528652946133fa565b50505056fea2646970667358221220234db7e5758827970dc59dc22d3304383ffda466fe9ff0616c3b8371b421704964736f6c634300081b0033","sourceMap":"2627:6384:42:-:0;;;;;;;1171:4:70;1163:13;;2627:6384:42;;;;;;1163:13:70;2627:6384:42;;;;;;;;;;;;;;","linkReferences":{"node_modules/@iden3/contracts/lib/Poseidon.sol":{"PoseidonUnit2L":[{"start":648,"length":20},{"start":12636,"length":20}],"PoseidonUnit3L":[{"start":771,"length":20},{"start":12537,"length":20}]},"node_modules/@iden3/contracts/lib/SmtLib.sol":{"SmtLib":[{"start":881,"length":20},{"start":2033,"length":20},{"start":2800,"length":20},{"start":6568,"length":20},{"start":8022,"length":20},{"start":9680,"length":20},{"start":10818,"length":20},{"start":11153,"length":20}]}}},"deployedBytecode":{"object":"0x60806040526004361015610011575f80fd5b5f3560e01c8063092a18bc1461015457806312c0fed21461014f57806322414cf31461014a5780632e6ea994146101455780633442af5c146101405780634f1ef2861461013b57806352d1902d146101365780635ca1e16514610131578063715018a61461012c57806373295241146101275780638bb2513b146101225780638da5cb5b1461011d5780639b2e8b52146101185780639e2a7194146101135780639fcc50af1461010e578063ad3cb1cc14610109578063c29a6fda14610104578063cc2a9a5b146100ff578063f2fde38b146100fa5763f756356a146100f5575f80fd5b6111f9565b6111cc565b610f2b565b610ec3565b610e4d565b610de5565b610dcb565b610d44565b610cf2565b610c8f565b610c3c565b610b18565b610a7d565b6109de565b610963565b6107a1565b61077f565b6106e3565b6104a3565b610210565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f601f19910116810190811067ffffffffffffffff8211176101a957604052565b610159565b906101bc6040519283610186565b565b604060031982011261020c57806023121561020c57604051906101e2604083610186565b819060441161020c576004905b604482106101fc57505090565b81358152602091820191016101ef565b5f80fd5b3461020c576102566020610223366101be565b604051809381927f29a5f2f600000000000000000000000000000000000000000000000000000000835260048301612316565b038173__$0b40bab74903eb2328320c00ca3daa3e88$__5af49081156103c2576102d1916020915f916103f6575b5061028f60606101ae565b908082528282015260016040820152604051809381927f25cc70e800000000000000000000000000000000000000000000000000000000835260048301612343565b038173__$abc2523fb3bac9ceee4baf18a48b86000d$__5af49081156103c25761033f9160a0915f916103c7575b50604051809381927fe170cf6e00000000000000000000000000000000000000000000000000000000835260048301919060206040840193603881520152565b038173__$a9045d4c56ee07180ebebc7f688ffab42f$__5af480156103c25761038f915f91610393575b505161037481611290565b61037d81611290565b60405190151581529081906020820190565b0390f35b6103b5915060a03d60a0116103bb575b6103ad8183610186565b810190611223565b5f610369565b503d6103a3565b611285565b6103e9915060203d6020116103ef575b6103e18183610186565b810190611936565b5f6102ff565b503d6103d7565b61040d9150823d84116103ef576103e18183610186565b5f610284565b60031961010091011261020c57600490565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c61010091011261020c57606490565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbc61010091011261020c57604490565b73ffffffffffffffffffffffffffffffffffffffff81160361020c57565b3461020c5761012060031936011261020c576106076104c136610413565b6105c761010435916104d283610485565b61053960c06104e26101006101ae565b833581529260208101356020850152610525610518604083018035604088015261050c8160200190565b35606088015260400190565b8035608087015260200190565b3560a085015201803560c084015260200190565b3560e082015260405161056281610554602082019485612370565b03601f198101835282610186565b51902073ffffffffffffffffffffffffffffffffffffffff6105a861058e835f525f60205260405f2090565b5473ffffffffffffffffffffffffffffffffffffffff1690565b16158015610609575b6105ba906112c7565b5f525f60205260405f2090565b9073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b005b506105ba61062161058e835f525f60205260405f2090565b73ffffffffffffffffffffffffffffffffffffffff16331490506105b1565b67ffffffffffffffff81116101a95760051b60200190565b9080601f8301121561020c57813561066f81610640565b9261067d6040519485610186565b81845260208085019260051b82010192831161020c57602001905b8282106106a55750505090565b8135815260209182019101610698565b9181601f8401121561020c5782359167ffffffffffffffff831161020c576020838186019501011161020c57565b3461020c5761018060031936011261020c5760043567ffffffffffffffff811161020c57610715903690600401610658565b60243567ffffffffffffffff811161020c57610735903690600401610658565b906044359161074336610425565b91610164359267ffffffffffffffff841161020c5761038f9461076d61037d9536906004016106b5565b949093611680565b5f91031261020c57565b3461020c575f60031936011261020c576020610799611945565b604051908152f35b3461020c576107af366101be565b6107b7612abb565b6107c0816130f1565b9073__$a9045d4c56ee07180ebebc7f688ffab42f$__6040517fe170cf6e00000000000000000000000000000000000000000000000000000000815260a081806108198760048301919060206040840193603881520152565b0381855af49081156103c2575f91610928575b505161083781611290565b61084081611290565b6108f057803b1561020c576040517fc1d29f01000000000000000000000000000000000000000000000000000000008152603860048201526024810184905260448101939093525f90839060649082905af49081156103c2577fa45339511611c62ec2e52472de1a3e6a561aa425af3ba3b39473e928be537edd926108d1926108d6575b5060405191829182612b27565b0390a1005b806108e45f6108ea93610186565b80610775565b5f6108c4565b6040517f7d714ba9000000000000000000000000000000000000000000000000000000008152806109248460048301612b27565b0390fd5b610941915060a03d60a0116103bb576103ad8183610186565b5f61082c565b67ffffffffffffffff81116101a957601f01601f191660200190565b604060031936011261020c5760043561097b81610485565b6024359067ffffffffffffffff821161020c573660238301121561020c578160040135906109a882610947565b916109b66040519384610186565b808352366024828601011161020c576020815f926024610607970183870137840101526119b9565b3461020c575f60031936011261020c5773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163003610a555760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b7fe07c8dba000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461020c575f60031936011261020c576040517f79f971250000000000000000000000000000000000000000000000000000000081526001600482015260208160248173__$a9045d4c56ee07180ebebc7f688ffab42f$__5af480156103c25761038f915f91610af9575b506040519081529081906020820190565b610b12915060203d6020116103ef576103e18183610186565b5f610ae8565b3461020c575f60031936011261020c57610b30612abb565b5f73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300547fffffffffffffffffffffffff000000000000000000000000000000000000000081167f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b61018060031982011261020c576004359160243567ffffffffffffffff811161020c5782610c0491600401610658565b91604435916101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7c60643593011261020c57608490565b3461020c57610607610c8a610c75610c5336610bd4565b92610c6481979596929397516115c1565b9087610c6f83611442565b5261239c565b95908095610c84848984612487565b50611c83565b612986565b3461020c57604060031936011261020c5760043567ffffffffffffffff811161020c57610cc0903690600401610658565b6024359067ffffffffffffffff821161020c57610ce46106079236906004016106b5565b91610ced612abb565b612b5c565b3461020c575f60031936011261020c57602073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b3461020c5761016060031936011261020c57602435600435610d6536610455565b906101443567ffffffffffffffff811161020c578392610d8c610d949236906004016106b5565b94909361220d565b6040805190610da38183610186565b60018252601f1901366020830137805115610dc657610607936020820152612b5c565b611415565b3461020c57610607610ddc36610bd4565b93929092611c83565b3461020c57602060031936011261020c5773ffffffffffffffffffffffffffffffffffffffff600435610e1781610485565b610e1f612e69565b167fffffffffffffffffffffffff000000000000000000000000000000000000000060345416176034555f80f35b3461020c575f60031936011261020c576040805190610e6c8183610186565b6005825260208201917f352e302e300000000000000000000000000000000000000000000000000000008352601f19601f8351948593602085525180918160208701528686015e5f85828601015201168101030190f35b3461020c57602060031936011261020c5773ffffffffffffffffffffffffffffffffffffffff600435610ef581610485565b610efd612abb565b167fffffffffffffffffffffffff000000000000000000000000000000000000000060355416176035555f80f35b3461020c5760c060031936011261020c57600435610f4881610485565b60243590610f5582610485565b604435610f6181610485565b606435610f6d81610485565b60843590610f7a82610485565b60a43592610f8784610485565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549567ffffffffffffffff610fcd60ff60408a901c16159867ffffffffffffffff1690565b16801590816111c4575b60011490816111ba575b1590816111b1575b506111895761106a958761106160017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000007ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b61110e57611f18565b61107057005b6110db7fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29080602081016108d1565b611184680100000000000000007fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b611f18565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050155f610fe9565b303b159150610fe1565b889150610fd7565b3461020c57602060031936011261020c576106076004356111ec81610485565b6111f4612abb565b6120cb565b3461020c5761014060031936011261020c5761060760043560243561121d36610455565b9161220d565b908160a091031261020c576040519060a0820182811067ffffffffffffffff8211176101a957604052805190600382101561020c5760809183526020810151602084015260408101516040840152606081015160608401520151608082015290565b6040513d5f823e3d90fd5b6003111561129a57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b156112ce57565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f6f6620616c7265616479206c6f636b656420627920616e6f746865722060448201527f70617274790000000000000000000000000000000000000000000000000000006064820152fd5b1561135957565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f496e76616c6964207472616e73616374696f6e2070726f706f73616c000000006044820152fd5b604051906101006113c88184610186565b368337565b604051906104006113c88184610186565b604051906113ed60e083610186565b60e0368337565b604051906102e06113c88184610186565b6040908151916113c88184610186565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b805115610dc65760200190565b8051821015610dc65760209160051b010190565b906008811015610dc65760051b0190565b9081602091031261020c5751801515810361020c5790565b905f905b6002821061149d57505050565b6040808281866001953701930191019091611490565b909493926040906114d3610100948361020086019986378385019061148c565b60c0830137015f905b600882106114e957505050565b60208060019285518152019301910190916114dc565b1561150657565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f496e76616c69642070726f6f66000000000000000000000000000000000000006044820152fd5b906020811015610dc65760051b0190565b90949392604090611595610100948361050086019986378385019061148c565b60c0830137015f905b602082106115ab57505050565b602080600192855181520193019101909161159e565b906115cb82610640565b6115d86040519182610186565b828152601f196115e88294610640565b0190602036910137565b90602080835192838152019201905f5b81811061160f5750505090565b8251845260209384019390920191600101611602565b601f8260209493601f1993818652868601375f8582860101520116010190565b929061167d949261166161166f926060875260608701906115f2565b9085820360208701526115f2565b926040818503910152611625565b90565b9061168d9196939661239c565b9590916116a361169e828986612487565b611352565b6002835111801561192b575b15611863576116bf9087846128bc565b906116c86113cd565b915f5b60208110611844575050611757916020916117176116fe606b5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b906040518095819482937f3cc08b2400000000000000000000000000000000000000000000000000000000845260c0810190604081019060048601611575565b03915afa80156103c257611772915f91611815575b506114ff565b61177c8582612986565b61178681516115c1565b9161179186516115c1565b935f5b83518110156117d257806117aa6001928661144f565b516117b5828861144f565b526117c0818a61144f565b516117cb828961144f565b5201611794565b50929461180d9196507fcb56a7130431b68e0e636f24584d40580490c1bf882bef3701f317d47ba98c38949250604051938493339785611645565b0390a2600190565b611837915060203d60201161183d575b61182f8183610186565b810190611474565b5f61176c565b503d611825565b806118516001928461144f565b5161185c8287611564565b52016116cb565b61186e9087846127c6565b906118776113b7565b915f5b6008811061190c5750506118ed916020916118ad6116fe606a5473ffffffffffffffffffffffffffffffffffffffff1690565b906040518095819482937fc9219a7a00000000000000000000000000000000000000000000000000000000845260c08101906040810190600486016114b3565b03915afa80156103c257611907915f9161181557506114ff565b611772565b806119196001928461144f565b516119248287611463565b520161187a565b5060028751116116af565b908160209103