[ { "inputs": [ { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "symbol", "type": "string" }, { "internalType": "string", "name": "baseTokenURI", "type": "string" }, { "internalType": "uint256", "name": "max", "type": "uint256" }, { "internalType": "address", "name": "admin", "type": "address" }, { "internalType": "address", "name": "signer", "type": "address" }, { "internalType": "contract IERC721", "name": "astroPoints", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "approved", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "ApprovalForAll", "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": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_admin", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_astroPoints", "outputs": [ { "internalType": "contract IERC721", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_mintOpen", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_signer", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_tokenIdTracker", "outputs": [ { "internalType": "uint256", "name": "_value", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "tokenIDs", "type": "uint256[]" }, { "internalType": "address", "name": "user", "type": "address" } ], "name": "getCurrentMessageToSign", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "tokenIDs", "type": "uint256[]" }, { "internalType": "address", "name": "user", "type": "address" } ], "name": "getMessageHash", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleAdmin", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "getRoleMember", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleMemberCount", "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": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "tokenIDs", "type": "uint256[]" }, { "internalType": "bytes", "name": "signature", "type": "bytes" } ], "name": "mint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "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": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "_ethSignedMessageHash", "type": "bytes32" }, { "internalType": "bytes", "name": "_signature", "type": "bytes" } ], "name": "recoverSigner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "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": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "bytes", "name": "_data", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "baseURI", "type": "string" } ], "name": "setBaseURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "mintOpen", "type": "bool" } ], "name": "setMint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "signer", "type": "address" } ], "name": "setSigner", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "string", "name": "_tokenURI", "type": "string" } ], "name": "setTokenURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes", "name": "sig", "type": "bytes" } ], "name": "splitSignature", "outputs": [ { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" }, { "internalType": "uint8", "name": "v", "type": "uint8" } ], "stateMutability": "pure", "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": "index", "type": "uint256" } ], "name": "tokenByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "tokenMinter", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "tokenOfOwnerByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "tokenURI", "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": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "transferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
60806040523480156200001157600080fd5b5060405162003347380380620033478339810160408190526200003491620003e4565b8651879087906200004d90600290602085019062000246565b5080516200006390600390602084019062000246565b505085516200007b9150600e90602088019062000246565b50600f849055601080546001600160a01b038086166001600160a01b031992831617909255601180548584166001600160a81b03199091161790556012805492841692909116919091179055620000d4600084620000e1565b50505050505050620004f9565b620000ed8282620000f1565b5050565b6200010882826200013460201b620012fa1760201c565b60008281526001602090815260409091206200012f9183906200137e620001d4821b17901c565b505050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff16620000ed576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620001903390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000620001eb836001600160a01b038416620001f4565b90505b92915050565b60008181526001830160205260408120546200023d57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620001ee565b506000620001ee565b8280546200025490620004bc565b90600052602060002090601f016020900481019282620002785760008555620002c3565b82601f106200029357805160ff1916838001178555620002c3565b82800160010185558215620002c3579182015b82811115620002c3578251825591602001919060010190620002a6565b50620002d1929150620002d5565b5090565b5b80821115620002d15760008155600101620002d6565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200031457600080fd5b81516001600160401b0380821115620003315762000331620002ec565b604051601f8301601f19908116603f011681019082821181831017156200035c576200035c620002ec565b816040528381526020925086838588010111156200037957600080fd5b600091505b838210156200039d57858201830151818301840152908201906200037e565b83821115620003af5760008385830101525b9695505050505050565b6001600160a01b0381168114620003cf57600080fd5b50565b8051620003df81620003b9565b919050565b600080600080600080600060e0888a0312156200040057600080fd5b87516001600160401b03808211156200041857600080fd5b620004268b838c0162000302565b985060208a01519150808211156200043d57600080fd5b6200044b8b838c0162000302565b975060408a01519150808211156200046257600080fd5b50620004718a828b0162000302565b9550506060880151935060808801516200048b81620003b9565b60a08901519093506200049e81620003b9565b9150620004ae60c08901620003d2565b905092959891949750929550565b600181811c90821680620004d157607f821691505b60208210811415620004f357634e487b7160e01b600052602260045260246000fd5b50919050565b612e3e80620005096000396000f3fe608060405234801561001057600080fd5b50600436106102485760003560e01c80637c57d9471161013b578063a7bb5803116100b8578063ca15c8731161007c578063ca15c87314610551578063ca29e8c814610564578063cd9a222814610577578063d547741f1461058b578063e985e9c51461059e57600080fd5b8063a7bb5803146104be578063ac8d856c146104ef578063b2ef802c14610518578063b88d4fde1461052b578063c87b56dd1461053e57600080fd5b806395d89b41116100ff57806395d89b411461047e57806397aba7f91461048657806398bcede914610499578063a217fddf146104a3578063a22cb465146104ab57600080fd5b80637c57d9471461040957806380a098ee146104325780638bb2513b146104455780639010d07c1461045857806391d148541461046b57600080fd5b80632f745c59116101c957806355f804b31161018d57806355f804b3146103aa5780636352211e146103bd5780636956c94c146103d05780636c19e783146103e357806370a08231146103f657600080fd5b80632f745c591461034b57806336568abe1461035e57806342842e0e14610371578063429ff28d146103845780634f6ccce71461039757600080fd5b8063162094c411610210578063162094c4146102dd57806318160ddd146102f057806323b872dd14610302578063248a9ca3146103155780632f2ff15d1461033857600080fd5b806301bc45c91461024d57806301ffc9a71461027d57806306fdde03146102a0578063081812fc146102b5578063095ea7b3146102c8575b600080fd5b601054610260906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61029061028b3660046125ba565b6105da565b6040519015158152602001610274565b6102a86105eb565b604051610274919061262f565b6102606102c3366004612642565b61067d565b6102db6102d6366004612677565b61070a565b005b6102db6102eb366004612744565b610820565b600a545b604051908152602001610274565b6102db61031036600461278b565b610899565b6102f4610323366004612642565b60009081526020819052604090206001015490565b6102db6103463660046127c7565b6108ca565b6102f4610359366004612677565b6108f0565b6102db61036c3660046127c7565b610986565b6102db61037f36600461278b565b610a00565b6102db610392366004612803565b610a1b565b6102f46103a5366004612642565b610aa4565b6102db6103b836600461281e565b610b37565b6102606103cb366004612642565b610bb5565b6102a86103de36600461289f565b610c2c565b6102db6103f13660046128f3565b610c5b565b6102f46104043660046128f3565b610ce8565b610260610417366004612642565b6000908152601360205260409020546001600160a01b031690565b6102f461044036600461289f565b610d6f565b6102db61045336600461290e565b610df4565b6102606104663660046129a5565b611105565b6102906104793660046127c7565b611124565b6102a861114d565b610260610494366004612744565b61115c565b600d546102f49081565b6102f4600081565b6102db6104b93660046129c7565b6111db565b6104d16104cc36600461281e565b6111e6565b60408051938452602084019290925260ff1690820152606001610274565b6102606104fd366004612642565b6013602052600090815260409020546001600160a01b031681565b601254610260906001600160a01b031681565b6102db6105393660046129f1565b61125a565b6102a861054c366004612642565b61128c565b6102f461055f366004612642565b6112bd565b601154610260906001600160a01b031681565b60115461029090600160a01b900460ff1681565b6102db6105993660046127c7565b6112d4565b6102906105ac366004612a59565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b60006105e582611393565b92915050565b6060600280546105fa90612a83565b80601f016020809104026020016040519081016040528092919081815260200182805461062690612a83565b80156106735780601f1061064857610100808354040283529160200191610673565b820191906000526020600020905b81548152906001019060200180831161065657829003601f168201915b5050505050905090565b6000610688826113b8565b6106ee5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600660205260409020546001600160a01b031690565b600061071582610bb5565b9050806001600160a01b0316836001600160a01b031614156107835760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016106e5565b336001600160a01b038216148061079f575061079f81336105ac565b6108115760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016106e5565b61081b83836113d5565b505050565b61082b600033611124565b61088b5760405162461bcd60e51b815260206004820152603a6024820152600080516020612de983398151915260448201527f6e20726f6c6520746f206368616e676520746f6b656e2055524900000000000060648201526084016106e5565b6108958282611443565b5050565b6108a333826114ce565b6108bf5760405162461bcd60e51b81526004016106e590612abe565b61081b8383836115b8565b6000828152602081905260409020600101546108e68133611763565b61081b83836117c7565b60006108fb83610ce8565b821061095d5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b60648201526084016106e5565b506001600160a01b03919091166000908152600860209081526040808320938352929052205490565b6001600160a01b03811633146109f65760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016106e5565b61089582826117e9565b61081b8383836040518060200160405280600081525061125a565b610a26600033611124565b610a865760405162461bcd60e51b815260206004820152603c6024820152600080516020612de983398151915260448201527f6e20726f6c6520746f206368616e6765206d696e74207374617475730000000060648201526084016106e5565b60118054911515600160a01b0260ff60a01b19909216919091179055565b6000610aaf600a5490565b8210610b125760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016106e5565b600a8281548110610b2557610b25612b0f565b90600052602060002001549050919050565b610b42600033611124565b610ba25760405162461bcd60e51b81526020600482015260396024820152600080516020612de983398151915260448201527f6e20726f6c6520746f206368616e67652062617365205552490000000000000060648201526084016106e5565b805161089590600e906020840190612508565b6000818152600460205260408120546001600160a01b0316806105e55760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016106e5565b6060838383604051602001610c4393929190612b25565b60405160208183030381529060405290509392505050565b610c66600033611124565b610cc65760405162461bcd60e51b81526020600482015260386024820152600080516020612de983398151915260448201527f6e6720726f6c6520746f206368616e6765207369676e6572000000000000000060648201526084016106e5565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b60006001600160a01b038216610d535760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016106e5565b506001600160a01b031660009081526005602052604090205490565b6000610d7c848484610c2c565b604051602001610d8c9190612b69565b60408051601f198184030181529082905280516020918201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000091830191909152603c820152605c016040516020818303038152906040528051906020012090509392505050565b601154600160a01b900460ff161515600114610e655760405162461bcd60e51b815260206004820152602a60248201527f4176614f6e65526564656d7074696f6e3a207075626c69632073616c65206e6f6044820152691d081bdc195b881e595d60b21b60648201526084016106e5565b600f54600d541115610ed85760405162461bcd60e51b815260206004820152603660248201527f4176614f6e65526564656d7074696f6e3a206e6f7420656e6f756768204e465460448201527509dcc81b19599d081d1bc81b5a5b9d08185b5bdd5b9d60521b60648201526084016106e5565b601e8314610f3b5760405162461bcd60e51b815260206004820152602a60248201527f4176614f6e65526564656d7074696f6e3a207265717569726520746f2073656e60448201526964203330204e4654277360b01b60648201526084016106e5565b610f85610f49858533610d6f565b83838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061115c92505050565b6011546001600160a01b03908116911614610fee5760405162461bcd60e51b815260206004820152602360248201527f4176614f6e65526564656d7074696f6e3a20696e76616c6964207369676e617460448201526275726560e81b60648201526084016106e5565b60005b8381101561109e576012546001600160a01b03166323b872dd333088888681811061101e5761101e612b0f565b6040516001600160e01b031960e088901b1681526001600160a01b03958616600482015294909316602485015250602090910201356044820152606401600060405180830381600087803b15801561107557600080fd5b505af1158015611089573d6000803e3d6000fd5b505050508061109790612b9b565b9050610ff1565b506110b1336110ac600d5490565b61180b565b33601360006110bf600d5490565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055506110ff600d80546001019055565b50505050565b600082815260016020526040812061111d908361194a565b9392505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b6060600380546105fa90612a83565b60008060008061116b856111e6565b6040805160008152602081018083528b905260ff8316918101919091526060810184905260808101839052929550909350915060019060a0016020604051602081039080840390855afa1580156111c6573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b610895338383611956565b6000806000835160411461123c5760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964207369676e6174757265206c656e677468000000000000000060448201526064016106e5565b50505060208101516040820151606090920151909260009190911a90565b61126433836114ce565b6112805760405162461bcd60e51b81526004016106e590612abe565b6110ff84848484611a25565b606061129782611a58565b6040516020016112a79190612bb6565b6040516020818303038152906040529050919050565b60008181526001602052604081206105e590611bba565b6000828152602081905260409020600101546112f08133611763565b61081b83836117e9565b6113048282611124565b610895576000828152602081815260408083206001600160a01b03851684529091529020805460ff1916600117905561133a3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b600061111d836001600160a01b038416611bc4565b60006001600160e01b0319821663780e9d6360e01b14806105e557506105e582611c13565b6000908152600460205260409020546001600160a01b0316151590565b600081815260066020526040902080546001600160a01b0319166001600160a01b038416908117909155819061140a82610bb5565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b61144c826113b8565b6114af5760405162461bcd60e51b815260206004820152602e60248201527f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60448201526d32bc34b9ba32b73a103a37b5b2b760911b60648201526084016106e5565b6000828152600c60209081526040909120825161081b92840190612508565b60006114d9826113b8565b61153a5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016106e5565b600061154583610bb5565b9050806001600160a01b0316846001600160a01b031614806115805750836001600160a01b03166115758461067d565b6001600160a01b0316145b806115b057506001600160a01b0380821660009081526007602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166115cb82610bb5565b6001600160a01b0316146116335760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016106e5565b6001600160a01b0382166116955760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016106e5565b6116a0838383611c53565b6116ab6000826113d5565b6001600160a01b03831660009081526005602052604081208054600192906116d4908490612bdf565b90915550506001600160a01b0382166000908152600560205260408120805460019290611702908490612bf6565b909155505060008181526004602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b61176d8282611124565b61089557611785816001600160a01b03166014611c5e565b611790836020611c5e565b6040516020016117a1929190612c0e565b60408051601f198184030181529082905262461bcd60e51b82526106e59160040161262f565b6117d182826112fa565b600082815260016020526040902061081b908261137e565b6117f38282611dfa565b600082815260016020526040902061081b9082611e5f565b6001600160a01b0382166118615760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016106e5565b61186a816113b8565b156118b75760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016106e5565b6118c360008383611c53565b6001600160a01b03821660009081526005602052604081208054600192906118ec908490612bf6565b909155505060008181526004602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600061111d8383611e74565b816001600160a01b0316836001600160a01b031614156119b85760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016106e5565b6001600160a01b03838116600081815260076020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611a308484846115b8565b611a3c84848484611e9e565b6110ff5760405162461bcd60e51b81526004016106e590612c83565b6060611a63826113b8565b611ac95760405162461bcd60e51b815260206004820152603160248201527f45524337323155524953746f726167653a2055524920717565727920666f72206044820152703737b732bc34b9ba32b73a103a37b5b2b760791b60648201526084016106e5565b6000828152600c602052604081208054611ae290612a83565b80601f0160208091040260200160405190810160405280929190818152602001828054611b0e90612a83565b8015611b5b5780601f10611b3057610100808354040283529160200191611b5b565b820191906000526020600020905b815481529060010190602001808311611b3e57829003601f168201915b505050505090506000611b6c611f9c565b9050805160001415611b7f575092915050565b815115611bb1578082604051602001611b99929190612cd5565b60405160208183030381529060405292505050919050565b6115b084611fab565b60006105e5825490565b6000818152600183016020526040812054611c0b575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556105e5565b5060006105e5565b60006001600160e01b031982166380ac58cd60e01b1480611c4457506001600160e01b03198216635b5e139f60e01b145b806105e557506105e582612075565b61081b83838361209a565b60606000611c6d836002612d04565b611c78906002612bf6565b67ffffffffffffffff811115611c9057611c906126a1565b6040519080825280601f01601f191660200182016040528015611cba576020820181803683370190505b509050600360fc1b81600081518110611cd557611cd5612b0f565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611d0457611d04612b0f565b60200101906001600160f81b031916908160001a9053506000611d28846002612d04565b611d33906001612bf6565b90505b6001811115611dab576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611d6757611d67612b0f565b1a60f81b828281518110611d7d57611d7d612b0f565b60200101906001600160f81b031916908160001a90535060049490941c93611da481612d23565b9050611d36565b50831561111d5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016106e5565b611e048282611124565b15610895576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600061111d836001600160a01b038416612152565b6000826000018281548110611e8b57611e8b612b0f565b9060005260206000200154905092915050565b60006001600160a01b0384163b15611f9157604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611ee2903390899088908890600401612d3a565b6020604051808303816000875af1925050508015611f1d575060408051601f3d908101601f19168201909252611f1a91810190612d77565b60015b611f77573d808015611f4b576040519150601f19603f3d011682016040523d82523d6000602084013e611f50565b606091505b508051611f6f5760405162461bcd60e51b81526004016106e590612c83565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506115b0565b506001949350505050565b6060600e80546105fa90612a83565b6060611fb6826113b8565b61201a5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016106e5565b6000612024611f9c565b90506000815111612044576040518060200160405280600081525061111d565b8061204e84612245565b60405160200161205f929190612cd5565b6040516020818303038152906040529392505050565b60006001600160e01b03198216635a05180f60e01b14806105e557506105e582612343565b6001600160a01b0383166120f5576120f081600a80546000838152600b60205260408120829055600182018355919091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80155565b612118565b816001600160a01b0316836001600160a01b031614612118576121188382612378565b6001600160a01b03821661212f5761081b81612415565b826001600160a01b0316826001600160a01b03161461081b5761081b82826124c4565b6000818152600183016020526040812054801561223b576000612176600183612bdf565b855490915060009061218a90600190612bdf565b90508181146121ef5760008660000182815481106121aa576121aa612b0f565b90600052602060002001549050808760000184815481106121cd576121cd612b0f565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061220057612200612d94565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506105e5565b60009150506105e5565b6060816122695750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612293578061227d81612b9b565b915061228c9050600a83612dc0565b915061226d565b60008167ffffffffffffffff8111156122ae576122ae6126a1565b6040519080825280601f01601f1916602001820160405280156122d8576020820181803683370190505b5090505b84156115b0576122ed600183612bdf565b91506122fa600a86612dd4565b612305906030612bf6565b60f81b81838151811061231a5761231a612b0f565b60200101906001600160f81b031916908160001a90535061233c600a86612dc0565b94506122dc565b60006001600160e01b03198216637965db0b60e01b14806105e557506301ffc9a760e01b6001600160e01b03198316146105e5565b6000600161238584610ce8565b61238f9190612bdf565b6000838152600960205260409020549091508082146123e2576001600160a01b03841660009081526008602090815260408083208584528252808320548484528184208190558352600990915290208190555b5060009182526009602090815260408084208490556001600160a01b039094168352600881528383209183525290812055565b600a5460009061242790600190612bdf565b6000838152600b6020526040812054600a805493945090928490811061244f5761244f612b0f565b9060005260206000200154905080600a838154811061247057612470612b0f565b6000918252602080832090910192909255828152600b9091526040808220849055858252812055600a8054806124a8576124a8612d94565b6001900381819060005260206000200160009055905550505050565b60006124cf83610ce8565b6001600160a01b039093166000908152600860209081526040808320868452825280832085905593825260099052919091209190915550565b82805461251490612a83565b90600052602060002090601f016020900481019282612536576000855561257c565b82601f1061254f57805160ff191683800117855561257c565b8280016001018555821561257c579182015b8281111561257c578251825591602001919060010190612561565b5061258892915061258c565b5090565b5b80821115612588576000815560010161258d565b6001600160e01b0319811681146125b757600080fd5b50565b6000602082840312156125cc57600080fd5b813561111d816125a1565b60005b838110156125f25781810151838201526020016125da565b838111156110ff5750506000910152565b6000815180845261261b8160208601602086016125d7565b601f01601f19169290920160200192915050565b60208152600061111d6020830184612603565b60006020828403121561265457600080fd5b5035919050565b80356001600160a01b038116811461267257600080fd5b919050565b6000806040838503121561268a57600080fd5b6126938361265b565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126126c857600080fd5b813567ffffffffffffffff808211156126e3576126e36126a1565b604051601f8301601f19908116603f0116810190828211818310171561270b5761270b6126a1565b8160405283815286602085880101111561272457600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806040838503121561275757600080fd5b82359150602083013567ffffffffffffffff81111561277557600080fd5b612781858286016126b7565b9150509250929050565b6000806000606084860312156127a057600080fd5b6127a98461265b565b92506127b76020850161265b565b9150604084013590509250925092565b600080604083850312156127da57600080fd5b823591506127ea6020840161265b565b90509250929050565b8035801515811461267257600080fd5b60006020828403121561281557600080fd5b61111d826127f3565b60006020828403121561283057600080fd5b813567ffffffffffffffff81111561284757600080fd5b6115b0848285016126b7565b60008083601f84011261286557600080fd5b50813567ffffffffffffffff81111561287d57600080fd5b6020830191508360208260051b850101111561289857600080fd5b9250929050565b6000806000604084860312156128b457600080fd5b833567ffffffffffffffff8111156128cb57600080fd5b6128d786828701612853565b90945092506128ea90506020850161265b565b90509250925092565b60006020828403121561290557600080fd5b61111d8261265b565b6000806000806040858703121561292457600080fd5b843567ffffffffffffffff8082111561293c57600080fd5b61294888838901612853565b9096509450602087013591508082111561296157600080fd5b818701915087601f83011261297557600080fd5b81358181111561298457600080fd5b88602082850101111561299657600080fd5b95989497505060200194505050565b600080604083850312156129b857600080fd5b50508035926020909101359150565b600080604083850312156129da57600080fd5b6129e38361265b565b91506127ea602084016127f3565b60008060008060808587031215612a0757600080fd5b612a108561265b565b9350612a1e6020860161265b565b925060408501359150606085013567ffffffffffffffff811115612a4157600080fd5b612a4d878288016126b7565b91505092959194509250565b60008060408385031215612a6c57600080fd5b612a758361265b565b91506127ea6020840161265b565b600181811c90821680612a9757607f821691505b60208210811415612ab857634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60006001600160fb1b03841115612b3b57600080fd5b8360051b8086843760609390931b6bffffffffffffffffffffffff1916919092019081526014019392505050565b60008251612b7b8184602087016125d7565b9190910192915050565b634e487b7160e01b600052601160045260246000fd5b6000600019821415612baf57612baf612b85565b5060010190565b60008251612bc88184602087016125d7565b64173539b7b760d91b920191825250600501919050565b600082821015612bf157612bf1612b85565b500390565b60008219821115612c0957612c09612b85565b500190565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612c468160178501602088016125d7565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612c778160288401602088016125d7565b01602801949350505050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60008351612ce78184602088016125d7565b835190830190612cfb8183602088016125d7565b01949350505050565b6000816000190483118215151615612d1e57612d1e612b85565b500290565b600081612d3257612d32612b85565b506000190190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612d6d90830184612603565b9695505050505050565b600060208284031215612d8957600080fd5b815161111d816125a1565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b600082612dcf57612dcf612daa565b500490565b600082612de357612de3612daa565b50069056fe4176614f6e65526564656d7074696f6e3a206d75737420686176652061646d69a26469706673582212204c99830a391a870a4be6638adf832990fd0f11543a4436116eeed43a7567972d64736f6c634300080a003300000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000003e80000000000000000000000001c89715dc75e08ea495fdff6c7dee74a151d80550000000000000000000000000ff7f6d9f41b01a6b1abe0c7c7a2cd45cca6168f0000000000000000000000004b878a8e4bad7d4d29deb3e61cb0c1496bbd9f9200000000000000000000000000000000000000000000000000000000000000114176614f6e6520526564656d7074696f6e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003414f5200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d637557317733706e76647878716a4b4737324a45765637364d7434546666437578785356696a6b4b696d73332f00000000000000000000