[ { "inputs": [ { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "string", "name": "_symbol", "type": "string" }, { "internalType": "string", "name": "baseTokenURI", "type": "string" } ], "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": "ERC721EnumerableForbiddenBatchMint", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC721IncorrectOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ERC721InsufficientApproval", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC721InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" } ], "name": "ERC721InvalidOperator", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC721InvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC721InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC721InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ERC721NonexistentToken", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "ERC721OutOfBoundsIndex", "type": "error" }, { "inputs": [], "name": "EnforcedPause", "type": "error" }, { "inputs": [], "name": "ExpectedPause", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "OwnableInvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "OwnableUnauthorizedAccount", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "_account", "type": "address" } ], "name": "AddedBlackList", "type": "event" }, { "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": false, "internalType": "string", "name": "previousBaseURI", "type": "string" }, { "indexed": false, "internalType": "string", "name": "newBaseURI", "type": "string" } ], "name": "BaseURIUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Paused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "_account", "type": "address" } ], "name": "RemovedBlackList", "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" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Unpaused", "type": "event" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "HATCHER_ROLE", "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": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "addBlackList", "outputs": [], "stateMutability": "nonpayable", "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": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "didHatch", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "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": "tokenId", "type": "uint256" } ], "name": "getMintTimestamp", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" } ], "name": "getRarities", "outputs": [ { "internalType": "enum PalToken.Rarity[]", "name": "", "type": "uint8[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getRarity", "outputs": [ { "internalType": "enum PalToken.Rarity", "name": "", "type": "uint8" } ], "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": "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": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "hatch", "outputs": [], "stateMutability": "nonpayable", "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": "address", "name": "", "type": "address" } ], "name": "isBlackListed", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "enum PalToken.Rarity", "name": "rarity", "type": "uint8" } ], "name": "mint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "paused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "removeBlackList", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "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": "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": "newBaseTokenURI", "type": "string" } ], "name": "setBaseURI", "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": "index", "type": "uint256" } ], "name": "tokenByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "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" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "unpause", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
60806040523480156200001157600080fd5b5060405162002b7c38038062002b7c8339810160408190526200003491620002fe565b828233806200005d57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6200006881620000b9565b50600362000077838262000420565b50600462000086828262000420565b5050600d805460ff19169055506010620000a1828262000420565b50620000af60003362000109565b50505050620004ec565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008062000118848462000146565b905080156200013d5760008481526002602052604090206200013b9084620001dc565b505b90505b92915050565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff16620001d35760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a450600162000140565b50600062000140565b60006200013d836001600160a01b0384166000818152600183016020526040812054620001d35750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000140565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200025e57600080fd5b81516001600160401b03808211156200027b576200027b62000236565b604051601f8301601f19908116603f01168101908282118183101715620002a657620002a662000236565b8160405283815260209250866020858801011115620002c457600080fd5b600091505b83821015620002e85785820183015181830184015290820190620002c9565b6000602085830101528094505050505092915050565b6000806000606084860312156200031457600080fd5b83516001600160401b03808211156200032c57600080fd5b6200033a878388016200024c565b945060208601519150808211156200035157600080fd5b6200035f878388016200024c565b935060408601519150808211156200037657600080fd5b5062000385868287016200024c565b9150509250925092565b600181811c90821680620003a457607f821691505b602082108103620003c557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200041b576000816000526020600020601f850160051c81016020861015620003f65750805b601f850160051c820191505b81811015620004175782815560010162000402565b5050505b505050565b81516001600160401b038111156200043c576200043c62000236565b62000454816200044d84546200038f565b84620003cb565b602080601f8311600181146200048c5760008415620004735750858301515b600019600386901b1c1916600185901b17855562000417565b600085815260208120601f198616915b82811015620004bd578886015182559484019460019091019084016200049c565b5085821015620004dc5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61268080620004fc6000396000f3fe608060405234801561001057600080fd5b50600436106102695760003560e01c80636e8b787c11610151578063a22cb465116100c3578063d539139311610087578063d53913931461055b578063d547741f14610582578063e47d606014610595578063e4997dc5146105b8578063e985e9c5146105cb578063f2fde38b146105de57600080fd5b8063a22cb465146104fc578063b88d4fde1461050f578063c87b56dd14610522578063c8c1884214610535578063ca15c8731461054857600080fd5b80638456cb59116101155780638456cb59146104ad5780638da5cb5b146104b55780639010d07c146104c657806391d14854146104d957806395d89b41146104ec578063a217fddf146104f457600080fd5b80636e8b787c1461043857806370a082311461044b578063715018a61461045e57806371b9faf7146104665780637aff86791461048657600080fd5b806336568abe116101ea5780634f6ccce7116101ae5780634f6ccce7146103ce57806355f804b3146103e15780635c975abb146103f45780636352211e146103ff578063691562a0146104125780636c3609231461042557600080fd5b806336568abe1461036d5780633f4ba83a1461038057806342842e0e1461038857806342966c681461039b57806348758697146103ae57600080fd5b806318160ddd1161023157806318160ddd146102fe57806323b872dd14610310578063248a9ca3146103235780632f2ff15d146103475780632f745c591461035a57600080fd5b806301ffc9a71461026e57806306fdde0314610296578063081812fc146102ab578063095ea7b3146102d65780630ecb93c0146102eb575b600080fd5b61028161027c366004611f3d565b6105f1565b60405190151581526020015b60405180910390f35b61029e610602565b60405161028d9190611faa565b6102be6102b9366004611fbd565b610694565b6040516001600160a01b03909116815260200161028d565b6102e96102e4366004611ff2565b6106bd565b005b6102e96102f936600461201c565b6106cc565b600b545b60405190815260200161028d565b6102e961031e366004612037565b6106e0565b610302610331366004611fbd565b6000908152600160208190526040909120015490565b6102e9610355366004612073565b610770565b610302610368366004611ff2565b610796565b6102e961037b366004612073565b6107fb565b6102e9610833565b6102e9610396366004612037565b610845565b6102e96103a9366004611fbd565b610860565b6103c16103bc366004611fbd565b61086c565b60405161028d91906120d7565b6103026103dc366004611fbd565b6108b6565b6102e96103ef366004612171565b61090f565b600d5460ff16610281565b6102be61040d366004611fbd565b6109f3565b6102e96104203660046121ba565b6109fe565b610302610433366004611fbd565b610aee565b610281610446366004611fbd565b610b35565b61030261045936600461201c565b610b7f565b6102e9610bc7565b6104796104743660046121f5565b610bd9565b60405161028d919061226a565b6103027f58df8a07eb0b908a8fb06fa62288d964ea1cbecee32d5c5921cec0eda0de5bee81565b6102e9610ca5565b6000546001600160a01b03166102be565b6102be6104d43660046122b5565b610cb5565b6102816104e7366004612073565b610cd4565b61029e610cff565b610302600081565b6102e961050a3660046122d7565b610d0e565b6102e961051d366004612308565b610d19565b61029e610530366004611fbd565b610d30565b6102e9610543366004611fbd565b610d97565b610302610556366004611fbd565b610e42565b6103027f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b6102e9610590366004612073565b610e59565b6102816105a336600461201c565b600e6020526000908152604090205460ff1681565b6102e96105c636600461201c565b610e7f565b6102816105d9366004612384565b610e90565b6102e96105ec36600461201c565b610ebe565b60006105fc82610ef9565b92915050565b606060038054610611906123ae565b80601f016020809104026020016040519081016040528092919081815260200182805461063d906123ae565b801561068a5780601f1061065f5761010080835404028352916020019161068a565b820191906000526020600020905b81548152906001019060200180831161066d57829003601f168201915b5050505050905090565b600061069f82610f1e565b506000828152600760205260409020546001600160a01b03166105fc565b6106c8828233610f57565b5050565b6106d4610f64565b6106dd81610f91565b50565b6001600160a01b03821661070f57604051633250574960e11b8152600060048201526024015b60405180910390fd5b600061071c838333610fec565b9050836001600160a01b0316816001600160a01b03161461076a576040516364283d7b60e01b81526001600160a01b0380861660048301526024820184905282166044820152606401610706565b50505050565b6000828152600160208190526040909120015461078c81611001565b61076a838361100b565b60006107a183610b7f565b82106107d25760405163295f44f760e21b81526001600160a01b038416600482015260248101839052604401610706565b506001600160a01b03919091166000908152600960209081526040808320938352929052205490565b6001600160a01b03811633146108245760405163334bd91960e11b815260040160405180910390fd5b61082e8282611038565b505050565b61083b610f64565b610843611065565b565b61082e83838360405180602001604052806000815250610d19565b6106c860008233610fec565b6000818152600560205260408120546001600160a01b03166108a05760405162461bcd60e51b8152600401610706906123e8565b5060009081526012602052604090205460ff1690565b60006108c1600b5490565b82106108ea5760405163295f44f760e21b81526000600482015260248101839052604401610706565b600b82815481106108fd576108fd61241f565b90600052602060002001549050919050565b610917610f64565b600060108054610926906123ae565b80601f0160208091040260200160405190810160405280929190818152602001828054610952906123ae565b801561099f5780601f106109745761010080835404028352916020019161099f565b820191906000526020600020905b81548152906001019060200180831161098257829003601f168201915b5050505050905081601090816109b59190612485565b507f309b29ded109b9e28fb9885757b3e0096eb75c51d23aa4635d68bcd569f6adc181836040516109e7929190612545565b60405180910390a15050565b60006105fc82610f1e565b610a066110b7565b610a307f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a633610cd4565b610a8c5760405162461bcd60e51b815260206004820152602760248201527f50616c546f6b656e3a206d7573742068617665206d696e74657220726f6c65206044820152661d1bc81b5a5b9d60ca1b6064820152608401610706565b600f80546000908152601160209081526040808320429055925482526012905220805482919060ff19166001836004811115610aca57610aca61209f565b0217905550600f80546106c8918491906000610ae583612589565b919050556110db565b6000818152600560205260408120546001600160a01b0316610b225760405162461bcd60e51b8152600401610706906123e8565b5060009081526011602052604090205490565b6000818152600560205260408120546001600160a01b0316610b695760405162461bcd60e51b8152600401610706906123e8565b5060009081526013602052604090205460ff1690565b60006001600160a01b038216610bab576040516322718ad960e21b815260006004820152602401610706565b506001600160a01b031660009081526006602052604090205490565b610bcf610f64565b61084360006110f5565b606060008267ffffffffffffffff811115610bf657610bf66120e5565b604051908082528060200260200182016040528015610c1f578160200160208202803683370190505b50905060005b83811015610c9d576000610c50868684818110610c4457610c4461241f565b9050602002013561086c565b905080838381518110610c6557610c6561241f565b60200260200101906004811115610c7e57610c7e61209f565b90816004811115610c9157610c9161209f565b90525050600101610c25565b509392505050565b610cad610f64565b610843611145565b6000828152600260205260408120610ccd9083611182565b9392505050565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b606060048054610611906123ae565b6106c833838361118e565b610d248484846106e0565b61076a8484848461122d565b6060610d3b82610f1e565b506000610d46611356565b90506000815111610d665760405180602001604052806000815250610ccd565b80610d7084611365565b604051602001610d819291906125a2565b6040516020818303038152906040529392505050565b610d9f6110b7565b610dc97f58df8a07eb0b908a8fb06fa62288d964ea1cbecee32d5c5921cec0eda0de5bee33610cd4565b610e275760405162461bcd60e51b815260206004820152602960248201527f50616c546f6b656e3a206d7573742068617665206861746368657220726f6c65604482015268040e8de40d0c2e8c6d60bb1b6064820152608401610706565b6000908152601360205260409020805460ff19166001179055565b60008181526002602052604081206105fc906113f8565b60008281526001602081905260409091200154610e7581611001565b61076a8383611038565b610e87610f64565b6106dd81611402565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205460ff1690565b610ec6610f64565b6001600160a01b038116610ef057604051631e4fbdf760e01b815260006004820152602401610706565b6106dd816110f5565b60006001600160e01b0319821663780e9d6360e01b14806105fc57506105fc82611453565b6000818152600560205260408120546001600160a01b0316806105fc57604051637e27328960e01b815260048101849052602401610706565b61082e8383836001611493565b6000546001600160a01b031633146108435760405163118cdaa760e01b8152336004820152602401610706565b6001600160a01b0381166000818152600e6020908152604091829020805460ff1916600117905590519182527f42e160154868087d6bfdc0ca23d96a1c1cfa32f1b72ba9ba27b69b98a0d819dc91015b60405180910390a150565b6000610ff9848484611599565b949350505050565b6106dd8133611677565b60008061101884846116b0565b90508015610ccd576000848152600260205260409020610c9d9084611729565b600080611045848461173e565b90508015610ccd576000848152600260205260409020610c9d90846117ab565b61106d6117c0565b600d805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600d5460ff16156108435760405163d93c066560e01b815260040160405180910390fd5b6106c88282604051806020016040528060008152506117e3565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61114d6110b7565b600d805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861109a3390565b6000610ccd83836117fa565b6001600160a01b0382166111c057604051630b61174360e31b81526001600160a01b0383166004820152602401610706565b6001600160a01b03838116600081815260086020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b1561076a57604051630a85bd0160e11b81526001600160a01b0384169063150b7a029061126f9033908890879087906004016125d1565b6020604051808303816000875af19250505080156112aa575060408051601f3d908101601f191682019092526112a791810190612604565b60015b611313573d8080156112d8576040519150601f19603f3d011682016040523d82523d6000602084013e6112dd565b606091505b50805160000361130b57604051633250574960e11b81526001600160a01b0385166004820152602401610706565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b1461134f57604051633250574960e11b81526001600160a01b0385166004820152602401610706565b5050505050565b606060108054610611906123ae565b6060600061137283611824565b600101905060008167ffffffffffffffff811115611392576113926120e5565b6040519080825280601f01601f1916602001820160405280156113bc576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a85049450846113c657509392505050565b60006105fc825490565b6001600160a01b0381166000818152600e6020908152604091829020805460ff1916905590519182527fd7e9ec6e6ecd65492dce6bf513cd6867560d49544421d0783ddf06e76c24470c9101610fe1565b60006001600160e01b031982166380ac58cd60e01b148061148457506001600160e01b03198216635b5e139f60e01b145b806105fc57506105fc826118fc565b80806114a757506001600160a01b03821615155b156115695760006114b784610f1e565b90506001600160a01b038316158015906114e35750826001600160a01b0316816001600160a01b031614155b80156114f657506114f48184610e90565b155b1561151f5760405163a9fbf51f60e01b81526001600160a01b0384166004820152602401610706565b81156115675783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5050600090815260076020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b6000828152600560209081526040808320546001600160a01b0316808452600e909252822054829060ff16806115e757506001600160a01b0386166000908152600e602052604090205460ff165b806116015750336000908152600e602052604090205460ff165b905080156116625760405162461bcd60e51b815260206004820152602860248201527f455243373231426c61636b4c69737461626c653a206163636f756e7420626c6160448201526718dadb1a5cdd195960c21b6064820152608401610706565b61166d868686611921565b9695505050505050565b6116818282610cd4565b6106c85760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610706565b60006116bc8383610cd4565b6117215760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016105fc565b5060006105fc565b6000610ccd836001600160a01b038416611936565b600061174a8383610cd4565b156117215760008381526001602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016105fc565b6000610ccd836001600160a01b03841661197d565b600d5460ff1661084357604051638dfc202b60e01b815260040160405180910390fd5b6117ed8383611a70565b61082e600084848461122d565b60008260000182815481106118115761181161241f565b9060005260206000200154905092915050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106118635772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef8100000000831061188f576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106118ad57662386f26fc10000830492506010015b6305f5e10083106118c5576305f5e100830492506008015b61271083106118d957612710830492506004015b606483106118eb576064830492506002015b600a83106105fc5760010192915050565b60006001600160e01b03198216635a05180f60e01b14806105fc57506105fc82611ad5565b600061192b6110b7565b610ff9848484611b0a565b6000818152600183016020526040812054611721575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556105fc565b60008181526001830160205260408120548015611a665760006119a1600183612621565b85549091506000906119b590600190612621565b9050808214611a1a5760008660000182815481106119d5576119d561241f565b90600052602060002001549050808760000184815481106119f8576119f861241f565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611a2b57611a2b612634565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506105fc565b60009150506105fc565b6001600160a01b038216611a9a57604051633250574960e11b815260006004820152602401610706565b6000611aa883836000610fec565b90506001600160a01b0381161561082e576040516339e3563760e11b815260006004820152602401610706565b60006001600160e01b03198216637965db0b60e01b14806105fc57506301ffc9a760e01b6001600160e01b03198316146105fc565b600080611b18858585611bd7565b90506001600160a01b038116611b7557611b7084600b80546000838152600c60205260408120829055600182018355919091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90155565b611b98565b846001600160a01b0316816001600160a01b031614611b9857611b988185611cd0565b6001600160a01b038516611bb457611baf84611d61565b610ff9565b846001600160a01b0316816001600160a01b031614610ff957610ff98585611e10565b6000828152600560205260408120546001600160a01b0390811690831615611c0457611c04818486611e60565b6001600160a01b03811615611c4257611c21600085600080611493565b6001600160a01b038116600090815260066020526040902080546000190190555b6001600160a01b03851615611c71576001600160a01b0385166000908152600660205260409020805460010190555b60008481526005602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b6000611cdb83610b7f565b6000838152600a6020526040902054909150808214611d2e576001600160a01b03841660009081526009602090815260408083208584528252808320548484528184208190558352600a90915290208190555b506000918252600a602090815260408084208490556001600160a01b039094168352600981528383209183525290812055565b600b54600090611d7390600190612621565b6000838152600c6020526040812054600b8054939450909284908110611d9b57611d9b61241f565b9060005260206000200154905080600b8381548110611dbc57611dbc61241f565b6000918252602080832090910192909255828152600c9091526040808220849055858252812055600b805480611df457611df4612634565b6001900381819060005260206000200160009055905550505050565b60006001611e1d84610b7f565b611e279190612621565b6001600160a01b0390931660009081526009602090815260408083208684528252808320859055938252600a9052919091209190915550565b611e6b838383611ec4565b61082e576001600160a01b038316611e9957604051637e27328960e01b815260048101829052602401610706565b60405163177e802f60e01b81526001600160a01b038316600482015260248101829052604401610706565b60006001600160a01b03831615801590610ff95750826001600160a01b0316846001600160a01b03161480611efe5750611efe8484610e90565b80610ff95750506000908152600760205260409020546001600160a01b03908116911614919050565b6001600160e01b0319811681146106dd57600080fd5b600060208284031215611f4f57600080fd5b8135610ccd81611f27565b60005b83811015611f75578181015183820152602001611f5d565b50506000910152565b60008151808452611f96816020860160208601611f5a565b601f01601f19169290920160200192915050565b602081526000610ccd6020830184611f7e565b600060208284031215611fcf57600080fd5b5035919050565b80356001600160a01b0381168114611fed57600080fd5b919050565b6000806040838503121561200557600080fd5b61200e83611fd6565b946020939093013593505050565b60006020828403121561202e57600080fd5b610ccd82611fd6565b60008060006060848603121561204c57600080fd5b61205584611fd6565b925061206360208501611fd6565b9150604084013590509250925092565b6000806040838503121561208657600080fd5b8235915061209660208401611fd6565b90509250929050565b634e487b7160e01b600052602160045260246000fd5b600581106120d357634e487b7160e01b600052602160045260246000fd5b9052565b602081016105fc82846120b5565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115612116576121166120e5565b604051601f8501601f19908116603f0116810190828211818310171561213e5761213e6120e5565b8160405280935085815286868601111561215757600080fd5b858560208301376000602087830101525050509392505050565b60006020828403121561218357600080fd5b813567ffffffffffffffff81111561219a57600080fd5b8201601f810184136121ab57600080fd5b610ff9848235602084016120fb565b600080604083850312156121cd57600080fd5b6121d683611fd6565b91506020830135600581106121ea57600080fd5b809150509250929050565b6000806020838503121561220857600080fd5b823567ffffffffffffffff8082111561222057600080fd5b818501915085601f83011261223457600080fd5b81358181111561224357600080fd5b8660208260051b850101111561225857600080fd5b60209290920196919550909350505050565b6020808252825182820181905260009190848201906040850190845b818110156122a9576122998385516120b5565b9284019291840191600101612286565b50909695505050505050565b600080604083850312156122c857600080fd5b50508035926020909101359150565b600080604083850312156122ea57600080fd5b6122f383611fd6565b9150602083013580151581146121ea57600080fd5b6000806000806080858703121561231e57600080fd5b61232785611fd6565b935061233560208601611fd6565b925060408501359150606085013567ffffffffffffffff81111561235857600080fd5b8501601f8101871361236957600080fd5b612378878235602084016120fb565b91505092959194509250565b6000806040838503121561239757600080fd5b6123a083611fd6565b915061209660208401611fd6565b600181811c908216806123c257607f821691505b6020821081036123e257634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252601e908201527f50616c546f6b656e3a20546f6b656e20646f6573206e6f742065786973740000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b601f82111561082e576000816000526020600020601f850160051c8101602086101561245e5750805b601f850160051c820191505b8181101561247d5782815560010161246a565b505050505050565b815167ffffffffffffffff81111561249f5761249f6120e5565b6124b3816124ad84546123ae565b84612435565b602080601f8311600181146124e857600084156124d05750858301515b600019600386901b1c1916600185901b17855561247d565b600085815260208120601f198616915b82811015612517578886015182559484019460019091019084016124f8565b50858210156125355787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6040815260006125586040830185611f7e565b828103602084015261256a8185611f7e565b95945050505050565b634e487b7160e01b600052601160045260246000fd5b60006001820161259b5761259b612573565b5060010190565b600083516125b4818460208801611f5a565b8351908301906125c8818360208801611f5a565b01949350505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061166d90830184611f7e565b60006020828403121561261657600080fd5b8151610ccd81611f27565b818103818111156105fc576105fc612573565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220878c9111413b9dfeefaac042efafb6da40e92c82b7b19e9c953c87f2b7574cc664736f6c63430008170033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000350616c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000350414c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f687474703a2f2f70616c2d6d6574612d746573746e65742e796179332e73706163653a373030302f76312f70616c2f0000000000000000000000000000000000