[ { "inputs": [ { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "string", "name": "_symbol", "type": "string" }, { "internalType": "address", "name": "_royaltyRecipient", "type": "address" }, { "internalType": "uint128", "name": "_royaltyBps", "type": "uint128" }, { "internalType": "address", "name": "_primarySaleRecipient", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "ApprovalCallerNotOwnerNorApproved", "type": "error" }, { "inputs": [], "name": "ApprovalQueryForNonexistentToken", "type": "error" }, { "inputs": [], "name": "ApprovalToCurrentOwner", "type": "error" }, { "inputs": [], "name": "ApproveToCaller", "type": "error" }, { "inputs": [], "name": "BalanceQueryForZeroAddress", "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": "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": "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": [ { "components": [ { "internalType": "uint256", "name": "startTimestamp", "type": "uint256" }, { "internalType": "uint256", "name": "maxClaimableSupply", "type": "uint256" }, { "internalType": "uint256", "name": "supplyClaimed", "type": "uint256" }, { "internalType": "uint256", "name": "quantityLimitPerWallet", "type": "uint256" }, { "internalType": "bytes32", "name": "merkleRoot", "type": "bytes32" }, { "internalType": "uint256", "name": "pricePerToken", "type": "uint256" }, { "internalType": "address", "name": "currency", "type": "address" }, { "internalType": "string", "name": "metadata", "type": "string" } ], "indexed": false, "internalType": "struct IClaimCondition.ClaimCondition", "name": "condition", "type": "tuple" }, { "indexed": false, "internalType": "bool", "name": "resetEligibility", "type": "bool" } ], "name": "ClaimConditionUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "prevURI", "type": "string" }, { "indexed": false, "internalType": "string", "name": "newURI", "type": "string" } ], "name": "ContractURIUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "newRoyaltyRecipient", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "newRoyaltyBps", "type": "uint256" } ], "name": "DefaultRoyalty", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bool", "name": "restriction", "type": "bool" } ], "name": "OperatorRestriction", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "prevOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnerUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "recipient", "type": "address" } ], "name": "PrimarySaleRecipientUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "royaltyRecipient", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "royaltyBps", "type": "uint256" } ], "name": "RoyaltyForToken", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "index", "type": "uint256" }, { "indexed": false, "internalType": "string", "name": "revealedURI", "type": "string" } ], "name": "TokenURIRevealed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "claimer", "type": "address" }, { "indexed": true, "internalType": "address", "name": "receiver", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "startTokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "quantityClaimed", "type": "uint256" } ], "name": "TokensClaimed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "startTokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "endTokenId", "type": "uint256" }, { "indexed": false, "internalType": "string", "name": "baseURI", "type": "string" }, { "indexed": false, "internalType": "bytes", "name": "encryptedBaseURI", "type": "bytes" } ], "name": "TokensLazyMinted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [], "name": "OPERATOR_FILTER_REGISTRY", "outputs": [ { "internalType": "contract IOperatorFilterRegistry", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "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": "address", "name": "_receiver", "type": "address" }, { "internalType": "uint256", "name": "_quantity", "type": "uint256" }, { "internalType": "address", "name": "_currency", "type": "address" }, { "internalType": "uint256", "name": "_pricePerToken", "type": "uint256" }, { "components": [ { "internalType": "bytes32[]", "name": "proof", "type": "bytes32[]" }, { "internalType": "uint256", "name": "quantityLimitPerWallet", "type": "uint256" }, { "internalType": "uint256", "name": "pricePerToken", "type": "uint256" }, { "internalType": "address", "name": "currency", "type": "address" } ], "internalType": "struct IDropSinglePhase.AllowlistProof", "name": "_allowlistProof", "type": "tuple" }, { "internalType": "bytes", "name": "_data", "type": "bytes" } ], "name": "claim", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "claimCondition", "outputs": [ { "internalType": "uint256", "name": "startTimestamp", "type": "uint256" }, { "internalType": "uint256", "name": "maxClaimableSupply", "type": "uint256" }, { "internalType": "uint256", "name": "supplyClaimed", "type": "uint256" }, { "internalType": "uint256", "name": "quantityLimitPerWallet", "type": "uint256" }, { "internalType": "bytes32", "name": "merkleRoot", "type": "bytes32" }, { "internalType": "uint256", "name": "pricePerToken", "type": "uint256" }, { "internalType": "address", "name": "currency", "type": "address" }, { "internalType": "string", "name": "metadata", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "contractURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes", "name": "data", "type": "bytes" }, { "internalType": "bytes", "name": "key", "type": "bytes" } ], "name": "encryptDecrypt", "outputs": [ { "internalType": "bytes", "name": "result", "type": "bytes" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "encryptedData", "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": [], "name": "getBaseURICount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_index", "type": "uint256" } ], "name": "getBatchIdAtIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getDefaultRoyaltyInfo", "outputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_batchId", "type": "uint256" }, { "internalType": "bytes", "name": "_key", "type": "bytes" } ], "name": "getRevealURI", "outputs": [ { "internalType": "string", "name": "revealedURI", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "getRoyaltyInfoForToken", "outputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_claimer", "type": "address" } ], "name": "getSupplyClaimedByWallet", "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": "uint256", "name": "", "type": "uint256" } ], "name": "isCustomised", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_batchId", "type": "uint256" } ], "name": "isEncryptedBatch", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "internalType": "string", "name": "_baseURIForTokens", "type": "string" }, { "internalType": "bytes", "name": "_data", "type": "bytes" } ], "name": "lazyMint", "outputs": [ { "internalType": "uint256", "name": "batchId", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "lockTokenCustomisation", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes[]", "name": "data", "type": "bytes[]" } ], "name": "multicall", "outputs": [ { "internalType": "bytes[]", "name": "results", "type": "bytes[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "nextTokenIdToClaim", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "nextTokenIdToMint", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "operatorRestriction", "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": "primarySaleRecipient", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_index", "type": "uint256" }, { "internalType": "bytes", "name": "_key", "type": "bytes" } ], "name": "reveal", "outputs": [ { "internalType": "string", "name": "revealedURI", "type": "string" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "salePrice", "type": "uint256" } ], "name": "royaltyInfo", "outputs": [ { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "uint256", "name": "royaltyAmount", "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": "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": [ { "components": [ { "internalType": "uint256", "name": "startTimestamp", "type": "uint256" }, { "internalType": "uint256", "name": "maxClaimableSupply", "type": "uint256" }, { "internalType": "uint256", "name": "supplyClaimed", "type": "uint256" }, { "internalType": "uint256", "name": "quantityLimitPerWallet", "type": "uint256" }, { "internalType": "bytes32", "name": "merkleRoot", "type": "bytes32" }, { "internalType": "uint256", "name": "pricePerToken", "type": "uint256" }, { "internalType": "address", "name": "currency", "type": "address" }, { "internalType": "string", "name": "metadata", "type": "string" } ], "internalType": "struct IClaimCondition.ClaimCondition", "name": "_condition", "type": "tuple" }, { "internalType": "bool", "name": "_resetClaimEligibility", "type": "bool" } ], "name": "setClaimConditions", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "_uri", "type": "string" } ], "name": "setContractURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" }, { "internalType": "string", "name": "_tokenURI", "type": "string" } ], "name": "setCustomTokenURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_royaltyRecipient", "type": "address" }, { "internalType": "uint256", "name": "_royaltyBps", "type": "uint256" } ], "name": "setDefaultRoyaltyInfo", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "_restriction", "type": "bool" } ], "name": "setOperatorRestriction", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_newOwner", "type": "address" } ], "name": "setOwner", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_saleRecipient", "type": "address" } ], "name": "setPrimarySaleRecipient", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" }, { "internalType": "address", "name": "_recipient", "type": "address" }, { "internalType": "uint256", "name": "_bps", "type": "uint256" } ], "name": "setRoyaltyInfoForToken", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_subscription", "type": "address" } ], "name": "subscribeToRegistry", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "tokenCustomisationIsLocked", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "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": "_claimer", "type": "address" }, { "internalType": "uint256", "name": "_quantity", "type": "uint256" }, { "internalType": "address", "name": "_currency", "type": "address" }, { "internalType": "uint256", "name": "_pricePerToken", "type": "uint256" }, { "components": [ { "internalType": "bytes32[]", "name": "proof", "type": "bytes32[]" }, { "internalType": "uint256", "name": "quantityLimitPerWallet", "type": "uint256" }, { "internalType": "uint256", "name": "pricePerToken", "type": "uint256" }, { "internalType": "address", "name": "currency", "type": "address" } ], "internalType": "struct IDropSinglePhase.AllowlistProof", "name": "_allowlistProof", "type": "tuple" } ], "name": "verifyClaim", "outputs": [ { "internalType": "bool", "name": "isOverride", "type": "bool" } ], "stateMutability": "view", "type": "function" } ]
60806040523480156200001157600080fd5b5060405162004cca38038062004cca83398101604081905262000034916200046a565b8484848484733cc6cdda760b79bafa08df41ecfa224f810dceb6600186866002620000608382620005a5565b5060036200006f8282620005a5565b50506000805550620000828282620000cc565b5062000090905033620001fa565b620000a5836001600160801b0384166200024c565b620000b081620002f7565b620000bc600162000341565b5050505050505050505062000671565b6daaeb6d7670e522a718067333cd4e3b15620001f6576001600160a01b0382163b15620001af5780156200016e57604051633e9f1edf60e11b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e90637d3e3dbe906044015b600060405180830381600087803b1580156200015157600080fd5b505af115801562000166573d6000803e3d6000fd5b505050505050565b60405163a0af290360e01b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e9063a0af29039060440162000136565b604051632210724360e11b81523060048201526daaeb6d7670e522a718067333cd4e90634420e48690602401600060405180830381600087803b1580156200015157600080fd5b5050565b600980546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d7690600090a35050565b612710811115620002955760405162461bcd60e51b815260206004820152600f60248201526e45786365656473206d61782062707360881b604482015260640160405180910390fd5b600a80546001600160a01b0384166001600160b01b03199091168117600160a01b61ffff851602179091556040518281527f90d7ec04bcb8978719414f82e52e4cb651db41d0e6f8cea6118c2191e6183adb9060200160405180910390a25050565b600e80546001600160a01b0319166001600160a01b0383169081179091556040517f299d17e95023f496e0ffc4909cff1a61f74bb5eb18de6f900f4155bfa1b3b33390600090a250565b6011805460ff19168215159081179091556040519081527f38475885990d8dfe9ca01f0ef160a1b5514426eab9ddbc953a3353410ba780969060200160405180910390a150565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620003b057600080fd5b81516001600160401b0380821115620003cd57620003cd62000388565b604051601f8301601f19908116603f01168101908282118183101715620003f857620003f862000388565b816040528381526020925086838588010111156200041557600080fd5b600091505b838210156200043957858201830151818301840152908201906200041a565b600093810190920192909252949350505050565b80516001600160a01b03811681146200046557600080fd5b919050565b600080600080600060a086880312156200048357600080fd5b85516001600160401b03808211156200049b57600080fd5b620004a989838a016200039e565b96506020880151915080821115620004c057600080fd5b50620004cf888289016200039e565b945050620004e0604087016200044d565b60608701519093506001600160801b0381168114620004fe57600080fd5b91506200050e608087016200044d565b90509295509295909350565b600181811c908216806200052f57607f821691505b6020821081036200055057634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620005a057600081815260208120601f850160051c810160208610156200057f5750805b601f850160051c820191505b8181101562000166578281556001016200058b565b505050565b81516001600160401b03811115620005c157620005c162000388565b620005d981620005d284546200051a565b8462000556565b602080601f831160018114620006115760008415620005f85750858301515b600019600386901b1c1916600185901b17855562000166565b600085815260208120601f198616915b82811015620006425788860151825594840194600190910190840162000621565b5085821015620006615787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61464980620006816000396000f3fe6080604052600436106102c95760003560e01c80636f4f283711610175578063acd083f8116100dc578063d637ed5911610095578063e8a3d4851161006f578063e8a3d48514610913578063e985e9c514610928578063eec8897c14610971578063f4ca0ee61461099157600080fd5b8063d637ed591461089a578063da5c17a0146108c3578063e7150322146108f357600080fd5b8063acd083f8146107da578063b24f2d39146107ef578063b88d4fde1461081a578063c87b56dd1461083a578063ce8056421461085a578063d37c353b1461087a57600080fd5b806395d89b411161012e57806395d89b41146107185780639bcf7a151461072d5780639fc4d68f1461074d578063a05112fc1461076d578063a22cb4651461078d578063ac9650d8146107ad57600080fd5b80636f4f28371461066757806370a082311461068757806384bb1e42146106a7578063851fc4b6146106ba5780638da5cb5b146106da578063938e3d7b146106f857600080fd5b80633b1475a7116102345780634cc157df116101ed578063600dd5ea116101c7578063600dd5ea146105f25780636352211e1461061257806363b45e2d146106325780636b0d68a41461064757600080fd5b80634cc157df14610576578063504c6e01146105b857806357fd8455146105d257600080fd5b80633b1475a7146104bf57806341f43434146104d4578063426cfaf3146104f657806342842e0e1461051657806342966c6814610536578063492e224b1461055657600080fd5b806318160ddd1161028657806318160ddd146103b957806323b872dd146103dc5780632419f51b146103fc5780632a55205a1461041c57806332f0cd641461045b57806335b65e1f1461047b57600080fd5b806301ffc9a7146102ce57806306fdde0314610303578063079fe40e14610325578063081812fc14610357578063095ea7b31461037757806313af403514610399575b600080fd5b3480156102da57600080fd5b506102ee6102e9366004613845565b6109c1565b60405190151581526020015b60405180910390f35b34801561030f57600080fd5b50610318610a2e565b6040516102fa91906138b2565b34801561033157600080fd5b50600e546001600160a01b03165b6040516001600160a01b0390911681526020016102fa565b34801561036357600080fd5b5061033f6103723660046138c5565b610ac0565b34801561038357600080fd5b506103976103923660046138f5565b610b04565b005b3480156103a557600080fd5b506103976103b436600461391f565b610b1d565b3480156103c557600080fd5b50600154600054035b6040519081526020016102fa565b3480156103e857600080fd5b506103976103f736600461393a565b610b56565b34801561040857600080fd5b506103ce6104173660046138c5565b610b81565b34801561042857600080fd5b5061043c610437366004613976565b610bef565b604080516001600160a01b0390931683526020830191909152016102fa565b34801561046757600080fd5b506103976104763660046139a6565b610c2c565b34801561048757600080fd5b506103ce61049636600461391f565b601a546000908152601b602090815260408083206001600160a01b039094168352929052205490565b3480156104cb57600080fd5b50600f546103ce565b3480156104e057600080fd5b5061033f6daaeb6d7670e522a718067333cd4e81565b34801561050257600080fd5b506103976105113660046139c3565b610c9d565b34801561052257600080fd5b5061039761053136600461393a565b610eae565b34801561054257600080fd5b506103976105513660046138c5565b610ed3565b34801561056257600080fd5b506102ee6105713660046138c5565b610ede565b34801561058257600080fd5b506105966105913660046138c5565b610f04565b604080516001600160a01b03909316835261ffff9091166020830152016102fa565b3480156105c457600080fd5b506011546102ee9060ff1681565b3480156105de57600080fd5b506103976105ed36600461391f565b610f6f565b3480156105fe57600080fd5b5061039761060d3660046138f5565b610fdf565b34801561061e57600080fd5b5061033f61062d3660046138c5565b611011565b34801561063e57600080fd5b50600c546103ce565b34801561065357600080fd5b506103976106623660046138c5565b611023565b34801561067357600080fd5b5061039761068236600461391f565b611068565b34801561069357600080fd5b506103ce6106a236600461391f565b611095565b6103976106b5366004613af5565b6110e3565b3480156106c657600080fd5b506103976106d5366004613b8b565b6111be565b3480156106e657600080fd5b506009546001600160a01b031661033f565b34801561070457600080fd5b50610397610713366004613bd1565b6112e0565b34801561072457600080fd5b5061031861130d565b34801561073957600080fd5b50610397610748366004613c05565b61131c565b34801561075957600080fd5b50610318610768366004613c72565b61134b565b34801561077957600080fd5b506103186107883660046138c5565b6114cb565b34801561079957600080fd5b506103976107a8366004613cbd565b611565565b3480156107b957600080fd5b506107cd6107c8366004613cd9565b611579565b6040516102fa9190613d4d565b3480156107e657600080fd5b506000546103ce565b3480156107fb57600080fd5b50600a546001600160a01b03811690600160a01b900461ffff16610596565b34801561082657600080fd5b50610397610835366004613daf565b61166d565b34801561084657600080fd5b506103186108553660046138c5565b61169a565b34801561086657600080fd5b50610318610875366004613c72565b611760565b34801561088657600080fd5b506103ce610895366004613e16565b611803565b3480156108a657600080fd5b506108af61189b565b6040516102fa989796959493929190613e8f565b3480156108cf57600080fd5b506102ee6108de3660046138c5565b601d6020526000908152604090205460ff1681565b3480156108ff57600080fd5b5061031861090e366004613ee4565b61195a565b34801561091f57600080fd5b506103186119cf565b34801561093457600080fd5b506102ee610943366004613f3f565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b34801561097d57600080fd5b506102ee61098c366004613f72565b6119dc565b34801561099d57600080fd5b506102ee6109ac3660046138c5565b601c6020526000908152604090205460ff1681565b60006301ffc9a760e01b6001600160e01b0319831614806109f257506380ac58cd60e01b6001600160e01b03198316145b80610a0d5750635b5e139f60e01b6001600160e01b03198316145b80610a2857506001600160e01b0319821663152a902d60e11b145b92915050565b606060028054610a3d90613fe3565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6990613fe3565b8015610ab65780601f10610a8b57610100808354040283529160200191610ab6565b820191906000526020600020905b815481529060010190602001808311610a9957829003601f168201915b5050505050905090565b6000610acb82611d8e565b610ae8576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b81610b0e81611db9565b610b188383611e7d565b505050565b610b25611efe565b610b4a5760405162461bcd60e51b8152600401610b4190614017565b60405180910390fd5b610b5381611f2b565b50565b826001600160a01b0381163314610b7057610b7033611db9565b610b7b848484611f7d565b50505050565b6000610b8c600c5490565b8210610bca5760405162461bcd60e51b815260206004820152600d60248201526c092dcecc2d8d2c840d2dcc8caf609b1b6044820152606401610b41565b600c8281548110610bdd57610bdd61403f565b90600052602060002001549050919050565b600080600080610bfe86610f04565b90945084925061ffff169050612710610c17828761406b565b610c219190614098565b925050509250929050565b610c34611efe565b610c945760405162461bcd60e51b815260206004820152602b60248201527f4e6f7420617574686f72697a656420746f20736574206f70657261746f72207260448201526a32b9ba3934b1ba34b7b71760a91b6064820152608401610b41565b610b5381611f88565b610ca5611efe565b610cc15760405162461bcd60e51b8152600401610b4190614017565b601a546014548215610d10575060003360405160609190911b6bffffffffffffffffffffffff191660208201524360348201526054016040516020818303038152906040528051906020012091505b8360200135811115610d595760405162461bcd60e51b81526020600482015260126024820152711b585e081cdd5c1c1b1e4818db185a5b595960721b6044820152606401610b41565b604051806101000160405280856000013581526020018560200135815260200182815260200185606001358152602001856080013581526020018560a0013581526020018560c0016020810190610db0919061391f565b6001600160a01b03168152602001610dcb60e08701876140ac565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505091525080516012908155602082015160135560408201516014556060820151601555608082015160165560a082015160175560c0820151601880546001600160a01b0319166001600160a01b0390921691909117905560e0820151601990610e669082614138565b505050601a8290556040517f6dab9d7d05d468100139089b2516cb8ff286c3972ff070d3b509e371f0d0d4b890610ea09086908690614220565b60405180910390a150505050565b826001600160a01b0381163314610ec857610ec833611db9565b610b7b848484611fcf565b610b53816001611fea565b60008181526010602052604081208054829190610efa90613fe3565b9050119050919050565b6000818152600b60209081526040808320815180830190925280546001600160a01b031680835260019091015492820192909252829115610f4b5780516020820151610f65565b600a546001600160a01b03811690600160a01b900461ffff165b9250925050915091565b610f77611efe565b610fd45760405162461bcd60e51b815260206004820152602860248201527f4e6f7420617574686f72697a656420746f2073756273637269626520746f207260448201526732b3b4b9ba393c9760c11b6064820152608401610b41565b610b5381600161219d565b610fe7611efe565b6110035760405162461bcd60e51b8152600401610b4190614017565b61100d82826122ab565b5050565b600061101c82612351565b5192915050565b6009546001600160a01b0316331461104d5760405162461bcd60e51b8152600401610b4190614017565b6000908152601d60205260409020805460ff19166001179055565b611070611efe565b61108c5760405162461bcd60e51b8152600401610b4190614017565b610b538161246b565b60006001600160a01b0382166110be576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b03166000908152600560205260409020546001600160401b031690565b6110f18686868686866124b5565b601a5461110133878787876119dc565b50856012600201600082825461111791906142ed565b90915550506000818152601b60209081526040808320338452909152812080548892906111459084906142ed565b9091555061115890506000878787612514565b600061116488886125c6565b9050806001600160a01b038916336001600160a01b03167fff097c7d8b1957a4ff09ef1361b5fb54dcede3941ba836d0beb9d10bec725de68a6040516111ac91815260200190565b60405180910390a45050505050505050565b6009546001600160a01b031633146111e85760405162461bcd60e51b8152600401610b4190614017565b6000828152601d602052604090205460ff16156112475760405162461bcd60e51b815260206004820152601d60248201527f546f6b656e20637573746f6d69736174696f6e206973206c6f636b65640000006044820152606401610b41565b3361125183611011565b6001600160a01b0316146112b35760405162461bcd60e51b815260206004820152602360248201527f596f7520617265206e6f7420746865206f776e6572206f662074686520746f6b60448201526232b71760e91b6064820152608401610b41565b6000828152601c60209081526040808320805460ff19166001179055601e9091529020610b188282614138565b6112e8611efe565b6113045760405162461bcd60e51b8152600401610b4190614017565b610b53816125d3565b606060038054610a3d90613fe3565b611324611efe565b6113405760405162461bcd60e51b8152600401610b4190614017565b610b188383836126af565b60008381526010602052604081208054606092919061136990613fe3565b80601f016020809104026020016040519081016040528092919081815260200182805461139590613fe3565b80156113e25780601f106113b7576101008083540402835291602001916113e2565b820191906000526020600020905b8154815290600101906020018083116113c557829003601f168201915b50505050509050805160000361142e5760405162461bcd60e51b8152602060048201526011602482015270139bdd1a1a5b99c81d1bc81c995d99585b607a1b6044820152606401610b41565b600080828060200190518101906114459190614300565b9150915061145482878761195a565b9350808487874660405160200161146e9493929190614380565b60405160208183030381529060405280519060200120146114c15760405162461bcd60e51b815260206004820152600d60248201526c496e636f7272656374206b657960981b6044820152606401610b41565b5050509392505050565b601060205260009081526040902080546114e490613fe3565b80601f016020809104026020016040519081016040528092919081815260200182805461151090613fe3565b801561155d5780601f106115325761010080835404028352916020019161155d565b820191906000526020600020905b81548152906001019060200180831161154057829003601f168201915b505050505081565b8161156f81611db9565b610b188383612778565b6060816001600160401b0381111561159357611593613a32565b6040519080825280602002602001820160405280156115c657816020015b60608152602001906001900390816115b15790505b50905060005b8281101561166657611636308585848181106115ea576115ea61403f565b90506020028101906115fc91906140ac565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061280d92505050565b8282815181106116485761164861403f565b6020026020010181905250808061165e906143a9565b9150506115cc565b5092915050565b836001600160a01b03811633146116875761168733611db9565b61169385858585612839565b5050505050565b6000818152601c602052604090205460609060ff1615611752576000828152601e6020526040902080546116cd90613fe3565b80601f01602080910402602001604051908101604052809291908181526020018280546116f990613fe3565b80156117465780601f1061171b57610100808354040283529160200191611746565b820191906000526020600020905b81548152906001019060200180831161172957829003601f168201915b50505050509050919050565b610a288261287d565b919050565b606061176a611efe565b6117865760405162461bcd60e51b8152600401610b4190614017565b600061179185610b81565b905061179e81858561134b565b91506117b981604051806020016040528060008152506128ec565b6117c38183612904565b847f6df1d8db2a036436ffe0b2d1833f2c5f1e624818dfce2578c0faa4b83ef9998d836040516117f391906138b2565b60405180910390a2509392505050565b600081156118845760008061181a848601866143c2565b91509150815160001415801561182f57508015155b156118815761188188600f5461184591906142ed565b86868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506128ec92505050565b50505b611891868686868661291c565b9695505050505050565b60128054601354601454601554601654601754601854601980549798969795969495939492936001600160a01b0390921692916118d790613fe3565b80601f016020809104026020016040519081016040528092919081815260200182805461190390613fe3565b80156119505780601f1061192557610100808354040283529160200191611950565b820191906000526020600020905b81548152906001019060200180831161193357829003601f168201915b5050505050905088565b8251604080518083016020019091528181529060005b818110156119c657600085858360405160200161198f93929190614406565b60408051601f198184030181529190528051602091820120888401820151188584018201526119bf9150826142ed565b9050611970565b50509392505050565b600880546114e490613fe3565b60408051610100810182526012805482526013546020830152601454928201929092526015546060820152601654608082015260175460a08201526018546001600160a01b031660c082015260198054600093849392909160e084019190611a4390613fe3565b80601f0160208091040260200160405190810160405280929190818152602001828054611a6f90613fe3565b8015611abc5780601f10611a9157610100808354040283529160200191611abc565b820191906000526020600020905b815481529060010190602001808311611a9f57829003601f168201915b50505091909252505050606081015160a082015160c08301516080840151939450919290919015611ba157611b9d611af48780614418565b80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250505060808088015191508d9060208b01359060408c013590611b49908d0160608e0161391f565b6040516bffffffffffffffffffffffff19606095861b811660208301526034820194909452605481019290925290921b16607482015260880160405160208183030381529060405280519060200120612a29565b5094505b8415611c28578560200135600003611bb95782611bbf565b85602001355b9250600019866040013503611bd45781611bda565b85604001355b9150600019866040013514158015611c0b57506000611bff608088016060890161391f565b6001600160a01b031614155b611c155780611c25565b611c25608087016060880161391f565b90505b601a546000908152601b602090815260408083206001600160a01b03808f16855292529091205490898116908316141580611c635750828814155b15611ca35760405162461bcd60e51b815260206004820152601060248201526f2150726963654f7243757272656e637960801b6044820152606401610b41565b891580611cb8575083611cb6828c6142ed565b115b15611cee5760405162461bcd60e51b8152600401610b41906020808252600490820152632151747960e01b604082015260600190565b84602001518a8660400151611d0391906142ed565b1115611d3e5760405162461bcd60e51b815260206004820152600a602482015269214d6178537570706c7960b01b6044820152606401610b41565b8451421015611d805760405162461bcd60e51b815260206004820152600e60248201526d18d85b9d0818db185a5b481e595d60921b6044820152606401610b41565b505050505095945050505050565b6000805482108015610a28575050600090815260046020526040902054600160e01b900460ff161590565b60115460ff1615610b53576daaeb6d7670e522a718067333cd4e3b15610b5357604051633185c44d60e21b81523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015611e31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e559190614461565b610b5357604051633b79c77360e21b81526001600160a01b0382166004820152602401610b41565b6000611e8882611011565b9050806001600160a01b0316836001600160a01b031603611ebc5760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b03821614611ef357611ed68133610943565b611ef3576040516367d9dca160e11b815260040160405180910390fd5b610b18838383612af7565b6000611f126009546001600160a01b031690565b6001600160a01b0316336001600160a01b031614905090565b600980546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d7690600090a35050565b610b18838383612b53565b6011805460ff19168215159081179091556040519081527f38475885990d8dfe9ca01f0ef160a1b5514426eab9ddbc953a3353410ba780969060200160405180910390a150565b610b188383836040518060200160405280600081525061166d565b6000611ff583612351565b8051909150821561205b576000336001600160a01b038316148061201e575061201e8233610943565b8061203957503361202e86610ac0565b6001600160a01b0316145b90508061205957604051632ce44b5f60e11b815260040160405180910390fd5b505b61206760008583612af7565b6001600160a01b0380821660008181526005602090815260408083208054600160801b6000196001600160401b0380841691909101811667ffffffffffffffff198416811783900482166001908101831690930277ffffffffffffffff0000000000000000ffffffffffffffff19909416179290921783558b86526004909452828520805460ff60e01b1942909316600160a01b026001600160e01b03199091169097179690961716600160e01b17855591890180845292208054919490911661216557600054821461216557805460208701516001600160401b0316600160a01b026001600160e01b03199091166001600160a01b038716171781555b5050604051869250600091506001600160a01b038416906000805160206145f4833981519152908390a4505060018054810190555050565b6daaeb6d7670e522a718067333cd4e3b1561100d576001600160a01b0382163b1561227a57801561223a57604051633e9f1edf60e11b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e90637d3e3dbe906044015b600060405180830381600087803b15801561221e57600080fd5b505af1158015612232573d6000803e3d6000fd5b505050505050565b60405163a0af290360e01b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e9063a0af290390604401612204565b604051632210724360e11b81523060048201526daaeb6d7670e522a718067333cd4e90634420e48690602401612204565b6127108111156122ef5760405162461bcd60e51b815260206004820152600f60248201526e45786365656473206d61782062707360881b6044820152606401610b41565b600a80546001600160a01b0384166001600160b01b03199091168117600160a01b61ffff851602179091556040518281527f90d7ec04bcb8978719414f82e52e4cb651db41d0e6f8cea6118c2191e6183adb9060200160405180910390a25050565b60408051606081018252600080825260208201819052918101919091528160005481101561245257600081815260046020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff161515918101829052906124505780516001600160a01b0316156123e7579392505050565b5060001901600081815260046020908152604091829020825160608101845290546001600160a01b038116808352600160a01b82046001600160401b031693830193909352600160e01b900460ff161515928101929092521561244b579392505050565b6123e7565b505b604051636f96cda160e11b815260040160405180910390fd5b600e80546001600160a01b0319166001600160a01b0383169081179091556040517f299d17e95023f496e0ffc4909cff1a61f74bb5eb18de6f900f4155bfa1b3b33390600090a250565b600f54856000546124c691906142ed565b11156122325760405162461bcd60e51b815260206004820152601860248201527f4e6f7420656e6f756768206d696e74656420746f6b656e7300000000000000006044820152606401610b41565b8015610b7b576000612526828561406b565b905073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed196001600160a01b03841601612594578034146125945760405162461bcd60e51b81526020600482015260156024820152744d7573742073656e6420746f74616c20707269636560581b6044820152606401610b41565b60006001600160a01b038616156125ab57856125b8565b600e546001600160a01b03165b905061223284338385612d2c565b600054610a288383612d72565b6000600880546125e290613fe3565b80601f016020809104026020016040519081016040528092919081815260200182805461260e90613fe3565b801561265b5780601f106126305761010080835404028352916020019161265b565b820191906000526020600020905b81548152906001019060200180831161263e57829003601f168201915b5050505050905081600890816126719190614138565b507fc9c7c3fe08b88b4df9d4d47ef47d2c43d55c025a0ba88ca442580ed9e7348a1681836040516126a392919061447e565b60405180910390a15050565b6127108111156126f35760405162461bcd60e51b815260206004820152600f60248201526e45786365656473206d61782062707360881b6044820152606401610b41565b6040805180820182526001600160a01b0384811680835260208084018681526000898152600b8352869020945185546001600160a01b031916941693909317845591516001909301929092559151838152909185917f7365cf4122f072a3365c20d54eff9b38d73c096c28e1892ec8f5b0e403a0f12d910160405180910390a3505050565b336001600160a01b038316036127a15760405163b06307db60e01b815260040160405180910390fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b606061283283836040518060600160405280602781526020016145cd60279139612d8c565b9392505050565b612844848484612b53565b6001600160a01b0383163b15610b7b5761286084848484612e5f565b610b7b576040516368d2bf6b60e11b815260040160405180910390fd5b6060600061288a83612f4b565b509050600061289884613050565b90506128a382610ede565b156128d157806040516020016128b991906144ac565b60405160208183030381529060405292505050919050565b806128db856131b1565b6040516020016128b99291906144d1565b6000828152601060205260409020610b188282614138565b6000828152600d60205260409020610b188282614138565b6000612926611efe565b6129425760405162461bcd60e51b8152600401610b4190614017565b8560000361297a5760405162461bcd60e51b81526020600482015260056024820152640c08185b5d60da1b6044820152606401610b41565b6000600f5490506129c2818888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506132b192505050565b600f919091559150807f2a0365091ef1a40953c670dce28177e37520648a6fdc91506bffac0ab045570d60016129f88a846142ed565b612a029190614500565b88888888604051612a17959493929190614513565b60405180910390a25095945050505050565b6000808281805b8751811015612aeb57612a4460028361406b565b91506000888281518110612a5a57612a5a61403f565b60200260200101519050808411612a9c576040805160208101869052908101829052606001604051602081830303815290604052805190602001209350612ad8565b6040805160208101839052908101859052606001604051602081830303815290604052805190602001209350600183612ad591906142ed565b92505b5080612ae3816143a9565b915050612a30565b50941495939450505050565b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000612b5e82612351565b9050836001600160a01b031681600001516001600160a01b031614612b955760405162a1148160e81b815260040160405180910390fd5b6000336001600160a01b0386161480612bb35750612bb38533610943565b80612bce575033612bc384610ac0565b6001600160a01b0316145b905080612bee57604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b038416612c1557604051633a954ecd60e21b815260040160405180910390fd5b612c2160008487612af7565b6001600160a01b038581166000908152600560209081526040808320805467ffffffffffffffff198082166001600160401b0392831660001901831617909255898616808652838620805493841693831660019081018416949094179055898652600490945282852080546001600160e01b031916909417600160a01b42909216919091021783558701808452922080549193909116612cf5576000548214612cf557805460208601516001600160401b0316600160a01b026001600160e01b03199091166001600160a01b038a16171781555b50505082846001600160a01b0316866001600160a01b03166000805160206145f483398151915260405160405180910390a4611693565b8015610b7b5773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed196001600160a01b03851601612d6657612d618282613315565b610b7b565b610b7b848484846133b8565b61100d82826040518060200160405280600081525061340b565b60606001600160a01b0384163b612df45760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610b41565b600080856001600160a01b031685604051612e0f919061454c565b600060405180830381855af49150503d8060008114612e4a576040519150601f19603f3d011682016040523d82523d6000602084013e612e4f565b606091505b50915091506118918282866135ae565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290612e94903390899088908890600401614568565b6020604051808303816000875af1925050508015612ecf575060408051601f3d908101601f19168201909252612ecc9181019061459b565b60015b612f2d573d808015612efd576040519150601f19603f3d011682016040523d82523d6000602084013e612f02565b606091505b508051600003612f25576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b6000806000612f59600c5490565b90506000600c805480602002602001604051908101604052809291908181526020018280548015612fa957602002820191906000526020600020905b815481526020019060010190808311612f95575b5050505050905060005b8281101561301557818181518110612fcd57612fcd61403f565b602002602001015186101561300357809350818181518110612ff157612ff161403f565b60200260200101519450505050915091565b61300e6001826142ed565b9050612fb3565b5060405162461bcd60e51b815260206004820152600f60248201526e125b9d985b1a59081d1bdad95b9259608a1b6044820152606401610b41565b6060600061305d600c5490565b90506000600c8054806020026020016040519081016040528092919081815260200182805480156130ad57602002820191906000526020600020905b815481526020019060010190808311613099575b5050505050905060005b82811015613015578181815181106130d1576130d161403f565b602002602001015185101561319f57600d60008383815181106130f6576130f661403f565b60200260200101518152602001908152602001600020805461311790613fe3565b80601f016020809104026020016040519081016040528092919081815260200182805461314390613fe3565b80156131905780601f1061316557610100808354040283529160200191613190565b820191906000526020600020905b81548152906001019060200180831161317357829003601f168201915b50505050509350505050919050565b6131aa6001826142ed565b90506130b7565b6060816000036131d85750506040805180820190915260018152600360fc1b602082015290565b8160005b811561320257806131ec816143a9565b91506131fb9050600a83614098565b91506131dc565b6000816001600160401b0381111561321c5761321c613a32565b6040519080825280601f01601f191660200182016040528015613246576020820181803683370190505b5090505b8415612f435761325b600183614500565b9150613268600a866145b8565b6132739060306142ed565b60f81b8183815181106132885761328861403f565b60200101906001600160f81b031916908160001a9053506132aa600a86614098565b945061324a565b6000806132be84866142ed565b600c8054600181019091557fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7018190556000818152600d6020526040902090925082915061330c8482614138565b50935093915050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613362576040519150601f19603f3d011682016040523d82523d6000602084013e613367565b606091505b5050905080610b185760405162461bcd60e51b815260206004820152601c60248201527f6e617469766520746f6b656e207472616e73666572206661696c6564000000006044820152606401610b41565b816001600160a01b0316836001600160a01b03160315610b7b57306001600160a01b038416036133f657612d616001600160a01b03851683836135e7565b610b7b6001600160a01b03851684848461364a565b6000546001600160a01b03841661343457604051622e076360e81b815260040160405180910390fd5b826000036134555760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038416600081815260056020908152604080832080546fffffffffffffffffffffffffffffffff1981166001600160401b038083168b0181169182176801000000000000000067ffffffffffffffff1990941690921783900481168b01811690920217909155858452600490925290912080546001600160e01b0319168317600160a01b42909316929092029190911790558190818501903b1561356b575b60405182906001600160a01b038816906000906000805160206145f4833981519152908290a46135346000878480600101955087612e5f565b613551576040516368d2bf6b60e11b815260040160405180910390fd5b8082106134fb57826000541461356657600080fd5b61359e565b5b6040516001830192906001600160a01b038816906000906000805160206145f4833981519152908290a480821061356c575b506000908155610b7b9085838684565b606083156135bd575081612832565b8251156135cd5782518084602001fd5b8160405162461bcd60e51b8152600401610b4191906138b2565b6040516001600160a01b038316602482015260448101829052610b1890849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613682565b6040516001600160a01b0380851660248301528316604482015260648101829052610b7b9085906323b872dd60e01b90608401613613565b60006136d7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166137549092919063ffffffff16565b805190915015610b1857808060200190518101906136f59190614461565b610b185760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610b41565b6060612f438484600085856001600160a01b0385163b6137b65760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610b41565b600080866001600160a01b031685876040516137d2919061454c565b60006040518083038185875af1925050503d806000811461380f576040519150601f19603f3d011682016040523d82523d6000602084013e613814565b606091505b50915091506138248282866135ae565b979650505050505050565b6001600160e01b031981168114610b5357600080fd5b60006020828403121561385757600080fd5b81356128328161382f565b60005b8381101561387d578181015183820152602001613865565b50506000910152565b6000815180845261389e816020860160208601613862565b601f01601f19169290920160200192915050565b6020815260006128326020830184613886565b6000602082840312156138d757600080fd5b5035919050565b80356001600160a01b038116811461175b57600080fd5b6000806040838503121561390857600080fd5b613911836138de565b946020939093013593505050565b60006020828403121561393157600080fd5b612832826138de565b60008060006060848603121561394f57600080fd5b613958846138de565b9250613966602085016138de565b9150604084013590509250925092565b6000806040838503121561398957600080fd5b50508035926020909101359150565b8015158114610b5357600080fd5b6000602082840312156139b857600080fd5b813561283281613998565b600080604083850312156139d657600080fd5b82356001600160401b038111156139ec57600080fd5b830161010081860312156139ff57600080fd5b91506020830135613a0f81613998565b809150509250929050565b600060808284031215613a2c57600080fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715613a7057613a70613a32565b604052919050565b60006001600160401b03821115613a9157613a91613a32565b50601f01601f191660200190565b600082601f830112613ab057600080fd5b8135613ac3613abe82613a78565b613a48565b818152846020838601011115613ad857600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c08789031215613b0e57600080fd5b613b17876138de565b955060208701359450613b2c604088016138de565b93506060870135925060808701356001600160401b0380821115613b4f57600080fd5b613b5b8a838b01613a1a565b935060a0890135915080821115613b7157600080fd5b50613b7e89828a01613a9f565b9150509295509295509295565b60008060408385031215613b9e57600080fd5b8235915060208301356001600160401b03811115613bbb57600080fd5b613bc785828601613a9f565b9150509250929050565b600060208284031215613be357600080fd5b81356001600160401b03811115613bf957600080fd5b612f4384828501613a9f565b600080600060608486031215613c1a57600080fd5b83359250613966602085016138de565b60008083601f840112613c3c57600080fd5b5081356001600160401b03811115613c5357600080fd5b602083019150836020828501011115613c6b57600080fd5b9250929050565b600080600060408486031215613c8757600080fd5b8335925060208401356001600160401b03811115613ca457600080fd5b613cb086828701613c2a565b9497909650939450505050565b60008060408385031215613cd057600080fd5b6139ff836138de565b60008060208385031215613cec57600080fd5b82356001600160401b0380821115613d0357600080fd5b818501915085601f830112613d1757600080fd5b813581811115613d2657600080fd5b8660208260051b8501011115613d3b57600080fd5b60209290920196919550909350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015613da257603f19888603018452613d90858351613886565b94509285019290850190600101613d74565b5092979650505050505050565b60008060008060808587031215613dc557600080fd5b613dce856138de565b9350613ddc602086016138de565b92506040850135915060608501356001600160401b03811115613dfe57600080fd5b613e0a87828801613a9f565b91505092959194509250565b600080600080600060608688031215613e2e57600080fd5b8535945060208601356001600160401b0380821115613e4c57600080fd5b613e5889838a01613c2a565b90965094506040880135915080821115613e7157600080fd5b50613e7e88828901613c2a565b969995985093965092949392505050565b60006101008a83528960208401528860408401528760608401528660808401528560a084015260018060a01b03851660c08401528060e0840152613ed581840185613886565b9b9a5050505050505050505050565b600080600060408486031215613ef957600080fd5b83356001600160401b0380821115613f1057600080fd5b613f1c87838801613a9f565b94506020860135915080821115613f3257600080fd5b50613cb086828701613c2a565b60008060408385031215613f5257600080fd5b613f5b836138de565b9150613f69602084016138de565b90509250929050565b600080600080600060a08688031215613f8a57600080fd5b613f93866138de565b945060208601359350613fa8604087016138de565b92506060860135915060808601356001600160401b03811115613fca57600080fd5b613fd688828901613a1a565b9150509295509295909350565b600181811c90821680613ff757607f821691505b602082108103613a2c57634e487b7160e01b600052602260045260246000fd5b6020808252600e908201526d139bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610a2857610a28614055565b634e487b7160e01b600052601260045260246000fd5b6000826140a7576140a7614082565b500490565b6000808335601e198436030181126140c357600080fd5b8301803591506001600160401b038211156140dd57600080fd5b602001915036819003821315613c6b57600080fd5b601f821115610b1857600081815260208120601f850160051c810160208610156141195750805b601f850160051c820191505b8181101561223257828155600101614125565b81516001600160401b0381111561415157614151613a32565b6141658161415f8454613fe3565b846140f2565b602080601f83116001811461419a57600084156141825750858301515b600019600386901b1c1916600185901b178555612232565b600085815260208120601f198616915b828110156141c9578886015182559484019460019091019084016141aa565b50858210156141e75787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60408152823560408201526020830135606082015260408301356080820152606083013560a0820152608083013560c082015260a083013560e0820152600061426b60c085016138de565b6001600160a01b03166101008381019190915260e08501359036869003601e1901821261429757600080fd5b602091860191820191356001600160401b038111156142b557600080fd5b8036038313156142c457600080fd5b816101208601526142da610140860182856141f7565b9350505050612832602083018415159052565b80820180821115610a2857610a28614055565b6000806040838503121561431357600080fd5b82516001600160401b0381111561432957600080fd5b8301601f8101851361433a57600080fd5b8051614348613abe82613a78565b81815286602083850101111561435d57600080fd5b61436e826020830160208601613862565b60209590950151949694955050505050565b60008551614392818460208a01613862565b820184868237909301918252506020019392505050565b6000600182016143bb576143bb614055565b5060010190565b600080604083850312156143d557600080fd5b82356001600160401b038111156143eb57600080fd5b6143f785828601613a9f565b95602094909401359450505050565b82848237909101908152602001919050565b6000808335601e1984360301811261442f57600080fd5b8301803591506001600160401b0382111561444957600080fd5b6020019150600581901b3603821315613c6b57600080fd5b60006020828403121561447357600080fd5b815161283281613998565b6040815260006144916040830185613886565b82810360208401526144a38185613886565b95945050505050565b600082516144be818460208701613862565b600360fc1b920191825250600101919050565b600083516144e3818460208801613862565b8351908301906144f7818360208801613862565b01949350505050565b81810381811115610a2857610a28614055565b85815260606020820152600061452d6060830186886141f7565b82810360408401526145408185876141f7565b98975050505050505050565b6000825161455e818460208701613862565b9190910192915050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061189190830184613886565b6000602082840312156145ad57600080fd5b81516128328161382f565b6000826145c7576145c7614082565b50069056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220ed42d56b2329717c4f33d00144ba7eb67c6be189d6275f77e4510175d5f33ee364736f6c6343000811003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000003da329181c99727eed7e5de902d406609d4cea6000000000000000000000000000000000000000000000000000000000000003e80000000000000000000000003da329181c99727eed7e5de902d406609d4cea60000000000000000000000000000000000000000000000000000000000000000b41726b6520627920657665000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000441524b4500000000000000000000000000000000000000000000000000000000