[ { "inputs": [ { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "string", "name": "_symbol", "type": "string" }, { "internalType": "address", "name": "_minter", "type": "address" }, { "internalType": "address", "name": "_owner", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [ { "internalType": "address", "name": "caller", "type": "address" } ], "name": "CallerNotMinter", "type": "error" }, { "inputs": [], "name": "CheckpointUnorderedInsertion", "type": "error" }, { "inputs": [], "name": "ECDSAInvalidSignature", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "length", "type": "uint256" } ], "name": "ECDSAInvalidSignatureLength", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "ECDSAInvalidSignatureS", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "increasedSupply", "type": "uint256" }, { "internalType": "uint256", "name": "cap", "type": "uint256" } ], "name": "ERC20ExceededSafeSupply", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "allowance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientAllowance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientBalance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC20InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC20InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC20InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" } ], "name": "ERC20InvalidSpender", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "deadline", "type": "uint256" } ], "name": "ERC2612ExpiredSignature", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "signer", "type": "address" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC2612InvalidSigner", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "timepoint", "type": "uint256" }, { "internalType": "uint48", "name": "clock", "type": "uint48" } ], "name": "ERC5805FutureLookup", "type": "error" }, { "inputs": [], "name": "ERC6372InconsistentClock", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "currentNonce", "type": "uint256" } ], "name": "InvalidAccountNonce", "type": "error" }, { "inputs": [], "name": "InvalidMinterZeroAddress", "type": "error" }, { "inputs": [], "name": "InvalidShortString", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "OwnableInvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "OwnableUnauthorizedAccount", "type": "error" }, { "inputs": [ { "internalType": "uint8", "name": "bits", "type": "uint8" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "SafeCastOverflowedUintDowncast", "type": "error" }, { "inputs": [ { "internalType": "string", "name": "str", "type": "string" } ], "name": "StringTooLong", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "expiry", "type": "uint256" } ], "name": "VotesExpiredSignature", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "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": false, "internalType": "uint256", "name": "previousVotes", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newVotes", "type": "uint256" } ], "name": "DelegateVotesChanged", "type": "event" }, { "anonymous": false, "inputs": [], "name": "EIP712DomainChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "newMinter", "type": "address" } ], "name": "NewMinter", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [], "name": "CLOCK_MODE", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DOMAIN_SEPARATOR", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MAX_SUPPLY", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "burnFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint32", "name": "pos", "type": "uint32" } ], "name": "checkpoints", "outputs": [ { "components": [ { "internalType": "uint48", "name": "_key", "type": "uint48" }, { "internalType": "uint208", "name": "_value", "type": "uint208" } ], "internalType": "struct Checkpoints.Checkpoint208", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "clock", "outputs": [ { "internalType": "uint48", "name": "", "type": "uint48" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "delegatee", "type": "address" } ], "name": "delegate", "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": "account", "type": "address" } ], "name": "delegates", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "eip712Domain", "outputs": [ { "internalType": "bytes1", "name": "fields", "type": "bytes1" }, { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "version", "type": "string" }, { "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "address", "name": "verifyingContract", "type": "address" }, { "internalType": "bytes32", "name": "salt", "type": "bytes32" }, { "internalType": "uint256[]", "name": "extensions", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "timepoint", "type": "uint256" } ], "name": "getPastTotalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "timepoint", "type": "uint256" } ], "name": "getPastVotes", "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": "_account", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "mint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "minter", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_owner", "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": "", "type": "address" } ], "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": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newMinter", "type": "address" } ], "name": "setMinter", "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": "value", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
61016060405234801561001157600080fd5b5060405161271d38038061271d83398101604081905261003091610329565b8084848180604051806040016040528060018152602001603160f81b81525084848160039081610060919061043c565b50600461006d828261043c565b5061007d91508390506005610187565b6101205261008c816006610187565b61014052815160208084019190912060e052815190820120610100524660a05261011960e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c0525050506001600160a01b03811661015457604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b61015d816101ba565b5050600c80546001600160a01b0319166001600160a01b0392909216919091179055506105519050565b60006020835110156101a35761019c8361020c565b90506101b4565b816101ae848261043c565b5060ff90505b92915050565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080829050601f81511115610237578260405163305a27a960e01b815260040161014b91906104fa565b80516102428261052d565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561027b578181015183820152602001610263565b50506000910152565b600082601f83011261029557600080fd5b81516001600160401b038111156102ae576102ae61024a565b604051601f8201601f19908116603f011681016001600160401b03811182821017156102dc576102dc61024a565b6040528181528382016020018510156102f457600080fd5b610305826020830160208701610260565b949350505050565b80516001600160a01b038116811461032457600080fd5b919050565b6000806000806080858703121561033f57600080fd5b84516001600160401b0381111561035557600080fd5b61036187828801610284565b602087015190955090506001600160401b0381111561037f57600080fd5b61038b87828801610284565b93505061039a6040860161030d565b91506103a86060860161030d565b905092959194509250565b600181811c908216806103c757607f821691505b6020821081036103e757634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561043757806000526020600020601f840160051c810160208510156104145750805b601f840160051c820191505b818110156104345760008155600101610420565b50505b505050565b81516001600160401b038111156104555761045561024a565b6104698161046384546103b3565b846103ed565b6020601f82116001811461049d57600083156104855750848201515b600019600385901b1c1916600184901b178455610434565b600084815260208120601f198516915b828110156104cd57878501518255602094850194600190920191016104ad565b50848210156104eb5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6020815260008251806020840152610519816040850160208701610260565b601f01601f19169190910160400192915050565b805160208083015191908110156103e75760001960209190910360031b1b16919050565b60805160a05160c05160e0516101005161012051610140516121726105ab600039600061101a01526000610fed01526000610d1e01526000610cf601526000610c5101526000610c7b01526000610ca501526121726000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c8063715018a61161010f5780639ab24eb0116100a2578063dd62ed3e11610071578063dd62ed3e14610463578063f1127ed81461049c578063f2fde38b146104db578063fca3b5aa146104ee57600080fd5b80639ab24eb014610417578063a9059cbb1461042a578063c3cda5201461043d578063d505accf1461045057600080fd5b80638da5cb5b116100de5780638da5cb5b146103cc5780638e539e8c146103dd57806391ddadf4146103f057806395d89b411461040f57600080fd5b8063715018a61461038357806379cc67901461038b5780637ecebe001461039e57806384b0196e146103b157600080fd5b80633a46b1a811610187578063587cde1e11610156578063587cde1e146102f35780635c19a95c1461031f5780636fcfff451461033257806370a082311461035a57600080fd5b80633a46b1a8146102b057806340c10f19146102c357806342966c68146102d85780634bf5d7e9146102eb57600080fd5b806323b872dd116101c357806323b872dd14610273578063313ce5671461028657806332cb6b0c146102955780633644e515146102a857600080fd5b806306fdde03146101f55780630754617214610213578063095ea7b31461023e57806318160ddd14610261575b600080fd5b6101fd610501565b60405161020a9190611d7b565b60405180910390f35b600c54610226906001600160a01b031681565b6040516001600160a01b03909116815260200161020a565b61025161024c366004611daa565b610593565b604051901515815260200161020a565b6002545b60405190815260200161020a565b610251610281366004611dd4565b6105ad565b6040516012815260200161020a565b6102656b204fce5e3e2502611000000081565b6102656105d1565b6102656102be366004611daa565b6105e0565b6102d66102d1366004611daa565b610666565b005b6102d66102e6366004611e11565b6106a1565b6101fd6106ae565b610226610301366004611e2a565b6001600160a01b039081166000908152600860205260409020541690565b6102d661032d366004611e2a565b610717565b610345610340366004611e2a565b610722565b60405163ffffffff909116815260200161020a565b610265610368366004611e2a565b6001600160a01b031660009081526020819052604090205490565b6102d661072d565b6102d6610399366004611daa565b610741565b6102656103ac366004611e2a565b610756565b6103b9610774565b60405161020a9796959493929190611e45565b600b546001600160a01b0316610226565b6102656103eb366004611e11565b6107ba565b6103f8610824565b60405165ffffffffffff909116815260200161020a565b6101fd61082e565b610265610425366004611e2a565b61083d565b610251610438366004611daa565b61086d565b6102d661044b366004611eee565b61087b565b6102d661045e366004611f46565b610938565b610265610471366004611fb1565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6104af6104aa366004611fe4565b610a72565b60408051825165ffffffffffff1681526020928301516001600160d01b0316928101929092520161020a565b6102d66104e9366004611e2a565b610a97565b6102d66104fc366004611e2a565b610ad2565b60606003805461051090612024565b80601f016020809104026020016040519081016040528092919081815260200182805461053c90612024565b80156105895780601f1061055e57610100808354040283529160200191610589565b820191906000526020600020905b81548152906001019060200180831161056c57829003601f168201915b5050505050905090565b6000336105a1818585610b55565b60019150505b92915050565b6000336105bb858285610b67565b6105c6858585610be5565b506001949350505050565b60006105db610c44565b905090565b6000806105eb610824565b90508065ffffffffffff16831061062b57604051637669fc0f60e11b81526004810184905265ffffffffffff821660248201526044015b60405180910390fd5b61065561063784610d6f565b6001600160a01b038616600090815260096020526040902090610da6565b6001600160d01b0316949350505050565b600c546001600160a01b0316331461069357604051632fdab94f60e11b8152336004820152602401610622565b61069d8282610e5c565b5050565b6106ab3382610e92565b50565b60606106b8610ec8565b65ffffffffffff166106c8610824565b65ffffffffffff16146106ee576040516301bfc1c560e61b815260040160405180910390fd5b5060408051808201909152600e81526d06d6f64653d74696d657374616d760941b602082015290565b3361069d8183610ed3565b60006105a782610f45565b610735610f67565b61073f6000610f94565b565b61074c823383610b67565b61069d8282610e92565b6001600160a01b0381166000908152600760205260408120546105a7565b600060608060008060006060610788610fe6565b610790611013565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b6000806107c5610824565b90508065ffffffffffff16831061080057604051637669fc0f60e11b81526004810184905265ffffffffffff82166024820152604401610622565b61081461080c84610d6f565b600a90610da6565b6001600160d01b03169392505050565b60006105db610ec8565b60606004805461051090612024565b6001600160a01b038116600090815260096020526040812061085e90611040565b6001600160d01b031692915050565b6000336105a1818585610be5565b8342111561089f57604051632341d78760e11b815260048101859052602401610622565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b038816918101919091526060810186905260808101859052600090610919906109119060a00160405160208183030381529060405280519060200120611079565b8585856110a6565b905061092581876110d4565b61092f8188610ed3565b50505050505050565b8342111561095c5760405163313c898160e11b815260048101859052602401610622565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886109a98c6001600160a01b0316600090815260076020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506000610a0482611079565b90506000610a14828787876110a6565b9050896001600160a01b0316816001600160a01b031614610a5b576040516325c0072360e11b81526001600160a01b0380831660048301528b166024820152604401610622565b610a668a8a8a610b55565b50505050505050505050565b6040805180820190915260008082526020820152610a908383611127565b9392505050565b610a9f610f67565b6001600160a01b038116610ac957604051631e4fbdf760e01b815260006004820152602401610622565b6106ab81610f94565b610ada610f67565b6001600160a01b038116610b01576040516304a208c760e01b815260040160405180910390fd5b600c80546001600160a01b0319166001600160a01b0383169081179091556040519081527f6adffd5c93085d835dac6f3b40adf7c242ca4b3284048d20c3d8a501748dc9739060200160405180910390a150565b610b62838383600161115d565b505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114610bdf5781811015610bd057604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610622565b610bdf8484848403600061115d565b50505050565b6001600160a01b038316610c0f57604051634b637e8f60e11b815260006004820152602401610622565b6001600160a01b038216610c395760405163ec442f0560e01b815260006004820152602401610622565b610b62838383611232565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015610c9d57507f000000000000000000000000000000000000000000000000000000000000000046145b15610cc757507f000000000000000000000000000000000000000000000000000000000000000090565b6105db604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600065ffffffffffff821115610da2576040516306dfcc6560e41b81526030600482015260248101839052604401610622565b5090565b815460009081816005811115610e05576000610dc18461123d565b610dcb9085612074565b60008881526020902090915081015465ffffffffffff9081169087161015610df557809150610e03565b610e00816001612087565b92505b505b6000610e1387878585611325565b90508015610e4e57610e3887610e2a600184612074565b600091825260209091200190565b54600160301b90046001600160d01b0316610e51565b60005b979650505050505050565b6001600160a01b038216610e865760405163ec442f0560e01b815260006004820152602401610622565b61069d60008383611232565b6001600160a01b038216610ebc57604051634b637e8f60e11b815260006004820152602401610622565b61069d82600083611232565b60006105db42610d6f565b6001600160a01b0382811660008181526008602052604080822080548686166001600160a01b0319821681179092559151919094169392849290917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4610b628183610f4086611387565b6113a5565b6001600160a01b0381166000908152600960205260408120546105a790611511565b600b546001600160a01b0316331461073f5760405163118cdaa760e01b8152336004820152602401610622565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60606105db7f00000000000000000000000000000000000000000000000000000000000000006005611542565b60606105db7f00000000000000000000000000000000000000000000000000000000000000006006611542565b805460009080156110705761105a83610e2a600184612074565b54600160301b90046001600160d01b0316610a90565b60009392505050565b60006105a7611086610c44565b8360405161190160f01b8152600281019290925260228201526042902090565b6000806000806110b8888888886115ed565b9250925092506110c882826116bc565b50909695505050505050565b6001600160a01b0382166000908152600760205260409020805460018101909155818114610b62576040516301d4b62360e61b81526001600160a01b038416600482015260248101829052604401610622565b60408051808201909152600080825260208201526001600160a01b0383166000908152600960205260409020610a909083611775565b6001600160a01b0384166111875760405163e602df0560e01b815260006004820152602401610622565b6001600160a01b0383166111b157604051634a1406b160e11b815260006004820152602401610622565b6001600160a01b0380851660009081526001602090815260408083209387168352929052208290558015610bdf57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161122491815260200190565b60405180910390a350505050565b610b628383836117e5565b60008160000361124f57506000919050565b6000600161125c846117f0565b901c6001901b905060018184816112755761127561209a565b048201901c9050600181848161128d5761128d61209a565b048201901c905060018184816112a5576112a561209a565b048201901c905060018184816112bd576112bd61209a565b048201901c905060018184816112d5576112d561209a565b048201901c905060018184816112ed576112ed61209a565b048201901c905060018184816113055761130561209a565b048201901c9050610a908182858161131f5761131f61209a565b04611884565b60005b8183101561137f57600061133c848461189a565b60008781526020902090915065ffffffffffff86169082015465ffffffffffff16111561136b57809250611379565b611376816001612087565b93505b50611328565b509392505050565b6001600160a01b0381166000908152602081905260408120546105a7565b816001600160a01b0316836001600160a01b0316141580156113c75750600081115b15610b62576001600160a01b0383161561146f576001600160a01b0383166000908152600960205260408120819061140a906118b5611405866118c1565b6118f5565b6001600160d01b031691506001600160d01b03169150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611464929190918252602082015260400190565b60405180910390a250505b6001600160a01b03821615610b62576001600160a01b038216600090815260096020526040812081906114a89061192e611405866118c1565b6001600160d01b031691506001600160d01b03169150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611502929190918252602082015260400190565b60405180910390a25050505050565b600063ffffffff821115610da2576040516306dfcc6560e41b81526020600482015260248101839052604401610622565b606060ff831461155c576115558361193a565b90506105a7565b81805461156890612024565b80601f016020809104026020016040519081016040528092919081815260200182805461159490612024565b80156115e15780601f106115b6576101008083540402835291602001916115e1565b820191906000526020600020905b8154815290600101906020018083116115c457829003601f168201915b505050505090506105a7565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561162857506000915060039050826116b2565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561167c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166116a8575060009250600191508290506116b2565b9250600091508190505b9450945094915050565b60008260038111156116d0576116d06120b0565b036116d9575050565b60018260038111156116ed576116ed6120b0565b0361170b5760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561171f5761171f6120b0565b036117405760405163fce698f760e01b815260048101829052602401610622565b6003826003811115611754576117546120b0565b0361069d576040516335e2f38360e21b815260048101829052602401610622565b6040805180820190915260008082526020820152826000018263ffffffff16815481106117a4576117a46120c6565b60009182526020918290206040805180820190915291015465ffffffffffff81168252600160301b90046001600160d01b0316918101919091529392505050565b610b62838383611979565b600080608083901c1561180557608092831c92015b604083901c1561181757604092831c92015b602083901c1561182957602092831c92015b601083901c1561183b57601092831c92015b600883901c1561184d57600892831c92015b600483901c1561185f57600492831c92015b600283901c1561187157600292831c92015b600183901c156105a75760010192915050565b60008183106118935781610a90565b5090919050565b60006118a960028484186120dc565b610a9090848416612087565b6000610a9082846120fe565b60006001600160d01b03821115610da2576040516306dfcc6560e41b815260d0600482015260248101839052604401610622565b600080611921611903610824565b61191961190f88611040565b868863ffffffff16565b8791906119e5565b915091505b935093915050565b6000610a90828461211d565b60606000611947836119f3565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b611984838383611a1b565b6001600160a01b0383166119da57600061199d60025490565b90506b204fce5e3e25026110000000808211156119d757604051630e58ae9360e11b81526004810183905260248101829052604401610622565b50505b610b62838383611b45565b600080611921858585611bbb565b600060ff8216601f8111156105a757604051632cd44ac360e21b815260040160405180910390fd5b6001600160a01b038316611a46578060026000828254611a3b9190612087565b90915550611ab89050565b6001600160a01b03831660009081526020819052604090205481811015611a995760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610622565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216611ad457600280548290039055611af3565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611b3891815260200190565b60405180910390a3505050565b6001600160a01b038316611b6757611b64600a61192e611405846118c1565b50505b6001600160a01b038216611b8957611b86600a6118b5611405846118c1565b50505b6001600160a01b03838116600090815260086020526040808220548584168352912054610b62929182169116836113a5565b825460009081908015611cda576000611bd987610e2a600185612074565b60408051808201909152905465ffffffffffff808216808452600160301b9092046001600160d01b031660208401529192509087161015611c2d57604051632520601d60e01b815260040160405180910390fd5b805165ffffffffffff808816911603611c795784611c5088610e2a600186612074565b80546001600160d01b0392909216600160301b0265ffffffffffff909216919091179055611cca565b6040805180820190915265ffffffffffff80881682526001600160d01b0380881660208085019182528b54600181018d5560008d81529190912094519151909216600160301b029216919091179101555b6020015192508391506119269050565b50506040805180820190915265ffffffffffff80851682526001600160d01b0380851660208085019182528854600181018a5560008a815291822095519251909316600160301b029190931617920191909155905081611926565b6000815180845260005b81811015611d5b57602081850181015186830182015201611d3f565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610a906020830184611d35565b80356001600160a01b0381168114611da557600080fd5b919050565b60008060408385031215611dbd57600080fd5b611dc683611d8e565b946020939093013593505050565b600080600060608486031215611de957600080fd5b611df284611d8e565b9250611e0060208501611d8e565b929592945050506040919091013590565b600060208284031215611e2357600080fd5b5035919050565b600060208284031215611e3c57600080fd5b610a9082611d8e565b60ff60f81b8816815260e060208201526000611e6460e0830189611d35565b8281036040840152611e768189611d35565b606084018890526001600160a01b038716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b81811015611ecc578351835260209384019390920191600101611eae565b50909b9a5050505050505050505050565b803560ff81168114611da557600080fd5b60008060008060008060c08789031215611f0757600080fd5b611f1087611d8e565b95506020870135945060408701359350611f2c60608801611edd565b9598949750929560808101359460a0909101359350915050565b600080600080600080600060e0888a031215611f6157600080fd5b611f6a88611d8e565b9650611f7860208901611d8e565b95506040880135945060608801359350611f9460808901611edd565b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215611fc457600080fd5b611fcd83611d8e565b9150611fdb60208401611d8e565b90509250929050565b60008060408385031215611ff757600080fd5b61200083611d8e565b9150602083013563ffffffff8116811461201957600080fd5b809150509250929050565b600181811c9082168061203857607f821691505b60208210810361205857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105a7576105a761205e565b808201808211156105a7576105a761205e565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000826120f957634e487b7160e01b600052601260045260246000fd5b500490565b6001600160d01b0382811682821603908111156105a7576105a761205e565b6001600160d01b0381811683821601908111156105a7576105a761205e56fea26469706673582212202634877c39ff34e02da8211a2afd1ced8c37d9605071bcfaa141bdc8e8ba458664736f6c634300081b0033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000261980962ce53c433c5f4139f284b2ce37239517000000000000000000000000261980962ce53c433c5f4139f284b2ce372395170000000000000000000000000000000000000000000000000000000000000003545439000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025439000000000000000000000000000000000000000000000000000000000000