[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "ApprovalCallerNotOwnerNorApproved", "type": "error" }, { "inputs": [], "name": "ApprovalQueryForNonexistentToken", "type": "error" }, { "inputs": [], "name": "BalanceQueryForZeroAddress", "type": "error" }, { "inputs": [], "name": "MintERC2309QuantityExceedsLimit", "type": "error" }, { "inputs": [], "name": "MintToZeroAddress", "type": "error" }, { "inputs": [], "name": "MintZeroQuantity", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" } ], "name": "OperatorNotAllowed", "type": "error" }, { "inputs": [], "name": "OwnerQueryForNonexistentToken", "type": "error" }, { "inputs": [], "name": "OwnershipNotInitializedForExtraData", "type": "error" }, { "inputs": [], "name": "TransferCallerNotOwnerNorApproved", "type": "error" }, { "inputs": [], "name": "TransferFromIncorrectOwner", "type": "error" }, { "inputs": [], "name": "TransferToNonERC721ReceiverImplementer", "type": "error" }, { "inputs": [], "name": "TransferToZeroAddress", "type": "error" }, { "inputs": [], "name": "URIQueryForNonexistentToken", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "roundId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "price", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "seller", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "perPurchaseLimit", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "userPurchaseLimit", "type": "uint256" }, { "indexed": false, "internalType": "bool", "name": "isPublic", "type": "bool" }, { "indexed": false, "internalType": "uint256", "name": "startTime", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "endTime", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "maxSupply", "type": "uint256" } ], "name": "AddRound", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "from", "type": "address" }, { "indexed": false, "internalType": "address", "name": "to", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "AdminTransfer", "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": "uri", "type": "string" } ], "name": "BaseURI", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Burn", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "from", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "to", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "buyer", "type": "address" }, { "indexed": false, "internalType": "uint256[]", "name": "rarityArray", "type": "uint256[]" } ], "name": "ClaimNFT", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "fromTokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "toTokenId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" } ], "name": "ConsecutiveTransfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" }, { "indexed": false, "internalType": "address", "name": "to", "type": "address" } ], "name": "CraftNFT", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "roundId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "price", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "seller", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "perPurchaseLimit", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "userPurchaseLimit", "type": "uint256" }, { "indexed": false, "internalType": "bool", "name": "isPublic", "type": "bool" }, { "indexed": false, "internalType": "uint256", "name": "startTime", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "endTime", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "maxSupply", "type": "uint256" } ], "name": "EditRound", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "start", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "end", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "total", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256[]", "name": "rarityArray", "type": "uint256[]" } ], "name": "Mint", "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": "uint256", "name": "from", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "to", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "price", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "paid", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "seller", "type": "address" }, { "indexed": false, "internalType": "address", "name": "buyer", "type": "address" }, { "indexed": false, "internalType": "uint256[]", "name": "rarityArray", "type": "uint256[]" } ], "name": "PurchaseNFT", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "price", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "paid", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "seller", "type": "address" }, { "indexed": false, "internalType": "address", "name": "buyer", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "limit", "type": "uint256" } ], "name": "ReserverNFT", "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" }, { "stateMutability": "payable", "type": "fallback" }, { "inputs": [], "name": "OPERATOR_FILTER_REGISTRY", "outputs": [ { "internalType": "contract IOperatorFilterRegistry", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "_allowAddress", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "quantity", "type": "uint256" } ], "name": "_leaf", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_add", "type": "address" } ], "name": "addAllowAddress", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "adminTransfer", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "baseURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "bundleId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "burnAdmin", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32[]", "name": "proof", "type": "bytes32[]" }, { "internalType": "uint256", "name": "limit", "type": "uint256" }, { "internalType": "bool", "name": "isLimit", "type": "bool" }, { "internalType": "uint256", "name": "whiteListType", "type": "uint256" } ], "name": "buyAstroboyNFT", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "claimAstroboyNFT", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "", "type": "bytes4" } ], "name": "delegates", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "funcSignatures", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "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": "getAuthor", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getCreator", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" } ], "name": "getIsTransferAllowed", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getLocked", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getMaxSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getPrice", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "whitelisType", "type": "uint256" } ], "name": "getRootHash", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getRoyaltyFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "whitelistType", "type": "uint256" } ], "name": "getSaleDetails", "outputs": [ { "internalType": "uint256", "name": "_startTime", "type": "uint256" }, { "internalType": "uint256", "name": "_endTime", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_add", "type": "address" }, { "internalType": "uint256", "name": "whitelistType", "type": "uint256" } ], "name": "getUserBoughtCount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "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": "address", "name": "", "type": "address" } ], "name": "isTransferAllowed", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "bytes32[]", "name": "proof", "type": "bytes32[]" }, { "internalType": "uint256", "name": "quantity", "type": "uint256" }, { "internalType": "uint256", "name": "whiteListType", "type": "uint256" } ], "name": "isWhitelisted", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" }, { "internalType": "bool", "name": "status", "type": "bool" } ], "name": "lockNFTBulk", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to_", "type": "address" }, { "internalType": "uint256", "name": "countNFTs_", "type": "uint256" } ], "name": "mint", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "nftLock", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "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": "perPurchaseNFTToMint", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32[]", "name": "proof", "type": "bytes32[]" }, { "internalType": "uint256", "name": "limit", "type": "uint256" } ], "name": "preOrderAstroboyNFT", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_add", "type": "address" } ], "name": "removeAllowAddress", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "reservedNFT", "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": "safeTransferFrom", "outputs": [], "stateMutability": "payable", "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": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_add", "type": "address" } ], "name": "setAuthor", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "baseURI_", "type": "string" } ], "name": "setBaseURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "supply", "type": "uint256" } ], "name": "setMaxSupply", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "nftTomint", "type": "uint256" } ], "name": "setPerBundleNFTToMint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "price", "type": "uint256" } ], "name": "setPrice", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "setRoyalty", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_startTime", "type": "uint256" }, { "internalType": "uint256", "name": "_endTime", "type": "uint256" }, { "internalType": "uint256", "name": "whitelistType", "type": "uint256" } ], "name": "setSaleDetails", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_status", "type": "uint256" } ], "name": "setStatus", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_add", "type": "address" }, { "internalType": "bool", "name": "status", "type": "bool" } ], "name": "setTransferAllowed", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "_root", "type": "bytes32" }, { "internalType": "uint256", "name": "whitelistType", "type": "uint256" }, { "internalType": "bool", "name": "isReserve", "type": "bool" } ], "name": "setWhitelistRoot", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "bool", "name": "status", "type": "bool" } ], "name": "setlockStatusNFT", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "status", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "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": "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": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "stateMutability": "payable", "type": "receive" } ]
60806040523480156200001157600080fd5b50733cc6cdda760b79bafa08df41ecfa224f810dceb66001604051806040016040528060048152602001635841424960e01b815250604051806040016040528060048152602001635841424960e01b81525081600690816200007491906200049b565b5060076200008382826200049b565b50600160045550506daaeb6d7670e522a718067333cd4e3b15620001d05780156200011e57604051633e9f1edf60e11b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e90637d3e3dbe906044015b600060405180830381600087803b158015620000ff57600080fd5b505af115801562000114573d6000803e3d6000fd5b50505050620001d0565b6001600160a01b038216156200016f5760405163a0af290360e01b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e9063a0af290390604401620000e4565b604051632210724360e11b81523060048201526daaeb6d7670e522a718067333cd4e90634420e48690602401600060405180830381600087803b158015620001b657600080fd5b505af1158015620001cb573d6000803e3d6000fd5b505050505b50620001de9050336200024b565b620001e9336200024b565b336000818152601060205260409020805460ff191660011790556200020e906200029d565b6200021b3360016200030e565b604051806060016040528060398152602001620041d560399139600f906200024490826200049b565b5062000567565b600e80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600e546001600160a01b03163314620002ec5760405162461bcd60e51b815260206004820181905260248201526000805160206200420e83398151915260448201526064015b60405180910390fd5b601580546001600160a01b0319166001600160a01b0392909216919091179055565b600e546001600160a01b03163314620003595760405162461bcd60e51b815260206004820181905260248201526000805160206200420e8339815191526044820152606401620002e3565b6001600160a01b0382166000908152600c602052604090205481151560ff909116151503620003cb5760405162461bcd60e51b815260206004820152601c60248201527f58616e616c616e643a2073746174757320616c726561647920736574000000006044820152606401620002e3565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200042157607f821691505b6020821081036200044257634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200049657600081815260208120601f850160051c81016020861015620004715750805b601f850160051c820191505b8181101562000492578281556001016200047d565b5050505b505050565b81516001600160401b03811115620004b757620004b7620003f6565b620004cf81620004c884546200040c565b8462000448565b602080601f831160018114620005075760008415620004ee5750858301515b600019600386901b1c1916600185901b17855562000492565b600085815260208120601f198616915b82811015620005385788860151825594840194600190910190840162000517565b5085821015620005575787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b613c5e80620005776000396000f3fe60806040526004361061036b5760003560e01c80636f8b44b0116101c4578063a22cb465116100f6578063c87b56dd1161009a578063e985e9c51161006c578063e985e9c514610a93578063f17e48ec14610adc578063f2fde38b14610afc578063f4e37f1214610b1c57005b8063c87b56dd14610a3e578063d48e638a146108d2578063d68c733f14610a5e578063e02f8e1f14610a7357005b8063b481630d116100d3578063b481630d146109cb578063b61d0c63146109eb578063b88d4fde14610a0b578063bc8d4cd614610a1e57005b8063a22cb46514610975578063a8b8042814610995578063aa8062ef146109b557005b80638da5cb5b116101685780639e2b84881161013a5780639e2b8488146108d25780639e4c0141146108fd578063a05f41a41461091f578063a0a2daf01461093f57005b80638da5cb5b1461086a57806391b7f5ed1461088857806395d89b41146108a857806398d5fdca146108bd57005b806374f32b3e116101a157806374f32b3e146107c55780637be95c85146107e55780638822048e146108055780638c746d8b1461083557005b80636f8b44b01461077057806370a0823114610790578063715018a6146107b057005b80633b035df61161029d578063521b52a4116102415780636352211e116102135780636352211e146106fb57806369ba1a751461071b57806369ff1a811461073b5780636c0360eb1461075b57005b8063521b52a41461067857806355f804b3146106a857806357a9d3bc146106c85780635934101f146106e857005b80634209a2e11161027a5780634209a2e11461060057806342842e0e14610620578063495d8151146106335780634c0f38c21461066357005b80633b035df61461057957806340c10f19146105a957806341f43434146105de57005b8063126fe62d1161030f57806323b872dd116102e157806323b872dd1461051357806326a6860a1461052657806331a365de146105465780633210b1261461056657005b8063126fe62d146104a057806318160ddd146104c0578063200d2ed2146104dd57806323922f86146104f357005b8063081812fc11610348578063081812fc14610404578063093abc861461043c578063095ea7b3146104775780630994b1ad1461048a57005b806301ffc9a714610374578063057c2c6a146103a957806306fdde03146103e257005b3661037257005b005b34801561038057600080fd5b5061039461038f366004613171565b610b49565b60405190151581526020015b60405180910390f35b3480156103b557600080fd5b506103946103c43660046131a5565b6001600160a01b03166000908152600c602052604090205460ff1690565b3480156103ee57600080fd5b506103f7610b9b565b6040516103a09190613206565b34801561041057600080fd5b5061042461041f366004613219565b610c2d565b6040516001600160a01b0390911681526020016103a0565b34801561044857600080fd5b50610469610457366004613219565b60009081526011602052604090205490565b6040519081526020016103a0565b610372610485366004613232565b610c71565b34801561049657600080fd5b5061046960185481565b3480156104ac57600080fd5b506103726104bb3660046131a5565b610d77565b3480156104cc57600080fd5b506005546004540360001901610469565b3480156104e957600080fd5b5061046960135481565b3480156104ff57600080fd5b5061037261050e366004613275565b610dd7565b6103726105213660046132a5565b610e81565b34801561053257600080fd5b506103f7610541366004613219565b611016565b34801561055257600080fd5b506103726105613660046132e1565b6110c2565b61037261057436600461335f565b611119565b34801561058557600080fd5b50610394610594366004613219565b6000908152600d602052604090205460ff1690565b3480156105b557600080fd5b506105c96105c4366004613232565b6114b9565b604080519283526020830191909152016103a0565b3480156105ea57600080fd5b506104246daaeb6d7670e522a718067333cd4e81565b34801561060c57600080fd5b5061037261061b366004613219565b6115bf565b61037261062e3660046132a5565b6115ee565b34801561063f57600080fd5b5061039461064e366004613219565b600d6020526000908152604090205460ff1681565b34801561066f57600080fd5b50601254610469565b34801561068457600080fd5b506103946106933660046131a5565b60106020526000908152604090205460ff1681565b3480156106b457600080fd5b506103726106c336600461344a565b611778565b3480156106d457600080fd5b506104696106e3366004613232565b6117ea565b6103726106f6366004613493565b611812565b34801561070757600080fd5b50610424610716366004613219565b611cd7565b34801561072757600080fd5b50610372610736366004613219565b611ce2565b34801561074757600080fd5b506103726107563660046131a5565b611d11565b34801561076757600080fd5b506103f7611d77565b34801561077c57600080fd5b5061037261078b366004613219565b611d84565b34801561079c57600080fd5b506104696107ab3660046131a5565b611db3565b3480156107bc57600080fd5b50610372611e02565b3480156107d157600080fd5b506103946107e03660046134fa565b611e38565b3480156107f157600080fd5b50610372610800366004613219565b611e97565b34801561081157600080fd5b506103946108203660046131a5565b600c6020526000908152604090205460ff1681565b34801561084157600080fd5b506105c9610850366004613219565b6000908152601a6020526040902080546001909101549091565b34801561087657600080fd5b50600e546001600160a01b0316610424565b34801561089457600080fd5b506103726108a3366004613219565b611ec6565b3480156108b457600080fd5b506103f7611ef5565b3480156108c957600080fd5b50601454610469565b3480156108de57600080fd5b506104246108ed366004613219565b506015546001600160a01b031690565b34801561090957600080fd5b50610469610918366004613219565b5060165490565b34801561092b57600080fd5b5061037261093a3660046131a5565b611f04565b34801561094b57600080fd5b5061042461095a366004613171565b6000602081905290815260409020546001600160a01b031681565b34801561098157600080fd5b5061037261099036600461355f565b611f50565b3480156109a157600080fd5b506103726109b036600461355f565b61204c565b3480156109c157600080fd5b5061046960175481565b3480156109d757600080fd5b506103726109e636600461358b565b612111565b3480156109f757600080fd5b50610469610a06366004613232565b612175565b610372610a193660046135b7565b6121b2565b348015610a2a57600080fd5b50610372610a39366004613633565b61234a565b348015610a4a57600080fd5b506103f7610a59366004613219565b6123dc565b348015610a6a57600080fd5b5061037261246c565b348015610a7f57600080fd5b50610372610a8e366004613219565b6126d6565b348015610a9f57600080fd5b50610394610aae3660046136eb565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205460ff1690565b348015610ae857600080fd5b50610372610af7366004613232565b61273e565b348015610b0857600080fd5b50610372610b173660046131a5565b612806565b348015610b2857600080fd5b50610469610b37366004613219565b601d6020526000908152604090205481565b60006301ffc9a760e01b6001600160e01b031983161480610b7a57506380ac58cd60e01b6001600160e01b03198316145b80610b955750635b5e139f60e01b6001600160e01b03198316145b92915050565b606060068054610baa9061371e565b80601f0160208091040260200160405190810160405280929190818152602001828054610bd69061371e565b8015610c235780601f10610bf857610100808354040283529160200191610c23565b820191906000526020600020905b815481529060010190602001808311610c0657829003601f168201915b5050505050905090565b6000610c38826128a1565b610c55576040516333d1c03960e21b815260040160405180910390fd5b506000908152600a60205260409020546001600160a01b031690565b816daaeb6d7670e522a718067333cd4e3b15610d3057604051633185c44d60e21b81523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015610cdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d039190613758565b610d3057604051633b79c77360e21b81526001600160a01b03821660048201526024015b60405180910390fd5b6001600160a01b0383166000908152600c602052604090205460ff16610d685760405162461bcd60e51b8152600401610d2790613775565b610d7283836128d6565b505050565b600e546001600160a01b03163314610da15760405162461bcd60e51b8152600401610d27906137ac565b6001600160a01b03166000908152601060209081526040808320805460ff19908116909155600c90925290912080549091169055565b3360009081526010602052604090205460ff16610e065760405162461bcd60e51b8152600401610d27906137e1565b6000828152600d602052604090205481151560ff909116151503610e615760405162461bcd60e51b81526020600482015260126024820152711cdd185d1d5cc8185b1c9958591e481cd95d60721b6044820152606401610d27565b6000918252600d6020526040909120805460ff1916911515919091179055565b826daaeb6d7670e522a718067333cd4e3b15610fa757336001600160a01b03821603610f1557336000908152600c602052604090205460ff16610ed65760405162461bcd60e51b8152600401610d2790613775565b6000828152600d602052604090205460ff1615610f055760405162461bcd60e51b8152600401610d2790613808565b610f108484846128e6565b611010565b604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015610f64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f889190613758565b610fa757604051633b79c77360e21b8152336004820152602401610d27565b336000908152600c602052604090205460ff16610fd65760405162461bcd60e51b8152600401610d2790613775565b6000828152600d602052604090205460ff16156110055760405162461bcd60e51b8152600401610d2790613808565b6110108484846128e6565b50505050565b6001818154811061102657600080fd5b9060005260206000200160009150905080546110419061371e565b80601f016020809104026020016040519081016040528092919081815260200182805461106d9061371e565b80156110ba5780601f1061108f576101008083540402835291602001916110ba565b820191906000526020600020905b81548152906001019060200180831161109d57829003601f168201915b505050505081565b600e546001600160a01b031633146110ec5760405162461bcd60e51b8152600401610d27906137ac565b600091825260116020908152604080842094909455601c9052919020805460ff1916911515919091179055565b3332146111385760405162461bcd60e51b8152600401610d2790613837565b60026000819052601a6020527f4c287b3e2c2cb129ae3ba596d613d760b15affdac7242e12903c37a886ea1c4f544210156111855760405162461bcd60e51b8152600401610d2790613854565b6000818152601a602052604090206001015442106111b55760405162461bcd60e51b8152600401610d2790613882565b6018546002600052601d6020527f64f63e8728b8a1c8ce5fe5058430331934c8d0c3d8a2f2793f19836c1447addb546111f991906111f39085612a77565b90612a8a565b60125410156112345760405162461bcd60e51b81526020600482015260076024820152661cdbdb191bdd5d60ca1b6044820152606401610d27565b60008261124133846117ea565b61124b91906138c0565b905061125a3386868486611e38565b6112765760405162461bcd60e51b8152600401610d27906137e1565b601454349061128585826138d3565b9050818111156112c15760405162461bcd60e51b815260206004820152600760248201526609c8ca8406260760cb1b6044820152606401610d27565b6015546040516000916001600160a01b03169083908381818185875af1925050503d806000811461130e576040519150601f19603f3d011682016040523d82523d6000602084013e611313565b606091505b505090508061135c5760405162461bcd60e51b81526020600482015260156024820152740eadcc2c4d8ca40e8de40e4cac6cad2ecca40cae8d605b1b6044820152606401610d27565b600061136883856138ea565b1115611402573361137983856138ea565b604051600081818185875af1925050503d80600081146113b5576040519150601f19603f3d011682016040523d82523d6000602084013e6113ba565b606091505b505080915050806114025760405162461bcd60e51b81526020600482015260126024820152710eadcc2c4d8ca40e8de40e6cadcc840cae8d60731b6044820152606401610d27565b6000858152601d6020526040812080548892906114209084906138c0565b9091555050336000908152601b602090815260408083208884529091528120805488929061144f9084906138c0565b909155505060145460155460408051928352602083018590526001600160a01b039091168282015233606083015260808201889052517f9592d3701341da076dc734011f1448f436d27721edd662a432632e455e6873d89181900360a00190a15050505050505050565b33600090815260106020526040812054819060ff166114ea5760405162461bcd60e51b8152600401610d27906137e1565b600554600454849190036000190161150291906138c0565b60125410156115465760405162461bcd60e51b815260206004820152601060248201526f657863656564696e6720737570706c7960801b6044820152606401610d27565b6004546115538585612a96565b6000600160045461156491906138ea565b90507ff211e5fddaaec6aa0c1783f48763e1358d822b2b483652026f1c4100d2b79d1982828789601960405161159e95949392919061393d565b60405180910390a16115b260196000613129565b90925090505b9250929050565b600e546001600160a01b031633146115e95760405162461bcd60e51b8152600401610d27906137ac565b601655565b826daaeb6d7670e522a718067333cd4e3b1561170f57336001600160a01b0382160361167d57336000908152600c602052604090205460ff166116435760405162461bcd60e51b8152600401610d2790613775565b6000828152600d602052604090205460ff16156116725760405162461bcd60e51b8152600401610d2790613808565b610f10848484612ab0565b604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa1580156116cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f09190613758565b61170f57604051633b79c77360e21b8152336004820152602401610d27565b336000908152600c602052604090205460ff1661173e5760405162461bcd60e51b8152600401610d2790613775565b6000828152600d602052604090205460ff161561176d5760405162461bcd60e51b8152600401610d2790613808565b611010848484612ab0565b600e546001600160a01b031633146117a25760405162461bcd60e51b8152600401610d27906137ac565b600f6117ae82826139c1565b507f01e56a02aca7f26a28165a040851ba78f30282b55ca81c63a804cdc1e2dcea72600f6040516117df9190613a81565b60405180910390a150565b6001600160a01b03919091166000908152601b60209081526040808320938352929052205490565b3332146118315760405162461bcd60e51b8152600401610d2790613837565b6000818152601a602052604090205442101561185f5760405162461bcd60e51b8152600401610d2790613854565b6000818152601a6020526040902060010154421061188f5760405162461bcd60e51b8152600401610d2790613882565b6000601854116118d75760405162461bcd60e51b81526020600482015260136024820152721b999d081d1bc81b5a5b9d081b9bdd081cd95d606a1b6044820152606401610d27565b6000818152601c602052604090205460ff16156119265760405162461bcd60e51b815260206004820152600d60248201526c6e6f2076616c6964207479706560981b6044820152606401610d27565b600082611934576000611949565b8361193f33846117ea565b61194991906138c0565b905060135460010361197e576119623387878486611e38565b61197e5760405162461bcd60e51b8152600401610d27906137e1565b6013546000036119c45760405162461bcd60e51b81526020600482015260116024820152701cd85b195cc81b9bdd081cdd185c9d1959607a1b6044820152606401610d27565b6119ed6119dc60185486612a8a90919063ffffffff16565b600554600454036000190190612a77565b6018546002600052601d6020527f64f63e8728b8a1c8ce5fe5058430331934c8d0c3d8a2f2793f19836c1447addb54611a3391611a2a9190612a8a565b60125490612acb565b1015611a6b5760405162461bcd60e51b81526020600482015260076024820152661cdbdb191bdd5d60ca1b6044820152606401610d27565b6014543490611a7a86826138d3565b905081811115611ab65760405162461bcd60e51b815260206004820152600760248201526609c8ca8406260760cb1b6044820152606401610d27565b600454601854611ad2903390611acd908a90612a8a565b612a96565b60006001600454611ae391906138ea565b336000908152601b602090815260408083208a8452909152902054909150611b0c9089906138c0565b336000908152601b602090815260408083208a845290915280822092909255601554915190916001600160a01b03169085908381818185875af1925050503d8060008114611b76576040519150601f19603f3d011682016040523d82523d6000602084013e611b7b565b606091505b5050905080611bc45760405162461bcd60e51b81526020600482015260156024820152740eadcc2c4d8ca40e8de40e4cac6cad2ecca40cae8d605b1b6044820152606401610d27565b6000611bd085876138ea565b1115611c6a5733611be185876138ea565b604051600081818185875af1925050503d8060008114611c1d576040519150601f19603f3d011682016040523d82523d6000602084013e611c22565b606091505b50508091505080611c6a5760405162461bcd60e51b81526020600482015260126024820152710eadcc2c4d8ca40e8de40e6cadcc840cae8d60731b6044820152606401610d27565b6014546015546040517fcaf4d10f77a1e37f464f6b74bd3d60d54e92ee3fc9b6151ff0910774cde689d092611cb69287928792918a916001600160a01b03909116903390601990613b0c565b60405180910390a1611cca60196000613129565b5050505050505050505050565b6000610b9582612ad7565b600e546001600160a01b03163314611d0c5760405162461bcd60e51b8152600401610d27906137ac565b601355565b600e546001600160a01b03163314611d3b5760405162461bcd60e51b8152600401610d27906137ac565b6001600160a01b031660009081526010602090815260408083208054600160ff199182168117909255600c909352922080549091169091179055565b600f80546110419061371e565b600e546001600160a01b03163314611dae5760405162461bcd60e51b8152600401610d27906137ac565b601255565b60006001600160a01b038216611ddc576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b031660009081526009602052604090205467ffffffffffffffff1690565b600e546001600160a01b03163314611e2c5760405162461bcd60e51b8152600401610d27906137ac565b611e366000612b63565b565b6000611e8d611e478785612175565b8686808060200260200160405190810160405280939291908181526020018383602002808284376000920182905250888152601160205260409020549250612bb5915050565b9695505050505050565b600e546001600160a01b03163314611ec15760405162461bcd60e51b8152600401610d27906137ac565b601855565b600e546001600160a01b03163314611ef05760405162461bcd60e51b8152600401610d27906137ac565b601455565b606060078054610baa9061371e565b600e546001600160a01b03163314611f2e5760405162461bcd60e51b8152600401610d27906137ac565b601580546001600160a01b0319166001600160a01b0392909216919091179055565b816daaeb6d7670e522a718067333cd4e3b1561200a57604051633185c44d60e21b81523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015611fbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fe29190613758565b61200a57604051633b79c77360e21b81526001600160a01b0382166004820152602401610d27565b6001600160a01b0383166000908152600c602052604090205460ff166120425760405162461bcd60e51b8152600401610d2790613775565b610d728383612bca565b600e546001600160a01b031633146120765760405162461bcd60e51b8152600401610d27906137ac565b6001600160a01b0382166000908152600c602052604090205481151560ff9091161515036120e65760405162461bcd60e51b815260206004820152601c60248201527f58616e616c616e643a2073746174757320616c726561647920736574000000006044820152606401610d27565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b600e546001600160a01b0316331461213b5760405162461bcd60e51b8152600401610d27906137ac565b6040805160608101825293845260208085019384526000858301818152938152601a90915220925183559051600183015551600290910155565b604080516001600160a01b038416602082015290810182905260009060600160405160208183030381529060405280519060200120905092915050565b836daaeb6d7670e522a718067333cd4e3b156122d957336001600160a01b0382160361224757336000908152600c602052604090205460ff166122075760405162461bcd60e51b8152600401610d2790613775565b6000838152600d602052604090205460ff16156122365760405162461bcd60e51b8152600401610d2790613808565b61224285858585612c36565b612343565b604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015612296573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ba9190613758565b6122d957604051633b79c77360e21b8152336004820152602401610d27565b336000908152600c602052604090205460ff166123085760405162461bcd60e51b8152600401610d2790613775565b6000838152600d602052604090205460ff16156123375760405162461bcd60e51b8152600401610d2790613808565b61234385858585612c36565b5050505050565b3360009081526010602052604090205460ff166123795760405162461bcd60e51b8152600401610d27906137e1565b60005b8251811015610d725781600d600085848151811061239c5761239c613b5c565b6020026020010151815260200190815260200160002060006101000a81548160ff02191690831515021790555080806123d490613b72565b91505061237c565b60606123e7826128a1565b61244b5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610d27565b6000612455612c7a565b505060408051602081019091526000815292915050565b33321461248b5760405162461bcd60e51b8152600401610d2790613837565b336000908152601b60209081526040808320600384529091528082205460028352908220546124b991612acb565b336000908152601b60209081526040808320600384529091528082205460028352912054919250111561251c5760405162461bcd60e51b815260206004820152600b60248201526a63616e277420636c61696d60a81b6044820152606401610d27565b6003600052601a6020527f4ac83fca211703e3ddb90093cd219714e5e3715bf0b4fd15b0441390534a24e2544210156125675760405162461bcd60e51b8152600401610d2790613854565b6003600052601a6020527f4ac83fca211703e3ddb90093cd219714e5e3715bf0b4fd15b0441390534a24e35442106125b15760405162461bcd60e51b8152600401610d2790613882565b6004546018546125c8903390611acd908590612a8a565b600060016004546125d991906138ea565b60026000908152601d6020527f64f63e8728b8a1c8ce5fe5058430331934c8d0c3d8a2f2793f19836c1447addb8054929350859290919061261b9084906138ea565b909155505060036000908152601d6020527f628971151cb24dee737f6abea9bff35ce226e4c8f5760305d49b372572839090805485929061265d9084906138c0565b9091555050336000908152601b60209081526040808320600384529091528120805485929061268d9084906138c0565b90915550506040517f1792056aee2ac57eeca1667413b6b31a2ae948a883ac44b1333f251fcfe45144906126c990849084903390601990613b8b565b60405180910390a1505050565b3360009081526010602052604090205460ff166127055760405162461bcd60e51b8152600401610d27906137e1565b61270e81612c89565b6040518181527fb90306ad06b2a6ff86ddc9327db583062895ef6540e62dc50add009db5b356eb906020016117df565b3360009081526010602052604090205460ff1661276d5760405162461bcd60e51b8152600401610d27906137e1565b600061277882611cd7565b6001600160a01b0381166000908152600b602090815260408083203384528252808320805460ff19166001179055858352600d90915290205490915060ff16156127fb576000828152600d60205260409020805460ff191690556127dd818484610e81565b6000828152600d60205260409020805460ff19166001179055505050565b610d72818484610e81565b600e546001600160a01b031633146128305760405162461bcd60e51b8152600401610d27906137ac565b6001600160a01b0381166128955760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d27565b61289e81612b63565b50565b6000816001111580156128b5575060045482105b8015610b95575050600090815260086020526040902054600160e01b161590565b6128e282826001612c94565b5050565b60006128f182612ad7565b9050836001600160a01b0316816001600160a01b0316146129245760405162a1148160e81b815260040160405180910390fd5b6000828152600a6020526040902080546129508187335b6001600160a01b039081169116811491141790565b61297b5761295e8633610aae565b61297b57604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b0385166129a257604051633a954ecd60e21b815260040160405180910390fd5b80156129ad57600082555b6001600160a01b038681166000908152600960205260408082208054600019019055918716808252919020805460010190554260a01b17600160e11b17600085815260086020526040812091909155600160e11b84169003612a3f57600184016000818152600860205260408120549003612a3d576004548114612a3d5760008181526008602052604090208490555b505b83856001600160a01b0316876001600160a01b0316600080516020613c0983398151915260405160405180910390a45b505050505050565b6000612a8382846138c0565b9392505050565b6000612a8382846138d3565b6128e2828260405180602001604052806000815250612d3b565b610d72838383604051806020016040528060008152506121b2565b6000612a8382846138ea565b600081600111612b4a575060008181526008602052604081205490600160e01b82169003612b4a5780600003612b45576004548210612b2957604051636f96cda160e11b815260040160405180910390fd5b5b50600019016000818152600860205260409020548015612b2a575b919050565b604051636f96cda160e11b815260040160405180910390fd5b600e80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000612bc2838386612da1565b949350505050565b336000818152600b602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b612c41848484610e81565b6001600160a01b0383163b1561101057612c5d84848484612db7565b611010576040516368d2bf6b60e11b815260040160405180910390fd5b6060600f8054610baa9061371e565b61289e816000612ea2565b6000612c9f83611cd7565b90508115612cde57336001600160a01b03821614612cde57612cc18133610aae565b612cde576040516367d9dca160e11b815260040160405180910390fd5b6000838152600a602052604080822080546001600160a01b0319166001600160a01b0388811691821790925591518693918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a450505050565b612d458383612fdb565b6001600160a01b0383163b15610d72576004548281035b612d6f6000868380600101945086612db7565b612d8c576040516368d2bf6b60e11b815260040160405180910390fd5b818110612d5c57816004541461234357600080fd5b600082612dae85846130b5565b14949350505050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290612dec903390899088908890600401613bb8565b6020604051808303816000875af1925050508015612e27575060408051601f3d908101601f19168201909252612e2491810190613beb565b60015b612e85573d808015612e55576040519150601f19603f3d011682016040523d82523d6000602084013e612e5a565b606091505b508051600003612e7d576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050949350505050565b6000612ead83612ad7565b905080600080612ecb866000908152600a6020526040902080549091565b915091508415612f0b57612ee081843361293b565b612f0b57612eee8333610aae565b612f0b57604051632ce44b5f60e11b815260040160405180910390fd5b8015612f1657600082555b6001600160a01b038316600081815260096020526040902080546fffffffffffffffffffffffffffffffff0190554260a01b17600360e01b17600087815260086020526040812091909155600160e11b85169003612fa457600186016000818152600860205260408120549003612fa2576004548114612fa25760008181526008602052604090208590555b505b60405186906000906001600160a01b03861690600080516020613c09833981519152908390a4505060058054600101905550505050565b60045460008290036130005760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b03831660008181526009602090815260408083208054680100000000000000018802019055848352600890915281206001851460e11b4260a01b17831790558284019083908390600080516020613c098339815191528180a4600183015b81811461308b5780836000600080516020613c09833981519152600080a4600101613065565b50816000036130ac57604051622e076360e81b815260040160405180910390fd5b60045550505050565b600081815b84518110156131215760008582815181106130d7576130d7613b5c565b602002602001015190508083116130fd576000838152602082905260409020925061310e565b600081815260208490526040902092505b508061311981613b72565b9150506130ba565b509392505050565b508054600082559060005260206000209081019061289e91905b808211156131575760008155600101613143565b5090565b6001600160e01b03198116811461289e57600080fd5b60006020828403121561318357600080fd5b8135612a838161315b565b80356001600160a01b0381168114612b4557600080fd5b6000602082840312156131b757600080fd5b612a838261318e565b6000815180845260005b818110156131e6576020818501810151868301820152016131ca565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000612a8360208301846131c0565b60006020828403121561322b57600080fd5b5035919050565b6000806040838503121561324557600080fd5b61324e8361318e565b946020939093013593505050565b801515811461289e57600080fd5b8035612b458161325c565b6000806040838503121561328857600080fd5b82359150602083013561329a8161325c565b809150509250929050565b6000806000606084860312156132ba57600080fd5b6132c38461318e565b92506132d16020850161318e565b9150604084013590509250925092565b6000806000606084860312156132f657600080fd5b8335925060208401359150604084013561330f8161325c565b809150509250925092565b60008083601f84011261332c57600080fd5b50813567ffffffffffffffff81111561334457600080fd5b6020830191508360208260051b85010111156115b857600080fd5b60008060006040848603121561337457600080fd5b833567ffffffffffffffff81111561338b57600080fd5b6133978682870161331a565b909790965060209590950135949350505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156133ea576133ea6133ab565b604052919050565b600067ffffffffffffffff83111561340c5761340c6133ab565b61341f601f8401601f19166020016133c1565b905082815283838301111561343357600080fd5b828260208301376000602084830101529392505050565b60006020828403121561345c57600080fd5b813567ffffffffffffffff81111561347357600080fd5b8201601f8101841361348457600080fd5b612bc2848235602084016133f2565b6000806000806000608086880312156134ab57600080fd5b853567ffffffffffffffff8111156134c257600080fd5b6134ce8882890161331a565b9096509450506020860135925060408601356134e98161325c565b949793965091946060013592915050565b60008060008060006080868803121561351257600080fd5b61351b8661318e565b9450602086013567ffffffffffffffff81111561353757600080fd5b6135438882890161331a565b9699909850959660408101359660609091013595509350505050565b6000806040838503121561357257600080fd5b61357b8361318e565b9150602083013561329a8161325c565b6000806000606084860312156135a057600080fd5b505081359360208301359350604090920135919050565b600080600080608085870312156135cd57600080fd5b6135d68561318e565b93506135e46020860161318e565b925060408501359150606085013567ffffffffffffffff81111561360757600080fd5b8501601f8101871361361857600080fd5b613627878235602084016133f2565b91505092959194509250565b6000806040838503121561364657600080fd5b823567ffffffffffffffff8082111561365e57600080fd5b818501915085601f83011261367257600080fd5b8135602082821115613686576136866133ab565b8160051b92506136978184016133c1565b82815292840181019281810190898511156136b157600080fd5b948201945b848610156136cf578535825294820194908201906136b6565b96506136de905087820161326a565b9450505050509250929050565b600080604083850312156136fe57600080fd5b6137078361318e565b91506137156020840161318e565b90509250929050565b600181811c9082168061373257607f821691505b60208210810361375257634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561376a57600080fd5b8151612a838161325c565b6020808252601c908201527f4552433732313a207472616e73666572206e6f7420616c6c6f77656400000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252600d908201526c6e6f7420617574686f72697a6560981b604082015260600190565b602080825260159082015274115490cdcc8c4e88139195081a5cc81b1bd8dad959605a1b604082015260600190565b60208082526003908201526231303160e81b604082015260600190565b6020808252601490820152731cd85b19481b9bdd081cdd185c9d1959081e595d60621b604082015260600190565b6020808252600e908201526d1cd85b19481a185cc8195b99195960921b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610b9557610b956138aa565b8082028115828204841417610b9557610b956138aa565b81810381811115610b9557610b956138aa565b6000815480845260208085019450836000528060002060005b8381101561393257815487529582019560019182019101613916565b509495945050505050565b85815284602082015283604082015260018060a01b038316606082015260a06080820152600061397060a08301846138fd565b979650505050505050565b601f821115610d7257600081815260208120601f850160051c810160208610156139a25750805b601f850160051c820191505b81811015612a6f578281556001016139ae565b815167ffffffffffffffff8111156139db576139db6133ab565b6139ef816139e9845461371e565b8461397b565b602080601f831160018114613a245760008415613a0c5750858301515b600019600386901b1c1916600185901b178555612a6f565b600085815260208120601f198616915b82811015613a5357888601518255948401946001909101908401613a34565b5085821015613a715787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602080835260008454613a958161371e565b80848701526040600180841660008114613ab65760018114613ad057613afe565b60ff1985168984015283151560051b890183019550613afe565b896000528660002060005b85811015613af65781548b8201860152908301908801613adb565b8a0184019650505b509398975050505050505050565b878152866020820152856040820152846060820152600060018060a01b03808616608084015280851660a08401525060e060c0830152613b4f60e08301846138fd565b9998505050505050505050565b634e487b7160e01b600052603260045260246000fd5b600060018201613b8457613b846138aa565b5060010190565b84815283602082015260018060a01b0383166040820152608060608201526000611e8d60808301846138fd565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611e8d908301846131c0565b600060208284031215613bfd57600080fd5b8151612a838161315b56feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212200e60b5d31cc030753a2186e37aec8b5d89f2e847c51714451b885b7a4b989a2f64736f6c6343000811003368747470733a2f2f746573746170692e78616e616c69612e636f6d2f78616e616c69612f6765742d6e66742d6d6574613f746f6b656e49643d4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572