[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "approved", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "ApprovalForAll", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "tokens", "type": "uint256" } ], "name": "FeeAllocated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" } ], "name": "FeeCollectorChange", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "tokensTransferred", "type": "uint256" } ], "name": "FeeTransfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "secondsGranted", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "expiresAt", "type": "uint256" } ], "name": "Grant", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferStarted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Paused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "tokensTransferred", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "timePurchased", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "rewardPoints", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "expiresAt", "type": "uint256" } ], "name": "Purchase", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "id", "type": "uint256" }, { "indexed": false, "internalType": "uint16", "name": "rewardBps", "type": "uint16" } ], "name": "ReferralCreated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "ReferralDestroyed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "referrer", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "referralId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "rewardAmount", "type": "uint256" } ], "name": "ReferralPayout", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "tokensTransferred", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "timeReclaimed", "type": "uint256" } ], "name": "Refund", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "tokensIn", "type": "uint256" } ], "name": "RefundTopUp", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "slasher", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "rewardPointsSlashed", "type": "uint256" } ], "name": "RewardPointsSlashed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "tokensTransferred", "type": "uint256" } ], "name": "RewardWithdraw", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "tokens", "type": "uint256" } ], "name": "RewardsAllocated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "supplyCap", "type": "uint256" } ], "name": "SupplyCapChange", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "recipient", "type": "address" } ], "name": "TransferRecipientChange", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Unpaused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "tokensTransferred", "type": "uint256" } ], "name": "Withdraw", "type": "event" }, { "inputs": [], "name": "acceptOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "numSeconds", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "baseTokenURI", "outputs": [ { "internalType": "string", "name": "uri", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "accounts", "type": "address[]" } ], "name": "canRefund", "outputs": [ { "internalType": "bool", "name": "refundable", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "contractURI", "outputs": [ { "internalType": "string", "name": "uri", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "code", "type": "uint256" }, { "internalType": "uint16", "name": "bps", "type": "uint16" } ], "name": "createReferralCode", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "creatorBalance", "outputs": [ { "internalType": "uint256", "name": "balance", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "code", "type": "uint256" } ], "name": "deleteReferralCode", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "erc20Address", "outputs": [ { "internalType": "address", "name": "erc20", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "feeBalance", "outputs": [ { "internalType": "uint256", "name": "balance", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "feeSchedule", "outputs": [ { "internalType": "address", "name": "feeCollector", "type": "address" }, { "internalType": "uint16", "name": "feeBps", "type": "uint16" } ], "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": "address[]", "name": "accounts", "type": "address[]" }, { "internalType": "uint256", "name": "secondsToAdd", "type": "uint256" } ], "name": "grantTime", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "symbol", "type": "string" }, { "internalType": "string", "name": "contractUri", "type": "string" }, { "internalType": "string", "name": "tokenUri", "type": "string" }, { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "tokensPerSecond", "type": "uint256" }, { "internalType": "uint256", "name": "minimumPurchaseSeconds", "type": "uint256" }, { "internalType": "uint16", "name": "rewardBps", "type": "uint16" }, { "internalType": "uint8", "name": "numRewardHalvings", "type": "uint8" }, { "internalType": "uint16", "name": "feeBps", "type": "uint16" }, { "internalType": "address", "name": "feeRecipient", "type": "address" }, { "internalType": "address", "name": "erc20TokenAddr", "type": "address" } ], "internalType": "struct Shared.InitParams", "name": "params", "type": "tuple" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "minPurchaseSeconds", "outputs": [ { "internalType": "uint256", "name": "numSeconds", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "numTokens", "type": "uint256" } ], "name": "mint", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "numTokens", "type": "uint256" } ], "name": "mintFor", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "numTokens", "type": "uint256" }, { "internalType": "uint256", "name": "referralCode", "type": "uint256" }, { "internalType": "address", "name": "referrer", "type": "address" } ], "name": "mintWithReferral", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "numTokens", "type": "uint256" }, { "internalType": "uint256", "name": "referralCode", "type": "uint256" }, { "internalType": "address", "name": "referrer", "type": "address" } ], "name": "mintWithReferralFor", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "paused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pendingOwner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "reconcileERC20Balance", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "reconcileNativeBalance", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "tokenAddress", "type": "address" }, { "internalType": "address", "name": "recipientAddress", "type": "address" }, { "internalType": "uint256", "name": "tokenAmount", "type": "uint256" } ], "name": "recoverERC20", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" } ], "name": "recoverNativeTokens", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "code", "type": "uint256" } ], "name": "referralCodeBps", "outputs": [ { "internalType": "uint16", "name": "bps", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "numTokensIn", "type": "uint256" }, { "internalType": "address[]", "name": "accounts", "type": "address[]" } ], "name": "refund", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "refundableBalanceOf", "outputs": [ { "internalType": "uint256", "name": "numSeconds", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "accounts", "type": "address[]" } ], "name": "refundableTokenBalanceOfAll", "outputs": [ { "internalType": "uint256", "name": "numTokens", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "rewardBalanceOf", "outputs": [ { "internalType": "uint256", "name": "numTokens", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "rewardBps", "outputs": [ { "internalType": "uint16", "name": "bps", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "rewardMultiplier", "outputs": [ { "internalType": "uint256", "name": "multiplier", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "rewardPoolBalance", "outputs": [ { "internalType": "uint256", "name": "numTokens", "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": [ { "internalType": "uint256", "name": "supplyCap", "type": "uint256" } ], "name": "setSupplyCap", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" } ], "name": "setTransferRecipient", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "slashRewards", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "subscriptionOf", "outputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "refundableAmount", "type": "uint256" }, { "internalType": "uint256", "name": "rewardPoints", "type": "uint256" }, { "internalType": "uint256", "name": "expiresAt", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "supplyDetail", "outputs": [ { "internalType": "uint256", "name": "count", "type": "uint256" }, { "internalType": "uint256", "name": "cap", "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": "numTokens", "type": "uint256" } ], "name": "timeValue", "outputs": [ { "internalType": "uint256", "name": "numSeconds", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "uri", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalCreatorEarnings", "outputs": [ { "internalType": "uint256", "name": "total", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalRewardPoints", "outputs": [ { "internalType": "uint256", "name": "numPoints", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "tps", "outputs": [ { "internalType": "uint256", "name": "numTokens", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "transferAllBalances", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "transferFees", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "transferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "transferRecipient", "outputs": [ { "internalType": "address", "name": "recipient", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "unpause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newCollector", "type": "address" } ], "name": "updateFeeRecipient", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "contractUri", "type": "string" }, { "internalType": "string", "name": "tokenUri", "type": "string" } ], "name": "updateMetadata", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "withdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "withdrawAndTransferFees", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "withdrawRewards", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "withdrawTo", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "stateMutability": "payable", "type": "receive" } ]
60806040523480156200001157600080fd5b506200001c62000022565b620000e3565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000e1576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6157d780620000f36000396000f3fe6080604052600436106103e85760003560e01c80638456cb5911610208578063c7b8981c11610118578063e30c3978116100ab578063e985e9c51161007a578063e985e9c514610b33578063f160d36914610b53578063f2fde38b14610b73578063f3497dab14610b93578063feed3a9c14610ba657600080fd5b8063e30c397814610aca578063e6e6d4a514610ae8578063e8a3d48514610afe578063e964b64414610b1357600080fd5b8063d478cd57116100e7578063d478cd5714610a4b578063d547cfb714610a82578063da1919b314610a97578063da23309714610aaa57600080fd5b8063c7b8981c146109e1578063c87b56dd146109f6578063cad3259314610a16578063d2027ca314610a3657600080fd5b8063a7d387541161019b578063b23484061161016a578063b234840614610960578063b6a3f59a14610976578063b88d4fde14610996578063c2e8caf6146109b6578063c2fbe7bc146109cc57600080fd5b8063a7d38754146108e4578063a7e2e50414610904578063ad1248a314610919578063af55ec731461094b57600080fd5b8063964bb43d116101d7578063964bb43d1461087c578063a0712d681461089c578063a22cb465146108af578063a659c4b1146108cf57600080fd5b80638456cb59146108215780638d8818af146108365780638da5cb5b1461084957806395d89b411461086757600080fd5b806342842e0e1161030357806370a082311161029657806372bcb72b1161026557806372bcb72b1461078357806379ba5097146107ad5780637a5c08ae146107c25780637b8e80bd146107d857806382328ffc146107f857600080fd5b806370a082311461070e578063711869651461072e578063715018a61461074e57806372b0d90c1461076357600080fd5b80635f0cb89e116102d25780635f0cb89e146106ae57806360b71d4e146106c35780636352211e146106d95780636f2c590a146106f957600080fd5b806342842e0e14610635578063438c4ce71461065557806356ce0e6c146106755780635c975abb1461069557600080fd5b80631248454c1161037b578063276184ae1161034a578063276184ae146105ac5780633c5030bb146105cb5780633ccfd60b1461060b5780633f4ba83a1461062057600080fd5b80631248454c1461052d57806313d6051e1461054c578063194215691461056c57806323b872dd1461058c57600080fd5b806308928655116103b757806308928655146104ad578063095ea7b3146104cd5780630ac509fa146104ed5780631171bda91461050d57600080fd5b806301ffc9a7146103fe578063033c10ac1461043357806306fdde0314610453578063081812fc1461047557600080fd5b366103f9576103f73334610bb9565b005b600080fd5b34801561040a57600080fd5b5061041e610419366004614b54565b610c0d565b60405190151581526020015b60405180910390f35b34801561043f57600080fd5b50610161545b60405190815260200161042a565b34801561045f57600080fd5b50610468610c5f565b60405161042a9190614bc1565b34801561048157600080fd5b50610495610490366004614bd4565b610cf1565b6040516001600160a01b03909116815260200161042a565b3480156104b957600080fd5b5061041e6104c8366004614cf6565b610d18565b3480156104d957600080fd5b506103f76104e8366004614d2b565b610d33565b3480156104f957600080fd5b506103f7610508366004614d55565b610e48565b34801561051957600080fd5b506103f7610528366004614d70565b610fa0565b34801561053957600080fd5b50610172546001600160a01b0316610495565b34801561055857600080fd5b506103f7610567366004614dac565b611033565b34801561057857600080fd5b506103f7610587366004614e03565b61111d565b34801561059857600080fd5b506103f76105a7366004614d70565b611267565b3480156105b857600080fd5b50610164546001600160a01b0316610495565b3480156105d757600080fd5b506105eb6105e6366004614d55565b611298565b60408051948552602085019390935291830152606082015260800161042a565b34801561061757600080fd5b506103f7611325565b34801561062c57600080fd5b506103f7611330565b34801561064157600080fd5b506103f7610650366004614d70565b611340565b34801561066157600080fd5b50610445610670366004614bd4565b61135b565b34801561068157600080fd5b506103f7610690366004614ea7565b61136c565b3480156106a157600080fd5b5061012d5460ff1661041e565b3480156106ba57600080fd5b506103f761142d565b3480156106cf57600080fd5b5061016854610445565b3480156106e557600080fd5b506104956106f4366004614bd4565b611581565b34801561070557600080fd5b506104456115e1565b34801561071a57600080fd5b50610445610729366004614d55565b611652565b34801561073a57600080fd5b50610445610749366004614d55565b6116dc565b34801561075a57600080fd5b506103f761174c565b34801561076f57600080fd5b506103f761077e366004614d55565b61176f565b34801561078f57600080fd5b5061016754610171546040805192835260208301919091520161042a565b3480156107b957600080fd5b506103f761181c565b3480156107ce57600080fd5b5061016c54610445565b3480156107e457600080fd5b506103f76107f3366004614d55565b611896565b34801561080457600080fd5b5061016f5461ffff165b60405161ffff909116815260200161042a565b34801561082d57600080fd5b506103f76118e9565b6103f7610844366004614f0b565b6118f9565b34801561085557600080fd5b506097546001600160a01b0316610495565b34801561087357600080fd5b50610468611905565b34801561088857600080fd5b506103f7610897366004614d55565b611914565b6103f76108aa366004614bd4565b611c34565b3480156108bb57600080fd5b506103f76108ca366004614f4e565b611c3e565b3480156108db57600080fd5b506103f7611c49565b3480156108f057600080fd5b506103f76108ff366004614f96565b611d5b565b34801561091057600080fd5b506103f761239c565b34801561092557600080fd5b5061080e610934366004614bd4565b6000908152610174602052604090205461ffff1690565b34801561095757600080fd5b506104456123ad565b34801561096c57600080fd5b5061016254610445565b34801561098257600080fd5b506103f7610991366004614bd4565b6123e2565b3480156109a257600080fd5b506103f76109b13660046150f8565b612494565b3480156109c257600080fd5b5061016b54610445565b3480156109d857600080fd5b506103f76124cc565b3480156109ed57600080fd5b506103f7612514565b348015610a0257600080fd5b50610468610a11366004614bd4565b6126dc565b348015610a2257600080fd5b506103f7610a31366004614bd4565b61287c565b348015610a4257600080fd5b506103f76128ce565b348015610a5757600080fd5b5061016954604080516001600160a01b0362010000840416815261ffff90921660208301520161042a565b348015610a8e57600080fd5b5061046861293d565b6103f7610aa5366004614d2b565b610bb9565b348015610ab657600080fd5b50610445610ac5366004614cf6565b61294d565b348015610ad657600080fd5b5060c9546001600160a01b0316610495565b348015610af457600080fd5b5061016554610445565b348015610b0a57600080fd5b506104686129ab565b348015610b1f57600080fd5b50610445610b2e366004614d55565b6129bb565b348015610b3f57600080fd5b5061041e610b4e366004615174565b612a2b565b348015610b5f57600080fd5b506103f7610b6e366004614d55565b612a59565b348015610b7f57600080fd5b506103f7610b8e366004614d55565b612b21565b6103f7610ba136600461519e565b612b92565b6103f7610bb43660046151db565b612d19565b610bc1612e1e565b8061016354811015610bee5760405162461bcd60e51b8152600401610be590615221565b60405180910390fd5b6000610bfa3384612e65565b9050610c06848261317d565b5050505050565b60006001600160e01b031982166380ac58cd60e01b1480610c3e57506001600160e01b03198216635b5e139f60e01b145b80610c5957506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060658054610c6e90615263565b80601f0160208091040260200160405190810160405280929190818152602001828054610c9a90615263565b8015610ce75780601f10610cbc57610100808354040283529160200191610ce7565b820191906000526020600020905b815481529060010190602001808311610cca57829003601f168201915b5050505050905090565b6000610cfc82613349565b506000908152606960205260409020546001600160a01b031690565b6000610d238261294d565b610d2b6123ad565b101592915050565b6000610d3e82611581565b9050806001600160a01b0316836001600160a01b031603610dab5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610be5565b336001600160a01b0382161480610dc75750610dc78133612a2b565b610e395760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610be5565b610e4383836133a8565b505050565b610e50613416565b61016954600160b01b900460ff16610ebc5760405162461bcd60e51b815260206004820152602960248201527f4e6f7420737570706f727465642c20757365207265636f6e63696c654e617469604482015268766542616c616e636560b81b6064820152608401610be5565b4780610f025760405162461bcd60e51b81526020600482015260156024820152742737903130b630b731b2903a37903932b1b7bb32b960591b6044820152606401610be5565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610f4f576040519150601f19603f3d011682016040523d82523d6000602084013e610f54565b606091505b5050905080610e435760405162461bcd60e51b81526020600482015260186024820152772330b4b632b2103a37903a3930b739b332b91022ba3432b960411b6044820152606401610be5565b610fa8613416565b610164546001600160a01b03166001600160a01b0316836001600160a01b03160361101f5760405162461bcd60e51b815260206004820152602160248201527f43616e6e6f74207265636f76657220737562736372697074696f6e20746f6b656044820152603760f91b6064820152608401610be5565b610e436001600160a01b0384168383613470565b61103b613416565b6000811161108b5760405162461bcd60e51b815260206004820152601a60248201527f5365636f6e647320746f20616464206d757374206265203e20300000000000006044820152606401610be5565b60008251116110dc5760405162461bcd60e51b815260206004820152601c60248201527f4e6f206163636f756e747320746f206772616e742074696d6520746f000000006044820152606401610be5565b60005b8251811015610e435761110b8382815181106110fd576110fd61529d565b6020026020010151836134d3565b80611115816152c9565b9150506110df565b611125613416565b61271061ffff8216111561116a5760405162461bcd60e51b815260206004820152600c60248201526b0c4e0e640e8dede40d0d2ced60a31b6044820152606401610be5565b60008161ffff16116111b05760405162461bcd60e51b815260206004820152600f60248201526e0627073206d757374206265203e203608c1b6044820152606401610be5565b6000828152610174602052604090205461ffff1680156112095760405162461bcd60e51b8152602060048201526014602482015273526566657272616c20636f64652065786973747360601b6044820152606401610be5565b60008381526101746020908152604091829020805461ffff191661ffff86169081179091558251868152918201527f3f9b532f4ebec59c88775b2229a231cabebea3b657ab3fa83806bb7dd1d9163e910160405180910390a1505050565b61127133826135e5565b61128d5760405162461bcd60e51b8152600401610be5906152e2565b610e43838383613644565b6001600160a01b038116600090815261017360209081526040808320815160e081018352815480825260018301549482018590526002830154938201939093526003820154606082015260048201546080820152600582015460a0820181905260069092015460c0820152849384938493909190611315846137b5565b9450945094509450509193509193565b61132e3361176f565b565b611338613416565b61132e6137fa565b610e4383838360405180602001604052806000815250612494565b60006101615482610c59919061532f565b611374613416565b60008251116113c55760405162461bcd60e51b815260206004820152601c60248201527f436f6e7472616374205552492063616e6e6f7420626520656d707479000000006044820152606401610be5565b60008151116114125760405162461bcd60e51b8152602060048201526019602482015278546f6b656e205552492063616e6e6f7420626520656d70747960381b6044820152606401610be5565b61015f61141f838261539f565b50610160610e43828261539f565b611435613416565b61016954600160b01b900460ff166114875760405162461bcd60e51b81526020600482015260156024820152744f6e6c7920666f7220455243323020746f6b656e7360581b6044820152606401610be5565b610164546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156114d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f5919061545f565b90506000610166546101655461150b9190615478565b905080821161155c5760405162461bcd60e51b815260206004820152601960248201527f546f6b656e7320616c7265616479207265636f6e63696c6564000000000000006044820152606401610be5565b6115668183615478565b6101656000828254611578919061548b565b90915550505050565b6000818152606760205260408120546001600160a01b031680610c595760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610be5565b6000610170546000036115f45750600090565b60006101625461016a54426116099190615478565b611613919061532f565b90506101705481111561162857600091505090565b611633816002615582565b61017054611642906002615582565b61164c919061532f565b91505090565b6001600160a01b038116600090815261017360209081526040808320815160e081018352815481526001820154938101939093526002810154918301919091526003810154606083015260048101546080830152600581015460a08301526006015460c08201526116c28161384d565b6116cb82613880565b6116d5919061548b565b9392505050565b6001600160a01b038116600090815261017360209081526040808320815160e081018352815481526001820154938101939093526002810154918301919091526003810154606083015260048101546080830152600581015460a08301526006015460c08201526116d581613880565b611754613416565b61175d33613897565b6117656138bb565b61132e60006138f9565b611777613416565b6001600160a01b0381166117c55760405162461bcd60e51b815260206004820152601560248201527404163636f756e742063616e6e6f742062652030783605c1b6044820152606401610be5565b60006117cf6123ad565b90506000811161180e5760405162461bcd60e51b815260206004820152600a6024820152694e6f2042616c616e636560b01b6044820152606401610be5565b6118188282613912565b5050565b60c95433906001600160a01b0316811461188a5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610be5565b611893816138f9565b50565b61189e613416565b61017280546001600160a01b0319166001600160a01b0383169081179091556040517fa2dceaedaba084c95cd135ab944ae32f91bc22573975efedf47c73e19f7490f090600090a250565b6118f1613416565b61132e6138bb565b610e4333848484612d19565b606060668054610c6e90615263565b61016f5461ffff1661195b5760405162461bcd60e51b815260206004820152601060248201526f14995dd85c991cc8191a5cd8589b195960821b6044820152606401610be5565b3360009081526101736020908152604091829020825160e081018452815481526001820154928101929092526002810154928201929092526003820154606082015260048201546080820152600582015460a082015260069091015460c08201526119c58161395f565b611a0b5760405162461bcd60e51b8152602060048201526017602482015276537562736372697074696f6e206e6f742061637469766560481b6044820152606401610be5565b6001600160a01b03821660009081526101736020908152604091829020825160e081018452815481526001820154928101929092526002810154928201929092526003820154606082015260048201546080820152600582015460a0820181905260069092015460c082015290611ac45760405162461bcd60e51b815260206004820152601960248201527f4e6f2072657761726420706f696e747320746f20736c617368000000000000006044820152606401610be5565b600060028260200151611ad7919061532f565b611ae0836137b5565b611aea919061548b565b905080421015611b2c5760405162461bcd60e51b815260206004820152600d60248201526c4e6f7420736c61736861626c6560981b6044820152606401610be5565b8160a0015161016b6000828254611b439190615478565b909155505060c082015161016e8054600090611b6090849061548b565b909155505061016b54600003611b7757600061016c555b336001600160a01b0316846001600160a01b03167fb83b116f3c7ded3d32120b1ae5f917fd9843f8f0d4ffebb9a6e2c9c2f63d467a8460a00151604051611bc091815260200190565b60405180910390a350600060a0820181815260c083018281526001600160a01b03909516825261017360209081526040928390208451815590840151600182015591830151600283015560608301516003830155608090920151600482015590516005820155915160069092019190915550565b6118933382610bb9565b611818338383613972565b611c51613416565b61016954600160b01b900460ff1615611cbb5760405162461bcd60e51b815260206004820152602660248201527f4e6f7420737570706f727465642c20757365207265636f7665724e6174697665604482015265546f6b656e7360d01b6064820152608401610be5565b4780611d015760405162461bcd60e51b81526020600482015260156024820152742737903130b630b731b2903a37903932b1b7bb32b960591b6044820152606401610be5565b60006101665461016554611d159190615478565b905080821161155c5760405162461bcd60e51b815260206004820152601260248201527110985b185b98d9481c9958dbdb98da5b195960721b6044820152606401610be5565b600054610100900460ff1615808015611d7b5750600054600160ff909116105b80611d955750303b158015611d95575060005460ff166001145b611df85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610be5565b6000805460ff191660011790558015611e1b576000805461ff0019166101001790555b815151611e615760405162461bcd60e51b81526020600482015260146024820152734e616d652063616e6e6f7420626520656d70747960601b6044820152606401610be5565b600082602001515111611eaf5760405162461bcd60e51b815260206004820152601660248201527553796d626f6c2063616e6e6f7420626520656d70747960501b6044820152606401610be5565b600082604001515111611f045760405162461bcd60e51b815260206004820152601c60248201527f436f6e7472616374205552492063616e6e6f7420626520656d707479000000006044820152606401610be5565b600082606001515111611f555760405162461bcd60e51b8152602060048201526019602482015278546f6b656e205552492063616e6e6f7420626520656d70747960381b6044820152606401610be5565b60808201516001600160a01b0316611faf5760405162461bcd60e51b815260206004820152601b60248201527f4f776e657220616464726573732063616e6e6f742062652030783000000000006044820152606401610be5565b60008260a00151116120035760405162461bcd60e51b815260206004820152601d60248201527f546f6b656e7320706572207365636f6e64206d757374206265203e20300000006044820152606401610be5565b60008260c00151116120575760405162461bcd60e51b815260206004820181905260248201527f4d696e207075726368617365207365636f6e6473206d757374206265203e20306044820152606401610be5565b6104e261ffff1682610120015161ffff1611156120a95760405162461bcd60e51b815260206004820152601060248201526f08ccaca40c4e0e640e8dede40d0d2ced60831b6044820152606401610be5565b61271061ffff168260e0015161ffff1611156120fd5760405162461bcd60e51b81526020600482015260136024820152720a4caeec2e4c840c4e0e640e8dede40d0d2ced606b1b6044820152606401610be5565b602082610100015160ff1611156121565760405162461bcd60e51b815260206004820152601860248201527f5265776172642068616c76696e677320746f6f206869676800000000000000006044820152606401610be5565b6101408201516001600160a01b0316156121d757600082610120015161ffff16116121d75760405162461bcd60e51b815260206004820152602b60248201527f46656573207265717569726564207768656e2066656520726563697069656e7460448201526a081a5cc81c1c995cd95b9d60aa1b6064820152608401610be5565b60e082015161ffff161561223d57600082610100015160ff161161223d5760405162461bcd60e51b815260206004820152601760248201527f5265776172642068616c76696e677320746f6f206c6f770000000000000000006044820152606401610be5565b61224f82600001518360200151613a38565b61225c82608001516138f9565b612264613a69565b61226c613a9d565b604082015161015f9061227f908261539f565b50606082015161016090612293908261539f565b5060a082015161016181905560c08301516122ae919061558e565b6101635560c08201516101625560e082015161016f805461ffff92831661ffff1990911617905561010083015160ff1661017055610120830151610169805461014086015161016087015161016480546001600160a01b039283166001600160a01b03199091168117909155600160b01b9015150260ff60b01b199190921662010000026001600160b01b0319909316949095169390931717929092161790554261016a558015611818576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b6123a53361176f565b61132e613acc565b600061016c546101685461016654610165546123c99190615478565b6123d39190615478565b6123dd9190615478565b905090565b6123ea613416565b8015806123fa5750610167548110155b6124575760405162461bcd60e51b815260206004820152602860248201527f537570706c7920636170206d757374206265203e3d2063757272656e7420636f6044820152670756e74206f7220360c41b6064820152608401610be5565b6101718190556040518181527faaf2b048b5c82789e945a008be18c7286ebe5bf02604dd9406e8106e0a7ddccb906020015b60405180910390a150565b61249e33836135e5565b6124ba5760405162461bcd60e51b8152600401610be5906152e2565b6124c684848484613b4d565b50505050565b600061016854116123a55760405162461bcd60e51b8152602060048201526012602482015271139bc81999595cc81d1bc818dbdb1b1958dd60721b6044820152606401610be5565b3360009081526101736020908152604091829020825160e081018452815481526001820154928101929092526002810154928201929092526003820154606082015260048201546080820152600582015460a082015260069091015460c082015261257e8161395f565b6125c45760405162461bcd60e51b8152602060048201526017602482015276537562736372697074696f6e206e6f742061637469766560481b6044820152606401610be5565b60006125cf82613b80565b90506000811161261a5760405162461bcd60e51b81526020600482015260166024820152754e6f207265776172647320746f20776974686472617760501b6044820152606401610be5565b808260c00181815161262c919061548b565b90525033600090815261017360209081526040808320855181559185015160018301558401516002820155606084015160038201556080840151600482015560a0840151600582015560c084015160069091015561016c8054839290612693908490615478565b909155506126a390503382613bd7565b60405181815233907f6553897c25961cd3a105492c25576d0552123ee868aca283e90f3b4224d7d1779060200160405180910390a25050565b60606126e782613349565b600061016080546126f790615263565b80601f016020809104026020016040519081016040528092919081815260200182805461272390615263565b80156127705780601f1061274557610100808354040283529160200191612770565b820191906000526020600020905b81548152906001019060200180831161275357829003601f168201915b5050835193945084925061278991506001905083615478565b815181106127995761279961529d565b01602001516001600160f81b031916602f60f81b036127e7576101606127be85613cd1565b6040516020016127cf9291906155a5565b60405160208183030381529060405292505050919050565b61016080546127f590615263565b80601f016020809104026020016040519081016040528092919081815260200182805461282190615263565b801561286e5780601f106128435761010080835404028352916020019161286e565b820191906000526020600020905b81548152906001019060200180831161285157829003601f168201915b505050505092505050919050565b612884613416565b6000818152610174602052604090819020805461ffff19169055517f25ff42f5a10d7372b632c182dc576cf993d4c3d2caeeedb5e24e18e6bb015e74906124899083815260200190565b610172546001600160a01b03166129275760405162461bcd60e51b815260206004820152601a60248201527f5472616e7366657220726563697069656e74206e6f74207365740000000000006044820152606401610be5565b6101725461132e906001600160a01b0316613897565b60606101608054610c6e90615263565b60008060005b835181101561299c5761297e8482815181106129715761297161529d565b60200260200101516116dc565b612988908361548b565b915080612994816152c9565b915050612953565b50610161546116d5908261558e565b606061015f8054610c6e90615263565b6001600160a01b038116600090815261017360209081526040808320815160e081018352815481526001820154938101939093526002810154918301919091526003810154606083015260048101546080830152600581015460a08301526006015460c08201526116d581613b80565b6001600160a01b039182166000908152606a6020908152604080832093909416825291909152205460ff1690565b610169546201000090046001600160a01b03163314612aa95760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b6044820152606401610be5565b6001600160a01b038116612aca57600061016855610169805461ffff191690555b610169805462010000600160b01b031916620100006001600160a01b0384169081029190911790915560405133907fda4d4d7b928d1f8f00c53f2357503825fdd2b8403f8e1765bdabddb14806423e90600090a350565b612b29613416565b60c980546001600160a01b0383166001600160a01b03199091168117909155612b5a6097546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b612b9a613416565b6000815111612be35760405162461bcd60e51b8152602060048201526015602482015274139bc81858d8dbdd5b9d1cc81d1bc81c99599d5b99605a1b6044820152606401610be5565b8115612c36576000612bf53384612e65565b90507fafc88ead56d1a82bf75dbf60890a394134d8660aaa31d1b4c1ca74cd631b286381604051612c2891815260200190565b60405180910390a150612c84565b3415612c845760405162461bcd60e51b815260206004820152601960248201527f556e65787065637465642076616c7565207472616e73666572000000000000006044820152606401610be5565b612c8d81610d18565b612cd95760405162461bcd60e51b815260206004820152601f60248201527f496e73756666696369656e742062616c616e636520666f7220726566756e64006044820152606401610be5565b60005b8151811015610e4357612d07828281518110612cfa57612cfa61529d565b6020026020010151613d64565b80612d11816152c9565b915050612cdc565b612d21612e1e565b8261016354811015612d455760405162461bcd60e51b8152600401610be590615221565b6001600160a01b038216612d945760405162461bcd60e51b8152602060048201526016602482015275052656665727265722063616e6e6f74206265203078360541b6044820152606401610be5565b6000612da03386612e65565b90506000612dae878361317d565b90506000612dbc8387613f39565b90508015612e1457612dce8582613bd7565b85856001600160a01b0316837f06b105690969a2bce25b023623f2665c12f18d4d2e03717719303253f935f3a584604051612e0b91815260200190565b60405180910390a45b5050505050505050565b61012d5460ff161561132e5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610be5565b6000612e6f613f79565b61016954600160b01b900460ff16612eff57813414612ede5760405162461bcd60e51b815260206004820152602560248201527f507572636861736520616d6f756e74206d757374206d617463682076616c7565604482015264081cd95b9d60da1b6064820152608401610be5565b816101656000828254612ef1919061548b565b909155508291506131739050565b3415612f685760405162461bcd60e51b815260206004820152603260248201527f4e617469766520746f6b656e73206e6f7420616363657074656420666f7220456044820152715243323020737562736372697074696f6e7360701b6064820152608401610be5565b610164546040516370a0823160e01b81526001600160a01b03858116600483015260009216906370a0823190602401602060405180830381865afa158015612fb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fd8919061545f565b61016454604051636eb1769f60e11b81526001600160a01b0387811660048301523060248301529293506000929091169063dd62ed3e90604401602060405180830381865afa15801561302f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613053919061545f565b90508382101580156130655750838110155b6130bb5760405162461bcd60e51b815260206004820152602160248201527f496e73756666696369656e742042616c616e6365206f7220416c6c6f77616e636044820152606560f81b6064820152608401610be5565b610164546130d4906001600160a01b0316863087613fd2565b610164546040516370a0823160e01b81526001600160a01b03878116600483015260009216906370a0823190602401602060405180830381865afa158015613120573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613144919061545f565b905060006131528285615478565b9050806101656000828254613167919061548b565b90915550909450505050505b610c59600160fb55565b60006001600160a01b0383166131cd5760405162461bcd60e51b815260206004820152601560248201527404163636f756e742063616e6e6f742062652030783605c1b6044820152606401610be5565b60006131d884614011565b9050806020015181608001516131ee919061548b565b42111561320a5760208101516132049042615478565b60808201525b60006132146115e1565b61321e908561558e565b9050600061322b8561135b565b9050808360200181815161323f919061548b565b90525060a08301805183919061325690839061548b565b9052506001600160a01b038616600090815261017360209081526040808320865181559186015160018301558501516002820155606085015160038201556080850151600482015560a0850151600582015560c085015160069091015561016b80548492906132c690849061548b565b909155506132d5905085614172565b6132e3868460000151614183565b82516001600160a01b0387167fce9f9735cf311db121203b8990506d127ab9d5731e2f077041e20e74d815033f87848661331c896137b5565b60408051948552602085019390935291830152606082015260800160405180910390a35050519392505050565b6000818152606760205260409020546001600160a01b03166118935760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610be5565b600081815260696020526040902080546001600160a01b0319166001600160a01b03841690811790915581906133dd82611581565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6097546001600160a01b0316331461132e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610be5565b6040516001600160a01b038316602482015260448101829052610e4390849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526141a9565b60006134de83614011565b9050806040015181606001516134f4919061548b565b42111561351057604081015161350a9042615478565b60608201525b8181604001818151613522919061548b565b9052506001600160a01b038316600090815261017360209081526040918290208351808255918401516001820155918301516002830155606083015160038301556080830151600483015560a0830151600583015560c0830151600690920191909155613590908490614183565b80516001600160a01b0384167f05e70fc89159e61d7fca600cc57cca40da55f216ec2ed8fed95d7014f1ba60f1846135c7856137b5565b604080519283526020830191909152015b60405180910390a3505050565b6000806135f183611581565b9050806001600160a01b0316846001600160a01b0316148061361857506136188185612a2b565b8061363c5750836001600160a01b031661363184610cf1565b6001600160a01b0316145b949350505050565b826001600160a01b031661365782611581565b6001600160a01b03161461367d5760405162461bcd60e51b8152600401610be59061562c565b6001600160a01b0382166136df5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610be5565b6136ec838383600161427e565b826001600160a01b03166136ff82611581565b6001600160a01b0316146137255760405162461bcd60e51b8152600401610be59061562c565b600081815260696020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260688552838620805460001901905590871680865283862080546001019055868652606790945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600080826020015183608001516137cc919061548b565b90506000836040015184606001516137e4919061548b565b90508082116137f3578061363c565b5092915050565b6138026143bc565b61012d805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60008082604001518360600151613864919061548b565b90504281116138765750600092915050565b6116d54282615478565b60008082602001518360800151613864919061548b565b60006138a16123ad565b905080156138b3576138b38282613912565b611818613acc565b6138c3612e1e565b61012d805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586138303390565b60c980546001600160a01b031916905561189381614406565b816001600160a01b03167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648260405161394d91815260200190565b60405180910390a26118188282613bd7565b60004261396b836137b5565b1192915050565b816001600160a01b0316836001600160a01b0316036139d35760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610be5565b6001600160a01b038381166000818152606a6020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3191016135d8565b600054610100900460ff16613a5f5760405162461bcd60e51b8152600401610be590615671565b6118188282614458565b600054610100900460ff16613a905760405162461bcd60e51b8152600401610be590615671565b61012d805460ff19169055565b600054610100900460ff16613ac45760405162461bcd60e51b8152600401610be590615671565b61132e614498565b61016854600003613ad957565b6101688054600090915561016954613b00906201000090046001600160a01b031682613bd7565b61016954604051828152620100009091046001600160a01b03169033907fccde774d895c5b17def8492294ac28f98828810b74de386b78559a17a31057659060200160405180910390a350565b613b58848484613644565b613b64848484846144bf565b6124c65760405162461bcd60e51b8152600401610be5906156bc565b60008061016b548360a0015161016e5461016d54613b9e9190615478565b613ba8919061558e565b613bb2919061532f565b90508260c001518111613bc85750600092915050565b60c08301516116d59082615478565b613bdf613f79565b806101666000828254613bf2919061548b565b909155505061016954600160b01b900460ff1615613c275761016454613c22906001600160a01b03168383613470565b613cc7565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613c74576040519150601f19603f3d011682016040523d82523d6000602084013e613c79565b606091505b5050905080613cc55760405162461bcd60e51b81526020600482015260186024820152772330b4b632b2103a37903a3930b739b332b91022ba3432b960411b6044820152606401610be5565b505b611818600160fb55565b60606000613cde836145c0565b600101905060008167ffffffffffffffff811115613cfe57613cfe614bed565b6040519080825280601f01601f191660200182016040528015613d28576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084613d3257509392505050565b6001600160a01b03811660009081526101736020908152604091829020825160e0810184528154815260018201549281018390526002820154938101939093526003810154606084015260048101546080840152600581015460a08401526006015460c0830152158015613dda57506040810151155b15613de3575050565b600060408201819052613df5836116dc565b905060006101615482613e08919061558e565b90508115613e90578183602001818151613e229190615478565b9052506001600160a01b0384166000908152610173602090815260409182902085518155908501516001820155908401516002820155606084015160038201556080840151600482015560a0840151600582015560c0840151600690910155613e8b8482613bd7565b613eed565b6001600160a01b0384166000908152610173602090815260409182902085518155908501516001820155908401516002820155606084015160038201556080840151600482015560a0840151600582015560c08401516006909101555b825160408051838152602081018590526001600160a01b038716917fb7048c2ad36aadee977bb16b4543a18866044d27a2ca753e1c7dbcfa7d7a6962910160405180910390a350505050565b6000818152610174602052604081205461ffff16808203613f5e576000915050610c59565b612710613f6f61ffff83168661558e565b61363c919061532f565b600260fb5403613fcb5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610be5565b600260fb55565b6040516001600160a01b03808516602483015283166044820152606481018290526124c69085906323b872dd60e01b9060840161349c565b600160fb55565b6140516040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b038216600090815261017360209081526040808320815160e08101835281548082526001830154948201949094526002820154928101929092526003810154606083015260048101546080830152600581015460a08301526006015460c08201529103610c59576101715415806140d457506101715461016754105b6141155760405162461bcd60e51b815260206004820152601260248201527114dd5c1c1b1e4818d85c081c995858da195960721b6044820152606401610be5565b60016101676000828254614129919061548b565b925050819055506040518060e001604052806101675481526020016000815260200160008152602001428152602001428152602001600081526020016000815250905092915050565b61181861417e82614698565b614728565b6000818152606760205260409020546001600160a01b03166118185761181882826147d0565b60006141fe826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166147ea9092919063ffffffff16565b905080516000148061421f57508080602001905181019061421f919061570e565b610e435760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610be5565b6001600160a01b038416156124c6576001600160a01b03831660009081526101736020526040902054156143045760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74207472616e7366657220746f206578697374696e6720737562736044820152666372696265727360c81b6064820152608401610be5565b6001600160a01b03831615614375576001600160a01b0380851660009081526101736020526040808220928616825290208154815560018083015490820155600280830154908201556003808301549082015560048083015490820155600580830154908201556006918201549101555b5050506001600160a01b0316600090815261017360205260408120818155600181018290556002810182905560038101829055600481018290556005810182905560060155565b61012d5460ff1661132e5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610be5565b609780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff1661447f5760405162461bcd60e51b8152600401610be590615671565b606561448b838261539f565b506066610e43828261539f565b600054610100900460ff1661400a5760405162461bcd60e51b8152600401610be590615671565b60006001600160a01b0384163b156145b557604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061450390339089908890889060040161572b565b6020604051808303816000875af192505050801561453e575060408051601f3d908101601f1916820190925261453b91810190615768565b60015b61459b573d80801561456c576040519150601f19603f3d011682016040523d82523d6000602084013e614571565b606091505b5080516000036145935760405162461bcd60e51b8152600401610be5906156bc565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061363c565b506001949350505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106145ff5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef8100000000831061462b576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061464957662386f26fc10000830492506010015b6305f5e1008310614661576305f5e100830492506008015b612710831061467557612710830492506004015b60648310614687576064830492506002015b600a8310610c595760010192915050565b6101695460009061ffff1681036146ad575090565b61016954600090612710906146c69061ffff168561558e565b6146d0919061532f565b90508061016860008282546146e5919061548b565b90915550506040518181527f06cda31b221bb6cd52d891434a2df1e63e795f78d7929eb11f398499e6829704906020015b60405180910390a16116d58184615478565b61016f5460009061ffff161580614740575061016b54155b15614749575090565b61016f54600090612710906147629061ffff168561558e565b61476c919061532f565b90508061016c6000828254614781919061548b565b925050819055508061016d600082825461479b919061548b565b90915550506040518181527f81d41c1164884f982ea287ef660cfc57fcb017b60a636db1b8045e7f0edda6b890602001614716565b6118188282604051806020016040528060008152506147f9565b606061363c848460008561482c565b6148038383614907565b61481060008484846144bf565b610e435760405162461bcd60e51b8152600401610be5906156bc565b60608247101561488d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610be5565b600080866001600160a01b031685876040516148a99190615785565b60006040518083038185875af1925050503d80600081146148e6576040519150601f19603f3d011682016040523d82523d6000602084013e6148eb565b606091505b50915091506148fc87838387614aa0565b979650505050505050565b6001600160a01b03821661495d5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610be5565b6000818152606760205260409020546001600160a01b0316156149c25760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610be5565b6149d060008383600161427e565b6000818152606760205260409020546001600160a01b031615614a355760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610be5565b6001600160a01b038216600081815260686020908152604080832080546001019055848352606790915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60608315614b0f578251600003614b08576001600160a01b0385163b614b085760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610be5565b508161363c565b61363c8383815115614b245781518083602001fd5b8060405162461bcd60e51b8152600401610be59190614bc1565b6001600160e01b03198116811461189357600080fd5b600060208284031215614b6657600080fd5b81356116d581614b3e565b60005b83811015614b8c578181015183820152602001614b74565b50506000910152565b60008151808452614bad816020860160208601614b71565b601f01601f19169290920160200192915050565b6020815260006116d56020830184614b95565b600060208284031215614be657600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051610180810167ffffffffffffffff81118282101715614c2757614c27614bed565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715614c5657614c56614bed565b604052919050565b80356001600160a01b0381168114614c7557600080fd5b919050565b600082601f830112614c8b57600080fd5b8135602067ffffffffffffffff821115614ca757614ca7614bed565b8160051b614cb6828201614c2d565b9283528481018201928281019087851115614cd057600080fd5b83870192505b848310156148fc57614ce783614c5e565b82529183019190830190614cd6565b600060208284031215614d0857600080fd5b813567ffffffffffffffff811115614d1f57600080fd5b61363c84828501614c7a565b60008060408385031215614d3e57600080fd5b614d4783614c5e565b946020939093013593505050565b600060208284031215614d6757600080fd5b6116d582614c5e565b600080600060608486031215614d8557600080fd5b614d8e84614c5e565b9250614d9c60208501614c5e565b9150604084013590509250925092565b60008060408385031215614dbf57600080fd5b823567ffffffffffffffff811115614dd657600080fd5b614de285828601614c7a565b95602094909401359450505050565b803561ffff81168114614c7557600080fd5b60008060408385031215614e1657600080fd5b82359150614e2660208401614df1565b90509250929050565b600067ffffffffffffffff831115614e4957614e49614bed565b614e5c601f8401601f1916602001614c2d565b9050828152838383011115614e7057600080fd5b828260208301376000602084830101529392505050565b600082601f830112614e9857600080fd5b6116d583833560208501614e2f565b60008060408385031215614eba57600080fd5b823567ffffffffffffffff80821115614ed257600080fd5b614ede86838701614e87565b93506020850135915080821115614ef457600080fd5b50614f0185828601614e87565b9150509250929050565b600080600060608486031215614f2057600080fd5b8335925060208401359150614f3760408501614c5e565b90509250925092565b801515811461189357600080fd5b60008060408385031215614f6157600080fd5b614f6a83614c5e565b91506020830135614f7a81614f40565b809150509250929050565b803560ff81168114614c7557600080fd5b600060208284031215614fa857600080fd5b813567ffffffffffffffff80821115614fc057600080fd5b908301906101808286031215614fd557600080fd5b614fdd614c03565b823582811115614fec57600080fd5b614ff887828601614e87565b82525060208301358281111561500d57600080fd5b61501987828601614e87565b60208301525060408301358281111561503157600080fd5b61503d87828601614e87565b60408301525060608301358281111561505557600080fd5b61506187828601614e87565b60608301525061507360808401614c5e565b608082015260a083013560a082015260c083013560c082015261509860e08401614df1565b60e082015261010091506150ad828401614f85565b8282015261012091506150c1828401614df1565b8282015261014091506150d5828401614c5e565b8282015261016091506150e9828401614c5e565b91810191909152949350505050565b6000806000806080858703121561510e57600080fd5b61511785614c5e565b935061512560208601614c5e565b925060408501359150606085013567ffffffffffffffff81111561514857600080fd5b8501601f8101871361515957600080fd5b61516887823560208401614e2f565b91505092959194509250565b6000806040838503121561518757600080fd5b61519083614c5e565b9150614e2660208401614c5e565b600080604083850312156151b157600080fd5b82359150602083013567ffffffffffffffff8111156151cf57600080fd5b614f0185828601614c7a565b600080600080608085870312156151f157600080fd5b6151fa85614c5e565b9350602085013592506040850135915061521660608601614c5e565b905092959194509250565b60208082526022908201527f416d6f756e74206d757374206265203e3d206d696e696d756d20707572636861604082015261736560f01b606082015260800190565b600181811c9082168061527757607f821691505b60208210810361529757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016152db576152db6152b3565b5060010190565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b60008261534c57634e487b7160e01b600052601260045260246000fd5b500490565b601f821115610e4357600081815260208120601f850160051c810160208610156153785750805b601f850160051c820191505b8181101561539757828155600101615384565b505050505050565b815167ffffffffffffffff8111156153b9576153b9614bed565b6153cd816153c78454615263565b84615351565b602080601f83116001811461540257600084156153ea5750858301515b600019600386901b1c1916600185901b178555615397565b600085815260208120601f198616915b8281101561543157888601518255948401946001909101908401615412565b508582101561544f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121561547157600080fd5b5051919050565b81810381811115610c5957610c596152b3565b80820180821115610c5957610c596152b3565b600181815b808511156154d95781600019048211156154bf576154bf6152b3565b808516156154cc57918102915b93841c93908002906154a3565b509250929050565b6000826154f057506001610c59565b816154fd57506000610c59565b8160018114615513576002811461551d57615539565b6001915050610c59565b60ff84111561552e5761552e6152b3565b50506001821b610c59565b5060208310610133831016604e8410600b841016171561555c575081810a610c59565b615566838361549e565b806000190482111561557a5761557a6152b3565b029392505050565b60006116d583836154e1565b8082028115828204841417610c5957610c596152b3565b60008084546155b381615263565b600182811680156155cb57600181146155e05761560f565b60ff198416875282151583028701945061560f565b8860005260208060002060005b858110156156065781548a8201529084019082016155ed565b50505082870194505b505050508351615623818360208801614b71565b01949350505050565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60006020828403121561572057600080fd5b81516116d581614f40565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061575e90830184614b95565b9695505050505050565b60006020828403121561577a57600080fd5b81516116d581614b3e565b60008251615797818460208701614b71565b919091019291505056fea26469706673582212202ef87116c8dc2756073d66c2469545da70ddeec168fb2830525570dc25543bfb64736f6c63430008110033