[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "AccessControlBadConfirmation", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "bytes32", "name": "neededRole", "type": "bytes32" } ], "name": "AccessControlUnauthorizedAccount", "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": [], "name": "EnforcedPause", "type": "error" }, { "inputs": [], "name": "ExpectedPause", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "currentNonce", "type": "uint256" } ], "name": "InvalidAccountNonce", "type": "error" }, { "inputs": [], "name": "InvalidShortString", "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": false, "internalType": "address[]", "name": "accounts", "type": "address[]" }, { "indexed": false, "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" } ], "name": "BatchDistributed", "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": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Deposited", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Distributed", "type": "event" }, { "anonymous": false, "inputs": [], "name": "EIP712DomainChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Paused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amountBurn", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "timestamp", "type": "uint256" } ], "name": "RedeemCreated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "timestamp", "type": "uint256" } ], "name": "RedeemExecuted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "previousAdminRole", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "newAdminRole", "type": "bytes32" } ], "name": "RoleAdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleGranted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleRevoked", "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" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Unpaused", "type": "event" }, { "inputs": [], "name": "CLOCK_MODE", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "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": [], "name": "MINTER_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PAUSER_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PERCENT_DENOMINATOR", "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": "uint256", "name": "duration", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "calculateRedeem", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "redeemId", "type": "uint256" } ], "name": "cancelRedeem", "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": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "distribute", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "accounts", "type": "address[]" }, { "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" } ], "name": "distributeBatch", "outputs": [], "stateMutability": "nonpayable", "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": "address", "name": "token", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "emergencyWithdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "redeemId", "type": "uint256" } ], "name": "executeRedeem", "outputs": [], "stateMutability": "nonpayable", "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": "owner", "type": "address" }, { "internalType": "uint256", "name": "offset", "type": "uint256" }, { "internalType": "uint256", "name": "limit", "type": "uint256" } ], "name": "getRedeems", "outputs": [ { "components": [ { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "timestamp", "type": "uint256" } ], "internalType": "struct XMono.MonoRedeem[]", "name": "", "type": "tuple[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleAdmin", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "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": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "grantRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "hasRole", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "minRedeemPercent", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "minRedeemTime", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "mint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "mono", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "monoRedeems", "outputs": [ { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "timestamp", "type": "uint256" } ], "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": "pause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "pauseRedeem", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "paused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "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": [ { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "duration", "type": "uint256" } ], "name": "redeem", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "redeemPercentIncrease", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "callerConfirmation", "type": "address" } ], "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_mono", "type": "address" } ], "name": "setMono", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "_pauseRedeem", "type": "bool" } ], "name": "setPauseRedeem", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "bool", "name": "allow", "type": "bool" } ], "name": "setWhitelistTransfer", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "timeThresholds", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "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": [], "name": "unpause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "whitelistTransfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" } ]
6101606040526103846011556113886012553480156200001e57600080fd5b50604051806040016040528060098152602001680784d6f6e6f737761760bc1b81525080604051806040016040528060018152602001603160f81b815250604051806040016040528060098152602001680784d6f6e6f737761760bc1b81525060405180604001604052806005815260200164784d4f4e4f60d81b8152508160039081620000ad9190620005ba565b506004620000bc8282620005ba565b50506005805460ff1916905550620000d6826007620003de565b61012052620000e7816008620003de565b61014052815160208084019190912060e052815190820120610100524660a0526200017560e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c052506200018c60003362000417565b50620001b97f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a3362000417565b50620001e67f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a63362000417565b5060108054600181810183556103c07f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae67292830155825480820184556107089083015582548082018455610e1090830155825480820184556115189083015582548082018455611c209083015582548082018455612328908301558254808201845561288c9083015582548082018455612a30908301558254908101909255612b2091018190556013602052600a7f0c5ec7c688cb180884ce37bcaf156fd4d94ccc6b2c44b16e39876656be3d451555600f7f32b49020f4c59b0e19a0931fee368057ba3c3ba003a7ac5e51b9921353c6e2475560147fa3049caeb00d8e890a9103f55e2bfdd4f7960e2e129c60a1087deba1b06adc915560197f91d531635dc021fbc01052e1fe65b239e37e09505318fef35c653a0ae937899955601e7fdc59561865396a473d8c90d41a6ef4f6c26f1e357bbdcc9da3913eb7a2e571495560327f79996fcb6689bfc4d9f31d74bf90205297212c07f9a00cf5f348d5854ba5606e5560467f7bbc760e6154ccadf7fa4841597cc704d5772b6d880f116b6c925c843f8486cf5560827f10db9e1c6887348171b096838592757bdcd507a0b008b2b1bf1cffb6a647294d5560009081527f2a6c9acdc79ef1a5050a930b49edb8deccd8ded4d94ae88a24f85c653d8d4fbb55620006fb565b6000602083511015620003fe57620003f683620004c9565b905062000411565b816200040b8482620005ba565b5060ff90505b92915050565b60008281526006602090815260408083206001600160a01b038516845290915281205460ff16620004c05760008381526006602090815260408083206001600160a01b03861684529091529020805460ff19166001179055620004773390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600162000411565b50600062000411565b600080829050601f8151111562000500578260405163305a27a960e01b8152600401620004f7919062000686565b60405180910390fd5b80516200050d82620006d6565b179392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200054057607f821691505b6020821081036200056157634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620005b557600081815260208120601f850160051c81016020861015620005905750805b601f850160051c820191505b81811015620005b1578281556001016200059c565b5050505b505050565b81516001600160401b03811115620005d657620005d662000515565b620005ee81620005e784546200052b565b8462000567565b602080601f8311600181146200062657600084156200060d5750858301515b600019600386901b1c1916600185901b178555620005b1565b600085815260208120601f198616915b82811015620006575788860151825594840194600190910190840162000636565b5085821015620006765787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208083528351808285015260005b81811015620006b55785810183015185820160400152820162000697565b506000604082860101526040601f19601f8301168501019250505092915050565b80516020808301519190811015620005615760001960209190910360031b1b16919050565b60805160a05160c05160e0516101005161012051610140516139bc6200075660003960006120fa015260006120cd01526000611d1101526000611ce901526000611c4401526000611c6e01526000611c9801526139bc6000f3fe608060405234801561001057600080fd5b506004361061029e5760003560e01c806301ffc9a7146102a357806306fdde03146102cb578063095ea7b3146102e057806318160ddd146102f357806320bfc7631461030557806323b872dd1461031a578063248a9ca31461032d5780632f2ff15d14610340578063313ce5671461035357806332ec84d2146103625780633644e5151461036f57806336568abe1461037757806339f89a691461038a5780633a1f73db146103aa5780633a46b1a8146103bd5780633f4ba83a146103d057806342966c68146103d85780634bf5d7e9146103eb578063539ffb77146103f3578063587cde1e146104065780635c19a95c146104265780635c975abb1461043957806366a16cad146104445780636c7b4ef8146104575780636fcfff451461047a57806370a08231146104a257806379cc6790146104b55780637cbc2373146104c85780637ecebe00146104db57806383330ccb146104ee5780638456cb591461050157806384b0196e146105095780638e539e8c1461052457806391d148541461053757806391ddadf41461054a57806395d89b41146105695780639ab24eb0146105715780639e6c295914610584578063a0712d681461058d578063a217fddf146105a0578063a9059cbb146105a8578063ae34528c146105bb578063af6e855a146105de578063bb9f02a3146105e7578063c3cda520146105fa578063cf4c58e21461060d578063d505accf14610620578063d539139314610633578063d547741f14610648578063dacfe6bd1461065b578063dd62ed3e1461067b578063de5e618d1461068e578063de72f107146106a1578063e63ab1e9146106b4578063e63ea408146106c9578063f1127ed8146106dc578063f290151e1461071b578063fb93210814610724575b600080fd5b6102b66102b1366004613024565b610737565b60405190151581526020015b60405180910390f35b6102d361076e565b6040516102c29190613094565b6102b66102ee3660046130c3565b610800565b6002545b6040519081526020016102c2565b6103186103133660046130fb565b610818565b005b6102b6610328366004613118565b610844565b6102f761033b366004613154565b61086a565b61031861034e36600461316d565b61087f565b604051601281526020016102c2565b600f546102b69060ff1681565b6102f76108a1565b61031861038536600461316d565b6108b0565b61039d610398366004613199565b6108e8565b6040516102c291906131cc565b6103186103b8366004613239565b610aa2565b6102f76103cb3660046130c3565b610ad0565b610318610b4d565b6103186103e6366004613154565b610b70565b6102d3610b7a565b610318610401366004613154565b610bf2565b610419610414366004613239565b610d3b565b6040516102c29190613254565b610318610434366004613239565b610d59565b60055460ff166102b6565b610318610452366004613268565b610d68565b6102b6610465366004613239565b600e6020526000908152604090205460ff1681565b61048d610488366004613239565b610d9f565b60405163ffffffff90911681526020016102c2565b6102f76104b0366004613239565b610daa565b6103186104c33660046130c3565b610dc5565b6103186104d636600461329f565b610dda565b6102f76104e9366004613239565b610fe6565b6103186104fc366004613154565b610ff1565b610318611213565b610511611233565b6040516102c297969594939291906132fc565b6102f7610532366004613154565b611279565b6102b661054536600461316d565b6112d6565b610552611301565b60405165ffffffffffff90911681526020016102c2565b6102d361130b565b6102f761057f366004613239565b61131a565b6102f761271081565b61031861059b366004613154565b61134a565b6102f7600081565b6102b66105b63660046130c3565b6113d8565b6105ce6105c9366004613154565b6113e6565b6040516102c2949392919061336c565b6102f760125481565b6102f76105f5366004613154565b611429565b6103186106083660046133a1565b61144a565b61031861061b3660046134c2565b6114ef565b61031861062e366004613581565b611611565b6102f760008051602061394783398151915281565b61031861065636600461316d565b61172d565b6102f7610669366004613154565b60136020526000908152604090205481565b6102f76106893660046135eb565b611749565b6102f761069c36600461329f565b611774565b600d54610419906001600160a01b031681565b6102f760008051602061392783398151915281565b6103186106d7366004613118565b6119a1565b6106ef6106ea366004613615565b611a6e565b60408051825165ffffffffffff1681526020928301516001600160d01b031692810192909252016102c2565b6102f760115481565b6103186107323660046130c3565b611a80565b60006001600160e01b03198216637965db0b60e01b148061076857506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606003805461077d9061364a565b80601f01602080910402602001604051908101604052809291908181526020018280546107a99061364a565b80156107f65780601f106107cb576101008083540402835291602001916107f6565b820191906000526020600020905b8154815290600101906020018083116107d957829003601f168201915b5050505050905090565b60003361080e818585611ae0565b5060019392505050565b60008051602061392783398151915261083081611aed565b50600f805460ff1916911515919091179055565b600033610852858285611af7565b61085d858585611b44565b60019150505b9392505050565b60009081526006602052604090206001015490565b6108888261086a565b61089181611aed565b61089b8383611ba3565b50505050565b60006108ab611c37565b905090565b6001600160a01b03811633146108d95760405163334bd91960e11b815260040160405180910390fd5b6108e38282611d62565b505050565b6001600160a01b03831660009081526015602052604081206060919061090d90611dcf565b905080600003610951576040805160008082526020820190925290610948565b610935612fdc565b81526020019060019003908161092d5790505b50915050610863565b60008161095e858761369a565b116109725761096d848661369a565b610974565b815b9050600061098286836136ad565b6001600160401b03811115610999576109996133f9565b6040519080825280602002602001820160405280156109d257816020015b6109bf612fdc565b8152602001906001900390816109b75790505b509050855b82811015610a97576001600160a01b0388166000908152601560205260409020601490610a049083611dd9565b81548110610a1457610a146136c0565b60009182526020918290206040805160808101825260049093029091018054835260018101546001600160a01b031693830193909352600283015490820152600390910154606082015282610a6989846136ad565b81518110610a7957610a796136c0565b60200260200101819052508080610a8f906136d6565b9150506109d7565b509695505050505050565b6000610aad81611aed565b50600d80546001600160a01b0319166001600160a01b0392909216919091179055565b600080610adb611301565b90508065ffffffffffff168310610b12578281604051637669fc0f60e11b8152600401610b099291906136ef565b60405180910390fd5b610b3c610b1e84611de5565b6001600160a01b0386166000908152600b6020526040902090611e17565b6001600160d01b0316949350505050565b600080516020613927833981519152610b6581611aed565b610b6d611ecd565b50565b610b6d3382611f19565b6060610b84611f4f565b65ffffffffffff16610b94611301565b65ffffffffffff1614610bba576040516301bfc1c560e61b815260040160405180910390fd5b5060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b610bfa611f5a565b600060148281548110610c0f57610c0f6136c0565b6000918252602090912060049091020160018101549091506001600160a01b03163314610c4e5760405162461bcd60e51b8152600401610b0990613705565b8060020154600003610c725760405162461bcd60e51b8152600401610b0990613736565b42816003015411610cc35760405162461bcd60e51b815260206004820152601b60248201527a584d4f4e4f3a2043616e6e6f742063616e63656c2072656465656d60281b6044820152606401610b09565b600281015460018201546001600160a01b03166000818152601560205260409020610cee9085611f80565b5060148481548110610d0257610d026136c0565b6000918252602082206004909102018181556001810180546001600160a01b0319169055600281018290556003015561089b8183611f8c565b6001600160a01b039081166000908152600a60205260409020541690565b33610d648183611fc2565b5050565b6000610d7381611aed565b506001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b60006107688261203d565b6001600160a01b031660009081526020819052604090205490565b610dd0823383611af7565b610d648282611f19565b610de2611f5a565b600f5460ff1615610e055760405162461bcd60e51b8152600401610b0990613765565b81610e0f33610daa565b1015610e5b5760405162461bcd60e51b815260206004820152601b60248201527a584d4f4e4f3a20496e73756666696369656e742062616c616e636560281b6044820152606401610b09565b601154811015610ea95760405162461bcd60e51b8152602060048201526019602482015278161353d393ce88111d5c985d1a5bdb881d1bdbc81cda1bdc9d603a1b6044820152606401610b09565b60008211610ec95760405162461bcd60e51b8152600401610b0990613736565b6000610ed58284611774565b9050610ee13384611f19565b6040805160808101825260148054825233602083015291810183905260608101610f0b854261369a565b9052815460018082018455600093845260209384902083516004909302019182559282015181840180546001600160a01b0319166001600160a01b0390921691909117905560408201516002820155606090910151600390910155601454610f8b91610f76916136ad565b3360009081526015602052604090209061205f565b50337f4b1062f1340d275c6dec7670aa37147d27c6c01117f067294d3630898f1d1b2982610fb981876136ad565b610fc3864261369a565b6040805193845260208401929092529082015260600160405180910390a2505050565b60006107688261206b565b610ff9611f5a565b600f5460ff161561101c5760405162461bcd60e51b8152600401610b0990613765565b600060148281548110611031576110316136c0565b6000918252602090912060049091020160018101549091506001600160a01b031633146110705760405162461bcd60e51b8152600401610b0990613705565b80600201546000036110945760405162461bcd60e51b8152600401610b0990613736565b42816003015411156110e55760405162461bcd60e51b815260206004820152601a602482015279584d4f4e4f3a204e6f7420726561647920746f2072656465656d60301b6044820152606401610b09565b600281015460018201546001600160a01b031660008181526015602052604090206111109085611f80565b5060148481548110611124576111246136c0565b6000918252602082206004918202018281556001810180546001600160a01b03191690556002810183905560030191909155600d5460405163a9059cbb60e01b81526001600160a01b039091169163a9059cbb91611186918591879101613793565b6020604051808303816000875af11580156111a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c991906137ac565b50806001600160a01b03167f79856aab4e1e9504325ed5509e5044f5df595dca4e43d15237fcf1241f63506483426040516112059291906137c9565b60405180910390a250505050565b60008051602061392783398151915261122b81611aed565b610b6d612089565b6000606080600080600060606112476120c6565b61124f6120f3565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b600080611284611301565b90508065ffffffffffff1683106112b2578281604051637669fc0f60e11b8152600401610b099291906136ef565b6112c66112be84611de5565b600c90611e17565b6001600160d01b03169392505050565b60009182526006602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60006108ab611f4f565b60606004805461077d9061364a565b6001600160a01b0381166000908152600b6020526040812061133b90612120565b6001600160d01b031692915050565b611352611f5a565b600d546040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b03909116906323b872dd906064016020604051808303816000875af11580156113a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113cd91906137ac565b50610b6d3382611f8c565b60003361080e818585611b44565b601481815481106113f657600080fd5b600091825260209091206004909102018054600182015460028301546003909301549193506001600160a01b0316919084565b6010818154811061143957600080fd5b600091825260209091200154905081565b8342111561146e57604051632341d78760e11b815260048101859052602401610b09565b60006114d06114c87fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf8989896040516020016114ad949392919061336c565b60405160208183030381529060405280519060200120612159565b858585612186565b90506114dc81876121b4565b6114e68188611fc2565b50505050505050565b60008051602061394783398151915261150781611aed565b815183511461154f5760405162461bcd60e51b8152602060048201526014602482015273161353d393ce88125b9d985b1a59081a5b9c1d5d60621b6044820152606401610b09565b6000805b84518110156115d15783818151811061156e5761156e6136c0565b602002602001015182611581919061369a565b91506115bf858281518110611598576115986136c0565b60200260200101518583815181106115b2576115b26136c0565b6020026020010151611f8c565b806115c9816136d6565b915050611553565b507fb855e7861d23f733a01b5ef88c39e1e6d5096e80ce56c088562d6695cf7af72b84846040516116039291906137d7565b60405180910390a150505050565b834211156116355760405163313c898160e11b815260048101859052602401610b09565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886116648c6121e5565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006116bf82612159565b905060006116cf82878787612186565b9050896001600160a01b0316816001600160a01b031614611716576040516325c0072360e11b81526001600160a01b0380831660048301528b166024820152604401610b09565b6117218a8a8a611ae0565b50505050505050505050565b6117368261086a565b61173f81611aed565b61089b8383611d62565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600060115483101561178857506000610768565b60108054611798906001906136ad565b815481106117a8576117a86136c0565b906000526020600020015483106117c0575080610768565b60125460115484036117eb576127106117d98285613837565b6117e39190613864565b915050610768565b60015b60105481101561198157846010828154811061180c5761180c6136c0565b906000526020600020015410156118cf57603c601061182c6001846136ad565b8154811061183c5761183c6136c0565b90600052602060002001546010838154811061185a5761185a6136c0565b906000526020600020015461186f91906136ad565b6118799190613864565b60136000601061188a6001866136ad565b8154811061189a5761189a6136c0565b90600052602060002001548152602001908152602001600020546118be9190613837565b6118c8908361369a565b915061196f565b603c60106118de6001846136ad565b815481106118ee576118ee6136c0565b90600052602060002001548661190491906136ad565b61190e9190613864565b61191990600161369a565b60136000601061192a6001866136ad565b8154811061193a5761193a6136c0565b906000526020600020015481526020019081526020016000205461195e9190613837565b611968908361369a565b9150611981565b80611979816136d6565b9150506117ee565b5061271061198f8285613837565b6119999190613864565b949350505050565b60006119ac81611aed565b6001600160a01b0384166119f6576040516001600160a01b0384169083156108fc029084906000818181858888f193505050501580156119f0573d6000803e3d6000fd5b5061089b565b60405163a9059cbb60e01b81526001600160a01b0385169063a9059cbb90611a249086908690600401613793565b6020604051808303816000875af1158015611a43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6791906137ac565b5050505050565b611a7661300d565b6108638383612208565b600080516020613947833981519152611a9881611aed565b611aa28383611f8c565b7fb649c98f58055c520df0dcb5709eff2e931217ff2fb1e21376130d31bbb1c0af8383604051611ad3929190613793565b60405180910390a1505050565b6108e38383836001612232565b610b6d8133612307565b6000611b038484611749565b9050600019811461089b5781811015611b3557828183604051637dc7a0d960e11b8152600401610b0993929190613886565b61089b84848484036000612232565b6001600160a01b038316611b6e576000604051634b637e8f60e11b8152600401610b099190613254565b6001600160a01b038216611b9857600060405163ec442f0560e01b8152600401610b099190613254565b6108e3838383612332565b6000611baf83836112d6565b611c2f5760008381526006602090815260408083206001600160a01b03861684529091529020805460ff19166001179055611be73390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610768565b506000610768565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611c9057507f000000000000000000000000000000000000000000000000000000000000000046145b15611cba57507f000000000000000000000000000000000000000000000000000000000000000090565b6108ab604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b6000611d6e83836112d6565b15611c2f5760008381526006602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610768565b6000610768825490565b600061086383836123ec565b600065ffffffffffff821115611e13576030826040516306dfcc6560e41b8152600401610b099291906138a7565b5090565b815460009081816005811115611e76576000611e3284612416565b611e3c90856136ad565b60008881526020902090915081015465ffffffffffff9081169087161015611e6657809150611e74565b611e7181600161369a565b92505b505b6000611e84878785856124fe565b90508015611ebf57611ea987611e9b6001846136ad565b600091825260209091200190565b54600160301b90046001600160d01b0316611ec2565b60005b979650505050505050565b611ed5612560565b6005805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b604051611f0f9190613254565b60405180910390a1565b6001600160a01b038216611f43576000604051634b637e8f60e11b8152600401610b099190613254565b610d6482600083612332565b60006108ab43611de5565b60055460ff1615611f7e5760405163d93c066560e01b815260040160405180910390fd5b565b60006108638383612583565b6001600160a01b038216611fb657600060405163ec442f0560e01b8152600401610b099190613254565b610d6460008383612332565b6000611fcd83610d3b565b6001600160a01b038481166000818152600a602052604080822080546001600160a01b031916888616908117909155905194955093928516927f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a46108e381836120388661267d565b612688565b6001600160a01b0381166000908152600b6020526040812054610768906127be565b600061086383836127ea565b6001600160a01b038116600090815260096020526040812054610768565b612091611f5a565b6005805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611f023390565b60606108ab7f00000000000000000000000000000000000000000000000000000000000000006007612831565b60606108ab7f00000000000000000000000000000000000000000000000000000000000000006008612831565b805460009080156121505761213a83611e9b6001846136ad565b54600160301b90046001600160d01b0316610863565b60009392505050565b6000610768612166611c37565b8360405161190160f01b8152600281019290925260228201526042902090565b600080600080612198888888886128dc565b9250925092506121a882826129a1565b50909695505050505050565b60006121bf836121e5565b90508082146108e35782816040516301d4b62360e61b8152600401610b09929190613793565b6001600160a01b0316600090815260096020526040902080546001810190915590565b61221061300d565b6001600160a01b0383166000908152600b602052604090206108639083612a5a565b6001600160a01b03841661225c57600060405163e602df0560e01b8152600401610b099190613254565b6001600160a01b038316612286576000604051634a1406b160e11b8152600401610b099190613254565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561089b57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516122f991815260200190565b60405180910390a350505050565b61231182826112d6565b610d6457808260405163e2517d3f60e01b8152600401610b09929190613793565b6001600160a01b038316158061234f57506001600160a01b038216155b8061237257506001600160a01b0383166000908152600e602052604090205460ff165b8061239557506001600160a01b0382166000908152600e602052604090205460ff165b6123e15760405162461bcd60e51b815260206004820152601e60248201527f584d4f4e4f3a204e6f7420616c6c6f77656420746f207472616e7366657200006044820152606401610b09565b6108e3838383612abe565b6000826000018281548110612403576124036136c0565b9060005260206000200154905092915050565b60008160000361242857506000919050565b6000600161243584612b1f565b901c6001901b9050600181848161244e5761244e61384e565b048201901c905060018184816124665761246661384e565b048201901c9050600181848161247e5761247e61384e565b048201901c905060018184816124965761249661384e565b048201901c905060018184816124ae576124ae61384e565b048201901c905060018184816124c6576124c661384e565b048201901c905060018184816124de576124de61384e565b048201901c9050610863818285816124f8576124f861384e565b04612bb3565b60005b818310156125585760006125158484612bc9565b60008781526020902090915065ffffffffffff86169082015465ffffffffffff16111561254457809250612552565b61254f81600161369a565b93505b50612501565b509392505050565b60055460ff16611f7e57604051638dfc202b60e01b815260040160405180910390fd5b6000818152600183016020526040812054801561266c5760006125a76001836136ad565b85549091506000906125bb906001906136ad565b90508082146126205760008660000182815481106125db576125db6136c0565b90600052602060002001549050808760000184815481106125fe576125fe6136c0565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612631576126316138ba565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610768565b6000915050610768565b5092915050565b600061076882610daa565b816001600160a01b0316836001600160a01b0316141580156126aa5750600081115b156108e3576001600160a01b03831615612737576001600160a01b0383166000908152600b6020526040812081906126ed90612be46126e886612bf0565b612c1f565b6001600160d01b031691506001600160d01b03169150846001600160a01b0316600080516020613967833981519152838360405161272c9291906137c9565b60405180910390a250505b6001600160a01b038216156108e3576001600160a01b0382166000908152600b60205260408120819061277090612c586126e886612bf0565b6001600160d01b031691506001600160d01b03169150836001600160a01b031660008051602061396783398151915283836040516127af9291906137c9565b60405180910390a25050505050565b600063ffffffff821115611e13576020826040516306dfcc6560e41b8152600401610b099291906138a7565b6000818152600183016020526040812054611c2f57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610768565b606060ff831461284b5761284483612c64565b9050610768565b8180546128579061364a565b80601f01602080910402602001604051908101604052809291908181526020018280546128839061364a565b80156128d05780601f106128a5576101008083540402835291602001916128d0565b820191906000526020600020905b8154815290600101906020018083116128b357829003601f168201915b50505050509050610768565b600080806fa2a8918ca85bafe22016d0b997e4df60600160ff1b0384111561290d5750600091506003905082612997565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015612961573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661298d57506000925060019150829050612997565b9250600091508190505b9450945094915050565b60008260038111156129b5576129b56138d0565b036129be575050565b60018260038111156129d2576129d26138d0565b036129f05760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115612a0457612a046138d0565b03612a255760405163fce698f760e01b815260048101829052602401610b09565b6003826003811115612a3957612a396138d0565b03610d64576040516335e2f38360e21b815260048101829052602401610b09565b612a6261300d565b826000018263ffffffff1681548110612a7d57612a7d6136c0565b60009182526020918290206040805180820190915291015465ffffffffffff81168252600160301b90046001600160d01b0316918101919091529392505050565b612ac9838383612ca3565b6001600160a01b038316612b14576000612ae260025490565b90506001600160d01b0380821115612b11578181604051630e58ae9360e11b8152600401610b099291906137c9565b50505b6108e3838383612cb6565b600080608083901c15612b3457608092831c92015b604083901c15612b4657604092831c92015b602083901c15612b5857602092831c92015b601083901c15612b6a57601092831c92015b600883901c15612b7c57600892831c92015b600483901c15612b8e57600492831c92015b600283901c15612ba057600292831c92015b600183901c156107685760010192915050565b6000818310612bc25781610863565b5090919050565b6000612bd86002848418613864565b6108639084841661369a565b600061086382846138e6565b60006001600160d01b03821115611e135760d0826040516306dfcc6560e41b8152600401610b099291906138a7565b600080612c4b612c2d611301565b612c43612c3988612120565b868863ffffffff16565b879190612d15565b915091505b935093915050565b60006108638284613906565b60606000612c7183612d23565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b612cab611f5a565b6108e3838383612d4b565b6001600160a01b038316612cd857612cd5600c612c586126e884612bf0565b50505b6001600160a01b038216612cfa57612cf7600c612be46126e884612bf0565b50505b6108e3612d0684610d3b565b612d0f84610d3b565b83612688565b600080612c4b858585612e62565b600060ff8216601f81111561076857604051632cd44ac360e21b815260040160405180910390fd5b6001600160a01b038316612d76578060026000828254612d6b919061369a565b90915550612dd59050565b6001600160a01b03831660009081526020819052604090205481811015612db65783818360405163391434e360e21b8152600401610b0993929190613886565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216612df157600280548290039055612e10565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612e5591815260200190565b60405180910390a3505050565b825460009081908015612f81576000612e8087611e9b6001856136ad565b60408051808201909152905465ffffffffffff808216808452600160301b9092046001600160d01b031660208401529192509087161015612ed457604051632520601d60e01b815260040160405180910390fd5b805165ffffffffffff808816911603612f205784612ef788611e9b6001866136ad565b80546001600160d01b0392909216600160301b0265ffffffffffff909216919091179055612f71565b6040805180820190915265ffffffffffff80881682526001600160d01b0380881660208085019182528b54600181018d5560008d81529190912094519151909216600160301b029216919091179101555b602001519250839150612c509050565b50506040805180820190915265ffffffffffff80851682526001600160d01b0380851660208085019182528854600181018a5560008a815291822095519251909316600160301b029190931617920191909155905081612c50565b60405180608001604052806000815260200160006001600160a01b0316815260200160008152602001600081525090565b604080518082019091526000808252602082015290565b60006020828403121561303657600080fd5b81356001600160e01b03198116811461086357600080fd5b6000815180845260005b8181101561307457602081850181015186830182015201613058565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610863602083018461304e565b80356001600160a01b03811681146130be57600080fd5b919050565b600080604083850312156130d657600080fd5b6130df836130a7565b946020939093013593505050565b8015158114610b6d57600080fd5b60006020828403121561310d57600080fd5b8135610863816130ed565b60008060006060848603121561312d57600080fd5b613136846130a7565b9250613144602085016130a7565b9150604084013590509250925092565b60006020828403121561316657600080fd5b5035919050565b6000806040838503121561318057600080fd5b82359150613190602084016130a7565b90509250929050565b6000806000606084860312156131ae57600080fd5b6131b7846130a7565b95602085013595506040909401359392505050565b602080825282518282018190526000919060409081850190868401855b8281101561322c57815180518552868101516001600160a01b031687860152858101518686015260609081015190850152608090930192908501906001016131e9565b5091979650505050505050565b60006020828403121561324b57600080fd5b610863826130a7565b6001600160a01b0391909116815260200190565b6000806040838503121561327b57600080fd5b613284836130a7565b91506020830135613294816130ed565b809150509250929050565b600080604083850312156132b257600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b838110156132f1578151875295820195908201906001016132d5565b509495945050505050565b60ff60f81b8816815260e06020820152600061331b60e083018961304e565b828103604084015261332d818961304e565b606084018890526001600160a01b038716608085015260a0840186905283810360c0850152905061335e81856132c1565b9a9950505050505050505050565b9384526001600160a01b039290921660208401526040830152606082015260800190565b803560ff811681146130be57600080fd5b60008060008060008060c087890312156133ba57600080fd5b6133c3876130a7565b955060208701359450604087013593506133df60608801613390565b92506080870135915060a087013590509295509295509295565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715613437576134376133f9565b604052919050565b60006001600160401b03821115613458576134586133f9565b5060051b60200190565b600082601f83011261347357600080fd5b813560206134886134838361343f565b61340f565b82815260059290921b840181019181810190868411156134a757600080fd5b8286015b84811015610a9757803583529183019183016134ab565b600080604083850312156134d557600080fd5b82356001600160401b03808211156134ec57600080fd5b818501915085601f83011261350057600080fd5b813560206135106134838361343f565b82815260059290921b8401810191818101908984111561352f57600080fd5b948201945b8386101561355457613545866130a7565b82529482019490820190613534565b9650508601359250508082111561356a57600080fd5b5061357785828601613462565b9150509250929050565b600080600080600080600060e0888a03121561359c57600080fd5b6135a5886130a7565b96506135b3602089016130a7565b955060408801359450606088013593506135cf60808901613390565b925060a0880135915060c0880135905092959891949750929550565b600080604083850312156135fe57600080fd5b613607836130a7565b9150613190602084016130a7565b6000806040838503121561362857600080fd5b613631836130a7565b9150602083013563ffffffff8116811461329457600080fd5b600181811c9082168061365e57607f821691505b60208210810361367e57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561076857610768613684565b8181038181111561076857610768613684565b634e487b7160e01b600052603260045260246000fd5b6000600182016136e8576136e8613684565b5060010190565b91825265ffffffffffff16602082015260400190565b6020808252601790820152762c26a7a7279d102737ba103932b232b2b69037bbb732b960491b604082015260600190565b602080825260159082015274584d4f4e4f3a2052656465656d206e6f7468696e6760581b604082015260600190565b602080825260149082015273161353d393ce8814995919595b481c185d5cd95960621b604082015260600190565b6001600160a01b03929092168252602082015260400190565b6000602082840312156137be57600080fd5b8151610863816130ed565b918252602082015260400190565b604080825283519082018190526000906020906060840190828701845b828110156138195781516001600160a01b0316845292840192908401906001016137f4565b5050508381038285015261382d81866132c1565b9695505050505050565b808202811582820484141761076857610768613684565b634e487b7160e01b600052601260045260246000fd5b60008261388157634e487b7160e01b600052601260045260246000fd5b500490565b6001600160a01b039390931683526020830191909152604082015260600190565b60ff929092168252602082015260400190565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b6001600160d01b0382811682821603908082111561267657612676613684565b6001600160d01b038181168382160190808211156126765761267661368456fe65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6dec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724a2646970667358221220356458b74fd1cd56ae671512ac10597dfd67dbd9cc15e16ce78af40f0957f6e564736f6c63430008140033