[ { "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "AlreadyInitialized", "type": "error" }, { "inputs": [], "name": "BlockError", "type": "error" }, { "inputs": [], "name": "DelegationError", "type": "error" }, { "inputs": [], "name": "NewOwnerIsZeroAddress", "type": "error" }, { "inputs": [], "name": "NoHandoverRequest", "type": "error" }, { "inputs": [], "name": "NonContractError", "type": "error" }, { "inputs": [], "name": "NotbHermes", "type": "error" }, { "inputs": [], "name": "Unauthorized", "type": "error" }, { "inputs": [], "name": "UndelegationVoteError", "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": "amount", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "bool", "name": "canContractExceedMaxDelegates", "type": "bool" } ], "name": "CanContractExceedMaxDelegatesUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "delegator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "fromDelegate", "type": "address" }, { "indexed": true, "internalType": "address", "name": "toDelegate", "type": "address" } ], "name": "DelegateChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "delegate", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "previousBalance", "type": "uint256" }, { "indexed": true, "internalType": "uint256", "name": "newBalance", "type": "uint256" } ], "name": "DelegateVotesChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "delegator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "delegate", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Delegation", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "oldMaxDelegates", "type": "uint256" }, { "indexed": true, "internalType": "uint256", "name": "newMaxDelegates", "type": "uint256" } ], "name": "MaxDelegatesUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "pendingOwner", "type": "address" } ], "name": "OwnershipHandoverCanceled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "pendingOwner", "type": "address" } ], "name": "OwnershipHandoverRequested", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "oldOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "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": "amount", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "delegator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "delegate", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Undelegation", "type": "event" }, { "inputs": [], "name": "DELEGATION_AMOUNT_TYPEHASH", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DELEGATION_TYPEHASH", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DOMAIN_SEPARATOR", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "bHermes", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "contractAddress", "type": "address" } ], "name": "canContractExceedMaxDelegates", "outputs": [ { "internalType": "bool", "name": "canExceedMaxGauges", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "cancelOwnershipHandover", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint32", "name": "pos", "type": "uint32" } ], "name": "checkpoints", "outputs": [ { "components": [ { "internalType": "uint32", "name": "fromBlock", "type": "uint32" }, { "internalType": "uint224", "name": "votes", "type": "uint224" } ], "internalType": "struct IERC20MultiVotes.Checkpoint", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "pendingOwner", "type": "address" } ], "name": "completeOwnershipHandover", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newDelegatee", "type": "address" } ], "name": "delegate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "delegatee", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "nonce", "type": "uint256" }, { "internalType": "uint256", "name": "expiry", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "delegateAmountBySig", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "delegatee", "type": "address" }, { "internalType": "uint256", "name": "nonce", "type": "uint256" }, { "internalType": "uint256", "name": "expiry", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "delegateBySig", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "delegator", "type": "address" } ], "name": "delegateCount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "delegator", "type": "address" } ], "name": "delegates", "outputs": [ { "internalType": "address[]", "name": "", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "delegator", "type": "address" }, { "internalType": "address", "name": "delegatee", "type": "address" } ], "name": "delegatesVotesCount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "freeVotes", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "blockNumber", "type": "uint256" } ], "name": "getPriorVotes", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "getVotes", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "delegatee", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "incrementDelegation", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "maxDelegates", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "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": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "nonces", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "numCheckpoints", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "result", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "pendingOwner", "type": "address" } ], "name": "ownershipHandoverExpiresAt", "outputs": [ { "internalType": "uint256", "name": "result", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "permit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "requestOwnershipHandover", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "bool", "name": "canExceedMax", "type": "bool" } ], "name": "setContractExceedMaxDelegates", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newMax", "type": "uint256" } ], "name": "setMaxDelegates", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "delegatee", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "undelegate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "userDelegatedVotes", "outputs": [ { "internalType": "uint256", "name": "votes", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "userUnusedVotes", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" } ]
61010060409080825234620004a65780620036828038038091620000248285620004c7565b8339602092839181010312620004a657516001600160a01b0381169190829003620004a6578251926200005784620004ab565b60118452704275726e744865726d657320566f74657360781b828501528051916200008283620004ab565b6009835268312422a926a2a996ab60b91b8184015284516001600160401b0395909390868511620004905760009480620000bd8754620004eb565b92601f938481116200043f575b508590848311600114620003d7578892620003cb575b50508160011b916000199060031b1c19161785555b815190878211620003b7578190600193620001118554620004eb565b82811162000362575b5085918311600114620002fe578792620002f2575b5050600019600383901b1c191690821b1781555b60126080524660a052825184549181866200015e85620004eb565b9283835286830195878282169182600014620002d257505060011462000292575b506200018e92500382620004c7565b519020918051918201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608301524660808301523060a083015260a0825260c0820195828710908711176200027e5785905251902060c05281638b78c6d819557f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a33360e052613159908162000529823960805181611817015260a05181611ef7015260c05181611f1e015260e05181818161029c01528181610def015261172d0152f35b634e487b7160e01b84526041600452602484fd5b8691508880528189209089915b858310620002b95750506200018e9350820101386200017f565b805483880185015286945088939092019181016200029f565b60ff191688526200018e95151560051b85010192503891506200017f9050565b0151905038806200012f565b8488528588208594509190601f198416895b888282106200034b575050841162000331575b505050811b01815562000143565b015160001960f88460031b161c1916905538808062000323565b838501518655889790950194938401930162000310565b909192508488528588208380860160051c820192888710620003ad575b91869588929594930160051c01915b8281106200039e5750506200011a565b8a81558695508791016200038e565b925081926200037f565b634e487b7160e01b86526041600452602486fd5b015190503880620000e0565b8880528689209250601f198416895b88828210620004285750509084600195949392106200040e575b505050811b018555620000f5565b015160001960f88460031b161c1916905538808062000400565b6001859682939686015181550195019301620003e6565b9091508780528588208480850160051c82019288861062000486575b9085949392910160051c01905b818110620004775750620000ca565b89815584935060010162000468565b925081926200045b565b634e487b7160e01b600052604160045260246000fd5b600080fd5b604081019081106001600160401b038211176200049057604052565b601f909101601f19168101906001600160401b038211908210176200049057604052565b90600182811c921680156200051d575b60208310146200050757565b634e487b7160e01b600052602260045260246000fd5b91607f1691620004fb56fe608060408181526004918236101561001657600080fd5b600092833560e01c91826306fdde0314611c3a5750816307f6365814611bc6578163095ea7b314611b2b57816318160ddd14611aee578163189aa7bf14611a8c578163239cbb811461198a57816323b872dd1461193a57816325692962146118d15781632641fe2114611878578163289c26f71461183b578163313ce567146117df5781633644e515146117a457816340c10f19146116d75781634d99dd161461169357816354d1f13d1461162f578163587cde1e1461155c5781635c19a95c1461151b5781636b578185146114b35781636fcfff451461144357816370a08231146113e1578163715018a6146113625781637757dc5814611300578163782d6fe1146111325781637c7b78e1146110ee5781637ecebe001461108c5781638da5cb5b1461101a578163951e26ec14610fb357816395d89b4114610e985781639ab24eb014610cf45781639dc29fac14610d99578163a9059cbb14610d3f578163af959b0514610cf4578163c3cda52014610ae7578163d505accf146107da578163dd62ed3e14610762578163e7a324dc14610709578163f04e283e14610643578163f1127ed814610571578163f14b34a61461052a578163f2fde38b1461047657508063f870efb4146102c0578063fa7e38da146102525763fee81cf4146101fe57600080fd5b3461024e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024e57602091610238611e5f565b9063389a75e1600c525281600c20549051908152f35b5080fd5b503461024e57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024e576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461024e5760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024e576102f8611e5f565b60243590604435926064359360208661030f611eaa565b61031b8842111561305c565b610323611ef2565b6103d06103fc8751868101907f4e5bad79d7a0440fb72ccd68e0066fd311c89b4798247673e10a7539f77a95d4825273ffffffffffffffffffffffffffffffffffffffff9c8d8c168b8301528c606083015289608083015260a082015260a0815261038d81611d9c565b5190208851928391888301958690916042927f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282611db8565b519020855190815260ff91909116602082015260a435604082015260c435606082015281805260809060015afa1561046c5761045790865195861692838852600560205287209081549161044f83612df1565b9055146130e7565b1561046857610465926123ab565b80f35b8380fd5b81513d87823e3d90fd5b839060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024e576104aa611e5f565b906104b3611eba565b8160601b1561051f575073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739278181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b50503461024e577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261056e57610465610564611e5f565b60243590336123ab565b80fd5b82843461056e57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261056e576105a9611e5f565b63ffffffff9160243591838316830361024e5791848273ffffffffffffffffffffffffffffffffffffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff95610616956020855161060381611d51565b8281520152168152600660205220612095565b5091602084519361062685611d51565b5491821693848152019060201c8152835192835251166020820152f35b8360207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261056e57610676611e5f565b61067e611eba565b63389a75e1600c528082526020600c2092835442116106fe57508173ffffffffffffffffffffffffffffffffffffffff929355167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739278181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188352601cfd5b50503461024e57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024e57602090517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf8152f35b9050346107d657817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126107d657602092829161079f611e5f565b6107a7611e87565b9173ffffffffffffffffffffffffffffffffffffffff8092168452865283832091168252845220549051908152f35b8280fd5b83833461024e5760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024e57610813611e5f565b61081b611e87565b6044356064359361082a611eaa565b93428610610a8a5761083a611ef2565b9473ffffffffffffffffffffffffffffffffffffffff8092169586895260209560058752848a209889549960018b01905585519085898301937f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c985528b89850152169a8b606084015288608084015260a083015260c082015260c0815260e081019181831067ffffffffffffffff841117610a5e579161096e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff208d95936109418c9896858c52825190206101008301968790916042927f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00810184520182611db8565b519020855190815260ff91909116602082015260a435604082015260c435606082015281805260809060015afa15610a54578651169687151580610a4b575b156109f05786977f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259596975283528087208688528352818188205551908152a380f35b8360649251917f08c379a0000000000000000000000000000000000000000000000000000000008352820152600e60248201527f494e56414c49445f5349474e45520000000000000000000000000000000000006044820152fd5b508488146109ad565b81513d88823e3d90fd5b60248c60418f7f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b60648860208451917f08c379a0000000000000000000000000000000000000000000000000000000008352820152601760248201527f5045524d49545f444541444c494e455f455850495245440000000000000000006044820152fd5b919050346107d65760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126107d657610b21611e5f565b90602435604435936064359060ff82168203610cf057610b438642111561305c565b610b4b611ef2565b908451602081017fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf815273ffffffffffffffffffffffffffffffffffffffff988989168884015286606084015260808301526080825260a082019282841067ffffffffffffffff851117610cc4575091610c597fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff608b9593610c2c60209896858c528251902060c08301968790916042927f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff40810184520182611db8565b519020855190815260ff919091166020820152608435604082015260a435606082015281805260809060015afa15610cba57610cac90855194851692838752600560205286209081549161044f83612df1565b156107d6576104659161225e565b81513d86823e3d90fd5b8a60416024927f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b8680fd5b50503461024e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024e57602090610d38610d33611e5f565b612177565b9051908152f35b50503461024e57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024e57602090610d90610d7d611e5f565b60243590610d8b8233612e1e565b612c81565b90519015158152f35b9050346107d657817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126107d657610dd1611e5f565b906024359173ffffffffffffffffffffffffffffffffffffffff91827f0000000000000000000000000000000000000000000000000000000000000000163303610e715750827fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9282610e48889796602095612e1e565b169384865260038352808620610e5f838254612100565b9055816002540360025551908152a380f35b84517f4d316367000000000000000000000000000000000000000000000000000000008152fd5b50503461024e57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024e57805190826001805491610eda83611cfe565b80865292828116908115610f6d5750600114610f11575b505050610f0382610f0d940383611db8565b5191829182611df9565b0390f35b94508085527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf65b828610610f5557505050610f03826020610f0d9582010194610ef1565b80546020878701810191909152909501948101610f38565b610f0d975086935060209250610f039491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001682840152151560051b82010194610ef1565b50503461024e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024e5760ff8160209373ffffffffffffffffffffffffffffffffffffffff611007611e5f565b1681526008855220541690519015158152f35b50503461024e57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024e5760209073ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff7487392754915191168152f35b50503461024e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024e578060209273ffffffffffffffffffffffffffffffffffffffff6110de611e5f565b1681526005845220549051908152f35b50503461024e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024e57602090610d3861112d611e5f565b61213c565b9050346107d657817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126107d65761116a611e5f565b906024803592438410156112d85773ffffffffffffffffffffffffffffffffffffffff16855260066020528385209182549386905b858210611267575050836111da57505050507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff602092915b5191168152f35b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84969293940195861161123e575050506112346020937bffffffffffffffffffffffffffffffffffffffffffffffffffffffff92612095565b5054831c916111d3565b6011907f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b909460019061127c818818831c828916612251565b918363ffffffff61128d858a612095565b50541611156112a0575050945b9061119f565b90965081018091111561129a5783886011857f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b8285517f3f8d3c1c000000000000000000000000000000000000000000000000000000008152fd5b50503461024e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024e578060209273ffffffffffffffffffffffffffffffffffffffff611352611e5f565b168152600b845220549051908152f35b83807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261056e57611394611eba565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739278181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b50503461024e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024e578060209273ffffffffffffffffffffffffffffffffffffffff611433611e5f565b1681526003845220549051908152f35b50503461024e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024e5763ffffffff6114ab8260209473ffffffffffffffffffffffffffffffffffffffff61149d611e5f565b1681526006865220546120dc565b915191168152f35b83903461024e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024e57356114ed611eba565b600754816007557f9960c7dba5c668f2dcce571ead061f33d2e4174c892c8eb86b4b34529bb7271e8380a380f35b833461056e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261056e57610465611556611e5f565b3361225e565b50503461024e576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126107d65773ffffffffffffffffffffffffffffffffffffffff92836115ad611e5f565b168152600b825282812091835190818185549182815201908195855282852090855b81811061161b57505050826115e5910383611db8565b8451948186019282875251809352850193925b8281106116055785850386f35b83518716855293810193928101926001016115f8565b8254845292840192600192830192016115cf565b83807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261056e5763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b50503461024e577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261056e576104656116cd611e5f565b6024359033612899565b9050346107d657817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126107d65761170f611e5f565b906024359173ffffffffffffffffffffffffffffffffffffffff91827f0000000000000000000000000000000000000000000000000000000000000000163303610e715750827fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef926020926117878896600254612251565b60025516948585526003835280852082815401905551908152a380f35b50503461024e57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024e57602090610d38611ef2565b50503461024e57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024e576020905160ff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50503461024e57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024e576020906007549051908152f35b50503461024e57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024e57602090517f4e5bad79d7a0440fb72ccd68e0066fd311c89b4798247673e10a7539f77a95d48152f35b83807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261056e5763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b50503461024e5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024e57602090610d90611979611e5f565b611981611e87565b60443591612cf9565b919050346107d657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126107d6576119c3611e5f565b6024359283151593848103611a88576119da611eba565b80611a7f575b611a58575073ffffffffffffffffffffffffffffffffffffffff1690818452600860205283207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541660ff84161790557ff250dd6faf51f88e0d298800d22453f75bd1af207056ddd9a4fb55f1408376fb8380a380f35b82517f270de3fd000000000000000000000000000000000000000000000000000000008152fd5b50813b156119e0565b8580fd5b50503461024e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024e578060209273ffffffffffffffffffffffffffffffffffffffff611ade611e5f565b168152600a845220549051908152f35b50503461024e57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024e576020906002549051908152f35b9050346107d657817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126107d657602092611b66611e5f565b9183602435928392338252875273ffffffffffffffffffffffffffffffffffffffff8282209516948582528752205582519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925843392a35160018152f35b50503461024e57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024e5780602092611c02611e5f565b611c0a611e87565b73ffffffffffffffffffffffffffffffffffffffff91821683526009865283832091168252845220549051908152f35b849084346107d657827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126107d657828054611c7781611cfe565b80855291600191808316908115610f6d5750600114611ca257505050610f0382610f0d940383611db8565b80809650527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b828610611ce657505050610f03826020610f0d9582010194610ef1565b80546020878701810191909152909501948101611cc9565b90600182811c92168015611d47575b6020831014611d1857565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f1691611d0d565b6040810190811067ffffffffffffffff821117611d6d57604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60c0810190811067ffffffffffffffff821117611d6d57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117611d6d57604052565b60208082528251818301819052939260005b858110611e4b575050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006040809697860101520116010190565b818101830151848201604001528201611e0b565b6004359073ffffffffffffffffffffffffffffffffffffffff82168203611e8257565b600080fd5b6024359073ffffffffffffffffffffffffffffffffffffffff82168203611e8257565b6084359060ff82168203611e8257565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927543303611ee457565b6382b429006000526004601cfd5b6000467f000000000000000000000000000000000000000000000000000000000000000003611f4057507f000000000000000000000000000000000000000000000000000000000000000090565b604051815491908181611f5285611cfe565b9182825260209586830195600191888382169182600014612056575050600114611ffd575b5050611f8592500382611db8565b51902090604051908101917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260408201527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260a08152611ff781611d9c565b51902090565b908792508180527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b85831061203e575050611f8593508201013880611f77565b80548388018501528694508893909201918101612026565b91509350611f859592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009150168652151560051b8201013880611f77565b80548210156120ad5760005260206000200190600090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6401000000008110156120f25763ffffffff1690565b6335278d126000526004601cfd5b9190820391821161210d57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff166000526003602052612174604060002054600a60205260406000205490612100565b90565b73ffffffffffffffffffffffffffffffffffffffff16600090815260066020526040812080549190826121c857507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff91501690565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff830192831161222457507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff9161221b91612095565b505460201c1690565b807f4e487b7100000000000000000000000000000000000000000000000000000000602492526011600452fd5b9190820180921161210d57565b9073ffffffffffffffffffffffffffffffffffffffff9081831690600092828452600b6020526040842054600181116123815760018591146122e9575b82827f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f941696876122cf575b5050169280a4565b6122e2916122dc8261213c565b916123ab565b38806122c7565b5090828452600b6020526040842080541561235457907f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f92918552816020862054169084865260096020526040862082875260205261234d60408720548389612899565b925061229b565b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526032600452fd5b60046040517f1650e725000000000000000000000000000000000000000000000000000000008152fd5b919073ffffffffffffffffffffffffffffffffffffffff80911692831580156127c7575b80156127bf575b61238157169160008381526020600b815283836040966123f8828987206127d8565b612767575b80855260098452878520828652845287852061241a848254612251565b9055808552600a8452878520612431848254612251565b90557f96eafeca8c3c21ab2fa4a636b93ba20c9e22e3d222d92c6530fedc29a53671ee8580a48282526006815284822090815490811596876000146126fc5784905b61249d7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8093169889612251565b98158061268b575b15612578575050506124b686612c3b565b917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820191821161254b5791612511612547927fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7249594612095565b509063ffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000083549260201b169116179055565b80a4565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b91939092612585436120dc565b91846125908b612c3b565b94519661259c88611d51565b63ffffffff80951688528701941684526801000000000000000082101561265e57906125cd91600182018155612095565b9490946126325751915163ffffffff9190921616911660201b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000161790557fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72490612547565b6024867f4e487b7100000000000000000000000000000000000000000000000000000000815280600452fd5b6024877f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84018481116126cf576126c563ffffffff9187612095565b50541643146124a5565b6024877f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff830183811161273a576127309085612095565b5054821c90612473565b6024867f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b808552600b84528785205460075410156123fd579150506008825260ff868420541615612796578385916123fd565b600486517f1650e725000000000000000000000000000000000000000000000000000000008152fd5b5082156123d6565b50826127d28261213c565b106123cf565b9190600183016000908282528060205260408220541560001461289357845494680100000000000000008610156128665783612856612821886001604098999a01855584612095565b81939154907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9060031b92831b921b19161790565b9055549382526020522055600190565b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b50925050565b929190816128a682612177565b1061296b5773ffffffffffffffffffffffffffffffffffffffff809416936000948086526020600981526040908188209385169384895281526128ec86838a2054612100565b8015612950575b978392600a7f2378cf3c967a76a82bf1c637dc488f42192f1a912eed6bd91dd71041aa9797739361294e9a9b8a9897855260098252838520888652825283852055858452528120612945868254612100565b905580a4612ac1565b565b838952600b825261296385848b20612995565b6128f3578880fd5b60046040517f7fc3f0d3000000000000000000000000000000000000000000000000000000008152fd5b90600182019060009281845282602052604084205490811515600014612aba577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff918281018181116126cf57825490848201918211612a8d57808203612a58575b50505080548015612a2b57820191612a0e8383612095565b909182549160031b1b191690555582526020526040812055600190565b6024867f4e487b710000000000000000000000000000000000000000000000000000000081526031600452fd5b612a78612a686128219386612095565b90549060031b1c92839286612095565b905586528460205260408620553880806129f6565b6024887f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b5050505090565b73ffffffffffffffffffffffffffffffffffffffff1660008181526006602052604081208054801594939291908515612bfd57825b612b207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8092169687612100565b961580612b8c575b15612b3757506124b686612c3b565b90612b41436120dc565b612b4a88612c3b565b9160405194612b5886611d51565b63ffffffff80931686528460208701941684526801000000000000000082101561265e57906125cd91600182018155612095565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201828111612bd057612bc663ffffffff9185612095565b5054164314612b28565b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811161254b57612c319083612095565b505460201c612af6565b7c01000000000000000000000000000000000000000000000000000000008110156120f2577bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff903360005260036020526040600020612cb0848254612100565b9055169081600052600360205260406000208181540190556040519081527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60203392a3600190565b9190612d058284612e1e565b73ffffffffffffffffffffffffffffffffffffffff80931691338314612de557907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91600094848652602092600484526040918291828920338a52865282892054857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612dc2575b505087895260038652828920612da6868254612100565b90551696878152600385522082815401905551908152a3600190565b612dcb91612100565b888a5260048752838a20338b528752838a20553885612d8f565b91506121749250612c81565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461210d5760010190565b91612e288361213c565b91808310156130565791909260009073ffffffffffffffffffffffffffffffffffffffff809116808352602095600b875260409283852091845190818a85549182815201908589528b892090895b8d828210613042575050505082612e8e910383611db8565b81519887985b8a8a1080613030575b15612fc85783518a10156120ad57848c8b60051b860101511699876000528c60098091528d8a600020908d600052528d8a600020549c8d91612ede82612177565b838110908418028084189303612f14575b50505050612f069192939495969798999a50612df1565b989796959493929190612e94565b9091612f2a8180959798999a9b9c9d9e9f612251565b9e03612f9e5750612f3b818b612995565b15611e82578e612f06948c60005281528c60002090826000525260008c8120555b612f668282612ac1565b8a7f2378cf3c967a76a82bf1c637dc488f42192f1a912eed6bd91dd71041aa979773600080a48a99989796959493929138808f612eef565b612f06948c60005281528c6000209082600052528b600020612fc1838254612100565b9055612f5c565b92509498509895949650612fdf9250849150612251565b106130075790612ffc600a92856000528383528460002054612100565b936000525260002055565b600483517f7fc3f0d3000000000000000000000000000000000000000000000000000000008152fd5b508161303c8a83612251565b10612e9d565b835485529093019260019283019201612e76565b50915050565b1561306357565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332304d756c7469566f7465733a207369676e617475726520657870697260448201527f65640000000000000000000000000000000000000000000000000000000000006064820152fd5b156130ee57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f45524332304d756c7469566f7465733a20696e76616c6964206e6f6e636500006044820152fdfea164736f6c6343000813000a000000000000000000000000c466af7ff16ef0f1a7fa4e23e095e47a4058d791