[ { "inputs": [], "name": "ApprovalCallerNotOwnerNorApproved", "type": "error" }, { "inputs": [], "name": "ApprovalQueryForNonexistentToken", "type": "error" }, { "inputs": [], "name": "BalanceQueryForZeroAddress", "type": "error" }, { "inputs": [], "name": "EmptyString", "type": "error" }, { "inputs": [], "name": "FileAlreadyRegistered", "type": "error" }, { "inputs": [], "name": "FileNotRegistered", "type": "error" }, { "inputs": [], "name": "InvalidManager", "type": "error" }, { "inputs": [], "name": "ManagerDoesNotExist", "type": "error" }, { "inputs": [], "name": "ManagerRemoveBlocked", "type": "error" }, { "inputs": [], "name": "ManagerSwapBlocked", "type": "error" }, { "inputs": [], "name": "MintERC2309QuantityExceedsLimit", "type": "error" }, { "inputs": [], "name": "MintFrozen", "type": "error" }, { "inputs": [], "name": "MintToZeroAddress", "type": "error" }, { "inputs": [], "name": "MintZeroQuantity", "type": "error" }, { "inputs": [], "name": "MinterRegistrationInvalid", "type": "error" }, { "inputs": [], "name": "MismatchedArrayLengths", "type": "error" }, { "inputs": [], "name": "NotMinter", "type": "error" }, { "inputs": [], "name": "OverLimitSupply", "type": "error" }, { "inputs": [], "name": "OwnerQueryForNonexistentToken", "type": "error" }, { "inputs": [], "name": "OwnershipNotInitializedForExtraData", "type": "error" }, { "inputs": [], "name": "RoyaltyBPSInvalid", "type": "error" }, { "inputs": [], "name": "RoyaltySetBlocked", "type": "error" }, { "inputs": [], "name": "TokenDoesNotExist", "type": "error" }, { "inputs": [], "name": "TokenNotInRange", "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" }, { "inputs": [], "name": "Unauthorized", "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": [ { "indexed": false, "internalType": "string", "name": "oldBaseUri", "type": "string" }, { "indexed": false, "internalType": "string", "name": "newBaseURI", "type": "string" } ], "name": "BaseURISet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "recipientAddress", "type": "address" }, { "indexed": true, "internalType": "uint16", "name": "royaltyPercentageBPS", "type": "uint16" } ], "name": "DefaultRoyaltySet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "newDefaultTokenManager", "type": "address" } ], "name": "DefaultTokenManagerChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "components": [ { "internalType": "address", "name": "recipientAddress", "type": "address" }, { "internalType": "uint16", "name": "royaltyPercentageBPS", "type": "uint16" } ], "indexed": false, "internalType": "struct IRoyaltyManager.Royalty[]", "name": "_newRoyalties", "type": "tuple[]" } ], "name": "GranularRoyaltiesSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256[]", "name": "_ids", "type": "uint256[]" } ], "name": "GranularTokenManagersRemoved", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256[]", "name": "_ids", "type": "uint256[]" }, { "indexed": false, "internalType": "address[]", "name": "_tokenManagers", "type": "address[]" } ], "name": "GranularTokenManagersSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "newLimitSupply", "type": "uint256" } ], "name": "LimitSupplySet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "minter", "type": "address" }, { "indexed": true, "internalType": "bool", "name": "registered", "type": "bool" } ], "name": "MinterRegistrationChanged", "type": "event" }, { "anonymous": false, "inputs": [], "name": "MintsFrozen", "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": true, "internalType": "address", "name": "newRoyaltyManager", "type": "address" } ], "name": "RoyaltyManagerChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "indexed": false, "internalType": "string[]", "name": "uris", "type": "string[]" } ], "name": "TokenURIsSet", "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": [ { "internalType": "string", "name": "fileName", "type": "string" }, { "internalType": "address[]", "name": "fileStorageAddresses", "type": "address[]" } ], "name": "addFile", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "baseURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "contractURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "customRendererConfig", "outputs": [ { "internalType": "address", "name": "renderer", "type": "address" }, { "internalType": "bool", "name": "processMintDataOnRenderer", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "defaultManager", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "fileName", "type": "string" } ], "name": "fileContents", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "fileName", "type": "string" } ], "name": "fileStorage", "outputs": [ { "internalType": "address[]", "name": "", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "files", "outputs": [ { "internalType": "string[]", "name": "", "type": "string[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "freezeMints", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "generativeCodeUri", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "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": "bytes", "name": "data", "type": "bytes" }, { "internalType": "address", "name": "_observability", "type": "address" } ], "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": [ { "internalType": "address", "name": "forwarder", "type": "address" } ], "name": "isTrustedForwarder", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "limitSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "mintAmountToOneRecipient", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "recipients", "type": "address[]" } ], "name": "mintOneToMultipleRecipients", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" } ], "name": "mintOneToOneRecipient", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "recipients", "type": "address[]" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "mintSameAmountToMultipleRecipients", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "minters", "outputs": [ { "internalType": "address[]", "name": "", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "observability", "outputs": [ { "internalType": "contract IObservability", "name": "", "type": "address" } ], "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": [ { "internalType": "address", "name": "minter", "type": "address" } ], "name": "registerMinter", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "removeDefaultTokenManager", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "fileName", "type": "string" } ], "name": "removeFile", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "_ids", "type": "uint256[]" } ], "name": "removeGranularTokenManagers", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "removeRoyaltyManager", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenGroupingId", "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": [], "name": "royaltyManager", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "bytes", "name": "_data", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "newBaseURI", "type": "string" } ], "name": "setBaseURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "newName", "type": "string" }, { "internalType": "string", "name": "newSymbol", "type": "string" }, { "internalType": "string", "name": "newContractUri", "type": "string" } ], "name": "setContractMetadata", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "renderer", "type": "address" }, { "internalType": "bool", "name": "processMintDataOnRenderer", "type": "bool" } ], "internalType": "struct ERC721GeneralSequenceBase.CustomRendererConfig", "name": "_customRendererConfig", "type": "tuple" } ], "name": "setCustomRenderer", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "recipientAddress", "type": "address" }, { "internalType": "uint16", "name": "royaltyPercentageBPS", "type": "uint16" } ], "internalType": "struct IRoyaltyManager.Royalty", "name": "_royalty", "type": "tuple" } ], "name": "setDefaultRoyalty", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_defaultTokenManager", "type": "address" } ], "name": "setDefaultTokenManager", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "components": [ { "internalType": "address", "name": "recipientAddress", "type": "address" }, { "internalType": "uint16", "name": "royaltyPercentageBPS", "type": "uint16" } ], "internalType": "struct IRoyaltyManager.Royalty[]", "name": "_newRoyalties", "type": "tuple[]" } ], "name": "setGranularRoyalties", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "_ids", "type": "uint256[]" }, { "internalType": "address[]", "name": "_tokenManagers", "type": "address[]" } ], "name": "setGranularTokenManagers", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_limitSupply", "type": "uint256" } ], "name": "setLimitSupply", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_royaltyManager", "type": "address" } ], "name": "setRoyaltyManager", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "internalType": "string[]", "name": "uris", "type": "string[]" } ], "name": "setTokenURIs", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "supply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "tokenManager", "outputs": [ { "internalType": "address", "name": "manager", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "transferFrom", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "minter", "type": "address" } ], "name": "unregisterMinter", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
608060405234801561001057600080fd5b50615e1880620000216000396000f3fe6080604052600436106102865760003560e01c806301ffc9a71461028b57806302ee1211146102c0578063047fc9aa146102ed578063063a75021461031057806306fdde0314610327578063081812fc14610349578063095ea7b31461037657806318160ddd14610389578063184a94d51461039e57806318bae6c8146103be57806323b872dd146103de5780632a55205a146103f15780632a5ac7641461041f5780632b566c2a1461043f5780632ddcb21f1461045f5780632fc3a8d9146104765780633113cca0146104965780633713c1a1146104b657806342842e0e146104d657806342966c68146104e957806347230dcb146105095780634f58122a146105295780634fc8416d1461054957806350cf5a311461058457806351f13167146105a457806355f804b3146105c4578063572b6c05146105e45780635be95448146106045780636352211e146106245780636502abea146106445780636c0360eb146106645780636f33f1451461067957806370a082311461068e578063715018a6146106ae5780637c39601d146106c3578063834a20df146106e55780638da5cb5b1461070557806395d89b411461071a578063a22cb4651461072f578063a305f5b21461074f578063b5c5801e1461076f578063b88d4fde14610784578063bfb2995c14610797578063c2f50701146107b7578063c87b56dd146107cc578063cce2df03146107ec578063db3e4c841461080c578063e8a3d4851461082c578063e985e9c514610841578063eb87215014610861578063ee295d6214610881578063eeab0589146108a1578063ef60ceaf146108c1578063f1afe04d146108e1578063f2fde38b14610901578063f7441c3a14610921578063f97b57ec14610941575b600080fd5b34801561029757600080fd5b506102ab6102a6366004614bb0565b610956565b60405190151581526020015b60405180910390f35b3480156102cc57600080fd5b506102e06102db366004614c15565b610967565b6040516102b79190614c56565b3480156102f957600080fd5b50610302610a57565b6040519081526020016102b7565b34801561031c57600080fd5b50610325610a66565b005b34801561033357600080fd5b5061033c610b26565b6040516102b79190614cfb565b34801561035557600080fd5b50610369610364366004614d0e565b610bc1565b6040516102b79190614d27565b610325610384366004614d50565b610c05565b34801561039557600080fd5b50610302610c15565b3480156103aa57600080fd5b506103026103b9366004614d7c565b610c35565b3480156103ca57600080fd5b5060cb54610369906001600160a01b031681565b6103256103ec366004614d99565b610d54565b3480156103fd57600080fd5b5061041161040c366004614dda565b610ef8565b6040516102b7929190614dfc565b34801561042b57600080fd5b5061032561043a366004614e15565b610f93565b34801561044b57600080fd5b5061033c61045a366004614c15565b611029565b34801561046b57600080fd5b506103026101085481565b34801561048257600080fd5b50610325610491366004614ef2565b6111cd565b3480156104a257600080fd5b506103256104b1366004614f3d565b61134e565b3480156104c257600080fd5b506103256104d1366004614d0e565b611442565b6103256104e4366004614d99565b6114ee565b3480156104f557600080fd5b50610325610504366004614d0e565b611509565b34801561051557600080fd5b50610325610524366004614d7c565b6116c5565b34801561053557600080fd5b50610325610544366004614fa8565b611779565b34801561055557600080fd5b5061010954610576906001600160a01b03811690600160a01b900460ff1682565b6040516102b7929190614fdd565b34801561059057600080fd5b5061032561059f366004614d7c565b611997565b3480156105b057600080fd5b506103256105bf36600461500a565b611af9565b3480156105d057600080fd5b506103256105df366004614c15565b611b6a565b3480156105f057600080fd5b506102ab6105ff366004614d7c565b611d11565b34801561061057600080fd5b5061032561061f366004614d50565b611d25565b34801561063057600080fd5b5061036961063f366004614d0e565b611e17565b34801561065057600080fd5b5061036961065f366004614d0e565b611e22565b34801561067057600080fd5b5061033c611e51565b34801561068557600080fd5b5061033c611edf565b34801561069a57600080fd5b506103026106a9366004614d7c565b611eef565b3480156106ba57600080fd5b50610325611f4e565b3480156106cf57600080fd5b506106d8611f60565b6040516102b79190615026565b3480156106f157600080fd5b50610325610700366004614d7c565b6120e7565b34801561071157600080fd5b50610369612165565b34801561072657600080fd5b5061033c612174565b34801561073b57600080fd5b5061032561074a3660046150a1565b61218c565b34801561075b57600080fd5b5061032561076a366004614d7c565b612209565b34801561077b57600080fd5b5061032561236d565b610325610792366004615185565b6124c1565b3480156107a357600080fd5b506103256107b2366004615204565b612502565b3480156107c357600080fd5b50610325612822565b3480156107d857600080fd5b5061033c6107e7366004614d0e565b612933565b3480156107f857600080fd5b5061032561080736600461529d565b6129c3565b34801561081857600080fd5b506103256108273660046152f3565b612c14565b34801561083857600080fd5b5061033c612d47565b34801561084d57600080fd5b506102ab61085c36600461532c565b612d55565b34801561086d57600080fd5b5060d054610369906001600160a01b031681565b34801561088d57600080fd5b5060cf54610369906001600160a01b031681565b3480156108ad57600080fd5b506103256108bc3660046152f3565b612d92565b3480156108cd57600080fd5b506103256108dc36600461500a565b61305c565b3480156108ed57600080fd5b506103256108fc366004614c15565b61326a565b34801561090d57600080fd5b5061032561091c366004614d7c565b6134f5565b34801561092d57600080fd5b5061032561093c366004614fa8565b61356b565b34801561094d57600080fd5b506102e06136da565b6000610961826136e6565b92915050565b6060600083838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060405192935061010a926109b6925084915061535a565b908152604051908190036020019020546109da576109da63098f417360e21b613734565b61010a84846040516109ed929190615376565b9081526040805191829003602090810183208054808302850183019093528284529190830182828015610a4957602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610a2b575b505050505091505092915050565b6000610a6161373d565b905090565b610a6e613750565b610a766137bf565b60cf805460ff60a01b1916600160a01b1790556040517f9d4b38394dff663b46f53f52ced584161b5021180321b381f6104325eecebf4990600090a160d060009054906101000a90046001600160a01b03166001600160a01b031663fd120bd26040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610b0257600080fd5b505af1158015610b16573d6000803e3d6000fd5b50505050610b246001609755565b565b6060610b30613820565b6002018054610b3e90615386565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6a90615386565b8015610bb75780601f10610b8c57610100808354040283529160200191610bb7565b820191906000526020600020905b815481529060010190602001808311610b9a57829003601f168201915b5050505050905090565b6000610bcc82613844565b610be057610be06333d1c03960e21b613734565b610be8613820565b60009283526006016020525060409020546001600160a01b031690565b610c11828260016138a0565b5050565b60006001610c21613820565b60010154610c2d613820565b540303919050565b6000610c4a610c42613951565b60c99061395b565b610c5e57610c5e633e34a41b60e21b613734565b610c666137bf565b60cf54600160a01b900460ff1660011415610c8b57610c8b6345a9661760e01b613734565b6000610c95613977565b9050610ca081613987565b610cab8360016139ae565b60408051808201909152610109546001600160a01b0381168252600160a01b900460ff161580156020830152610d42578051604051630298386160e01b81526001600160a01b0390911690630298386190610d0f90859060019089906004016153bb565b600060405180830381600087803b158015610d2957600080fd5b505af1158015610d3d573d6000803e3d6000fd5b505050505b509050610d4f6001609755565b919050565b6000610d5f82613a7f565b6001600160a01b039485169490915081168414610d8557610d8562a1148160e81b613734565b600080610d9184613b3d565b91509150610da68187610da13390565b613b65565b610dc857610db48633612d55565b610dc857610dc8632ce44b5f60e11b613734565b8015610dd357600082555b610ddb613820565b6001600160a01b0387166000908152600591909101602052604090208054600019019055610e07613820565b6001600160a01b03861660009081526005919091016020526040902080546001019055610e3885600160e11b613b7a565b610e40613820565b60008681526004919091016020526040902055600160e11b8316610eaf5760018401610e6a613820565b60008281526004919091016020526040902054610ead57610e89613820565b548114610ead5783610e99613820565b600083815260049190910160205260409020555b505b6001600160a01b038516848188600080516020615dcc833981519152600080a480610ee457610ee4633a954ecd60e21b613734565b610eef878787613b8f565b50505050505050565b600082815260ce602090815260408083208151808301909252546001600160a01b038116808352600160a01b90910461ffff16928201929092528291610f6357506040805180820190915260cd546001600160a01b0381168252600160a01b900461ffff1660208201525b8051602082015190935061271090610f7f9061ffff16866153f0565b610f89919061540f565b9150509250929050565b610f9b613750565b610fa786868686613d2a565b610fb46101078383614970565b5060d054604051635bf57bc360e01b81526001600160a01b0390911690635bf57bc390610fef9089908990899089908990899060040161545a565b600060405180830381600087803b15801561100957600080fd5b505af115801561101d573d6000803e3d6000fd5b50505050505050505050565b6060600083838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060405192935061010a92611078925084915061535a565b9081526040519081900360200190205461109c5761109c63098f417360e21b613734565b600061010a85856040516110b1929190615376565b908152604080519182900360209081018320805480830285018301909352828452919083018282801561110d57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116110ef575b50505050509050600081519050600060405180602001604052806000815250905060005b828110156111c2578161118d85838151811061114f5761114f6154a3565b602002602001015160018088868151811061116c5761116c6154a3565b60200260200101516001600160a01b03163b61118891906154b9565b613d5f565b60405160200161119e9291906154d0565b604051602081830303815290604052915080806111ba906154ff565b915050611131565b509695505050505050565b6111d8610c42613951565b6111ec576111ec633e34a41b60e21b613734565b6111f46137bf565b60cf54600160a01b900460ff1660011415611219576112196345a9661760e01b613734565b8160006001611226613977565b61123091906154b9565b905060005b8281101561127f5761126d868683818110611252576112526154a3565b90506020020160208101906112679190614d7c565b856139ae565b80611277816154ff565b915050611235565b5061129c61128d84846153f0565b611297908361551a565b613987565b60408051808201909152610109546001600160a01b0381168252600160a01b900460ff16158015602083015261133c5780516001600160a01b03166358b916466112e784600161551a565b8689896040518563ffffffff1660e01b8152600401611309949392919061557b565b600060405180830381600087803b15801561132357600080fd5b505af1158015611337573d6000803e3d6000fd5b505050505b5050506113496001609755565b505050565b611356613750565b600084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060405192935061010a926113a3925084915061535a565b90815260405190819003602001902054156113c8576113c863aa2fa7cb60e01b613734565b61010b8054600181018255600091909152815161140c917fc4a0eda7235d7f6fd09c1e1f9f82dc3264d0d2f064cb41576c42a996a7be2892019060208401906149f4565b50828261010a83604051611420919061535a565b90815260405190819003602001902061143a929091614a68565b505050505050565b61144a613750565b6114526137bf565b61010881905560405181907fad7735a1decc3db45c1eab757cc4a1cb4bff8e332877b55f6db4ea11d82320c690600090a260d054604051630941255b60e21b8152600481018390526001600160a01b0390911690632504956c90602401600060405180830381600087803b1580156114c957600080fd5b505af11580156114dd573d6000803e3d6000fd5b505050506114eb6001609755565b50565b611349838383604051806020016040528060008152506124c1565b6115116137bf565b600061151c82611e22565b90506000611528613951565b90506001600160a01b038216158015906115b157506040516301ffc9a760e01b81526001600160a01b038316906301ffc9a7906115709063129dae8b60e01b906004016155a5565b602060405180830381865afa15801561158d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b191906155ba565b1561162c5760006115c184611e17565b60405163129dae8b60e01b81529091506001600160a01b0384169063129dae8b906115f4908590859089906004016155d7565b600060405180830381600087803b15801561160e57600080fd5b505af1158015611622573d6000803e3d6000fd5b5050505050611649565b6116368184613d82565b611649576116496282b42960e81b613734565b61165283613dbb565b60d0546040516323de665160e01b81526001600160a01b03909116906323de66519061168790849060009088906004016155d7565b600060405180830381600087803b1580156116a157600080fd5b505af11580156116b5573d6000803e3d6000fd5b5050505050506114eb6001609755565b6116cd613750565b6116d860c982613dfb565b6116ec576116ec63ea6eb5c360e01b613734565b6040516001906001600160a01b03831690600080516020615dac83398151915290600090a360d05460405163a9292a6f60e01b81526001600160a01b039091169063a9292a6f90611744908490600190600401614fdd565b600060405180830381600087803b15801561175e57600080fd5b505af1158015611772573d6000803e3d6000fd5b5050505050565b6117816137bf565b600061178b613951565b90508160005b818110156118ed57600060cc60008787858181106117b1576117b16154a3565b60209081029290920135835250810191909152604001600020546001600160a01b03169050806117eb576117eb635f98be1560e11b613734565b806001600160a01b031663ce2003a58588888681811061180d5761180d6154a3565b905060200201356040518363ffffffff1660e01b8152600401611831929190614dfc565b6020604051808303816000875af1158015611850573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061187491906155ba565b6118885761188863251c48e160e11b613734565b600060cc60008888868181106118a0576118a06154a3565b90506020020135815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055505080806118e5906154ff565b915050611791565b507f4d30c2588339a383e2c3092b5383924cf202ae9c377b76c5fe5208cd41d8d2aa848460405161191f929190615631565b60405180910390a160d0546040516320364dcd60e21b81526001600160a01b03909116906380d93734906119599087908790600401615631565b600060405180830381600087803b15801561197357600080fd5b505af1158015611987573d6000803e3d6000fd5b505050505050610c116001609755565b61199f6137bf565b6119a881613e10565b6119bc576119bc631a7387bd60e11b613734565b60006119c6613951565b60cf549091506001600160a01b031680611a0e576119e2612165565b6001600160a01b0316826001600160a01b031614611a0957611a096282b42960e81b613734565b611a94565b60405163bcdbc94760e01b81526001600160a01b038481166004830152838116602483015282169063bcdbc94790604401602060405180830381865afa158015611a5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a8091906155ba565b611a9457611a9463e10a050560e01b613734565b60cf80546001600160a01b0319166001600160a01b038516908117909155604051600080516020615dec83398151915290600090a260d05460405163755d5a1160e11b81526001600160a01b039091169063eabab42290611687908690600401614d27565b611b01613750565b6000611b106020830183614d7c565b6001600160a01b03161415611b5c5760405162461bcd60e51b815260206004820152600d60248201526c125b9d985b1a59081a5b9c1d5d609a1b60448201526064015b60405180910390fd5b806101096113498282615665565b611b726137bf565b80611b8757611b8763ecd7b0d160e01b613734565b60cb546001600160a01b031680611bd357611ba0612165565b6001600160a01b0316611bb1613951565b6001600160a01b031614611bce57611bce6282b42960e81b613734565b611c63565b806001600160a01b0316633d820a4d611bea613951565b600086866040518563ffffffff1660e01b8152600401611c0d94939291906156a4565b6020604051808303816000875af1158015611c2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c5091906155ba565b611c6357611c636282b42960e81b613734565b611ca283838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613e2c92505050565b60d054604051632cfd654b60e11b81526001600160a01b03909116906359faca9690611cd490869086906004016156cc565b600060405180830381600087803b158015611cee57600080fd5b505af1158015611d02573d6000803e3d6000fd5b5050505050610c116001609755565b6065546001600160a01b0391821691161490565b611d30610c42613951565b611d4457611d44633e34a41b60e21b613734565b611d4c6137bf565b60cf54600160a01b900460ff1660011415611d7157611d716345a9661760e01b613734565b60006001611d7d613977565b611d8791906154b9565b9050611d9383836139ae565b611da0611297838361551a565b60408051808201909152610109546001600160a01b0381168252600160a01b900460ff161580156020830152611e0b5780516001600160a01b03166302983861611deb84600161551a565b85876040518463ffffffff1660e01b8152600401611959939291906153bb565b5050610c116001609755565b600061096182613a7f565b60cb54600082815260cc60205260409020546001600160a01b0391821691168015611e4b578091505b50919050565b60d58054611e5e90615386565b80601f0160208091040260200160405190810160405280929190818152602001828054611e8a90615386565b8015611ed75780601f10611eac57610100808354040283529160200191611ed7565b820191906000526020600020905b815481529060010190602001808311611eba57829003601f168201915b505050505081565b606061010c8054610b3e90615386565b60006001600160a01b038216611f0f57611f0f6323d3ad8160e21b613734565b6001600160401b03611f1f613820565b6005016000846001600160a01b03166001600160a01b0316815260200190815260200160002054169050919050565b611f56613750565b610b246000613e79565b6060600061010b805480602002602001604051908101604052809291908181526020016000905b82821015612033578382906000526020600020018054611fa690615386565b80601f0160208091040260200160405190810160405280929190818152602001828054611fd290615386565b801561201f5780601f10611ff45761010080835404028352916020019161201f565b820191906000526020600020905b81548152906001019060200180831161200257829003601f168201915b505050505081526020019060010190611f87565b505050509050600081516001600160401b03811115612054576120546150da565b60405190808252806020026020018201604052801561208757816020015b60608152602001906001900390816120725790505b50905060005b82518110156120e0578281815181106120a8576120a86154a3565b60200260200101518282815181106120c2576120c26154a3565b602002602001018190525080806120d8906154ff565b91505061208d565b5092915050565b6120ef613750565b6120fa60c982613ecb565b61210e5761210e63ea6eb5c360e01b613734565b6040516000906001600160a01b03831690600080516020615dac833981519152908390a360d05460405163a9292a6f60e01b81526001600160a01b039091169063a9292a6f90611744908490600090600401614fdd565b6033546001600160a01b031690565b606061217e613820565b6003018054610b3e90615386565b80612195613820565b336000818152600792909201602090815260408084206001600160a01b03881680865290835293819020805460ff19169515159590951790945592518415158152919290917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6122116137bf565b61221a81613ee0565b61222e5761222e631a7387bd60e11b613734565b6000612238613951565b60cb549091506001600160a01b03168061228057612254612165565b6001600160a01b0316826001600160a01b03161461227b5761227b6282b42960e81b613734565b612308565b6040516342f19adb60e11b81526001600160a01b038216906385e335b6906122b190859060009088906004016156e0565b6020604051808303816000875af11580156122d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122f491906155ba565b6123085761230863e10a050560e01b613734565b60cb80546001600160a01b0319166001600160a01b038516908117909155604051600080516020615d8c83398151915290600090a260d0546040516316365cdd60e01b81526001600160a01b03909116906316365cdd90611687908690600401614d27565b6123756137bf565b600061237f613951565b60cb549091506001600160a01b0316806123a3576123a3635f98be1560e11b613734565b60405163ce2003a560e01b81526001600160a01b0382169063ce2003a5906123d2908590600090600401614dfc565b6020604051808303816000875af11580156123f1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061241591906155ba565b6124295761242963251c48e160e11b613734565b60cb80546001600160a01b0319169055604051600090600080516020615d8c833981519152908290a260d0546040516316365cdd60e01b81526001600160a01b03909116906316365cdd9061248390600090600401614d27565b600060405180830381600087803b15801561249d57600080fd5b505af11580156124b1573d6000803e3d6000fd5b505050505050610b246001609755565b6124cc848484610d54565b6001600160a01b0383163b156124fc576124e884848484613efc565b6124fc576124fc6368d2bf6b60e11b613734565b50505050565b61250a6137bf565b6000612514613951565b90506000612520612165565b60cf549091506001600160a01b0316858161262157826001600160a01b0316846001600160a01b03161461255d5761255d6282b42960e81b613734565b60005b8181101561261b576125a387878381811061257d5761257d6154a3565b90506040020160200160208101906125959190615713565b61271061ffff909116111590565b6125b7576125b7633daf741f60e21b613734565b8686828181106125c9576125c96154a3565b90506040020160ce60008b8b858181106125e5576125e56154a3565b90506020020135815260200190815260200160002081816126069190615730565b50819050612613816154ff565b915050612560565b5061276f565b60005b8181101561276d5761264187878381811061257d5761257d6154a3565b61265557612655633daf741f60e21b613734565b826001600160a01b031663ad6e40c78a8a84818110612676576126766154a3565b9050602002013589898581811061268f5761268f6154a3565b905060400201886040518463ffffffff1660e01b81526004016126b4939291906157a4565b602060405180830381865afa1580156126d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126f591906155ba565b6127095761270963270e710760e21b613734565b86868281811061271b5761271b6154a3565b90506040020160ce60008b8b85818110612737576127376154a3565b90506020020135815260200190815260200160002081816127589190615730565b50819050612765816154ff565b915050612624565b505b7feaf422d1ab2d8f38856ab6be8378c08d2886463a33667e896ba3a6ebf2c6260c888888886040516127a494939291906157d1565b60405180910390a160d054604051632be18fef60e11b81526001600160a01b03909116906357c31fde906127e2908b908b908b908b906004016157d1565b600060405180830381600087803b1580156127fc57600080fd5b505af1158015612810573d6000803e3d6000fd5b50505050505050506124fc6001609755565b61282a6137bf565b6000612834613951565b60cf549091506001600160a01b03168061285857612858635f98be1560e11b613734565b60405163680c607d60e11b81526001600160a01b0382169063d018c0fa90612884908590600401614d27565b602060405180830381865afa1580156128a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128c591906155ba565b6128d9576128d963251c48e160e11b613734565b60cf80546001600160a01b0319169055604051600090600080516020615dec833981519152908290a260d05460405163755d5a1160e11b81526001600160a01b039091169063eabab4229061248390600090600401614d27565b610109546060906001600160a01b0316156129ba576101095460405163c87b56dd60e01b8152600481018490526001600160a01b039091169063c87b56dd90602401600060405180830381865afa158015612992573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109619190810190615829565b61096182613fdb565b600054610100900460ff16158080156129e35750600054600160ff909116105b806129fd5750303b1580156129fd575060005460ff166001145b612a605760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401611b53565b6000805460ff191660011790558015612a83576000805461ff0019166101001790555b6000806000806000806000806000806000808f8f810190612aa4919061592c565b9b509b509b509b509b509b509b509b509b509b509b509b50612ac46140a6565b612acf8c8b8b6140cd565b612ad8866141a9565b612ae288886141f2565b612aed60c986613dfb565b508a51612b02906101079060208e01906149f4565b508351612b179061010c9060208701906149f4565b5060405163332a79b160e01b81526001600160a01b038f169063332a79b190612b44903090600401614d27565b600060405180830381600087803b158015612b5e57600080fd5b505af1158015612b72573d6000803e3d6000fd5b505050508d60d060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600083511115612bb057612bb083613e2c565b8115612bbd576101088290555b50505050505050505050505080156124fc576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b612c1c6137bf565b82818114612c3457612c34632b477e7160e11b613734565b60005b81811015612c9657612c84868683818110612c5457612c546154a3565b90506020020135858584818110612c6d57612c6d6154a3565b9050602002810190612c7f9190615a91565b614223565b80612c8e816154ff565b915050612c37565b507f2df7dd608aac5806395769062aca937bf08722cb45659d38c0cce82f5cd0cde385858585604051612ccc9493929190615ad7565b60405180910390a160d0546040516374c1ace160e01b81526001600160a01b03909116906374c1ace190612d0a908890889088908890600401615ad7565b600060405180830381600087803b158015612d2457600080fd5b505af1158015612d38573d6000803e3d6000fd5b50505050506124fc6001609755565b6101078054611e5e90615386565b6000612d5f613820565b6001600160a01b039384166000908152600791909101602090815260408083209490951682529290925250205460ff1690565b612d9a6137bf565b6000612da4613951565b90506000612db0612165565b90508460005b81811015612fa957612ded868683818110612dd357612dd36154a3565b9050602002016020810190612de89190614d7c565b613ee0565b612e0157612e01631a7387bd60e11b613734565b6000612e24898984818110612e1857612e186154a3565b90506020020135611e22565b90506001600160a01b038116612e6157836001600160a01b0316856001600160a01b031614612e5c57612e5c6282b42960e81b613734565b612f1f565b806001600160a01b03166385e335b6868b8b86818110612e8357612e836154a3565b600088815260cc60209081526040918290205491516001600160e01b031960e089901b168152612ec8969591909302013592506001600160a01b0316906004016156e0565b6020604051808303816000875af1158015612ee7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f0b91906155ba565b612f1f57612f1f63e10a050560e01b613734565b868683818110612f3157612f316154a3565b9050602002016020810190612f469190614d7c565b60cc60008b8b86818110612f5c57612f5c6154a3565b90506020020135815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550508080612fa1906154ff565b915050612db6565b507facc0f6922d8ccd133dbdaee1908d4d734f25a540223d55145e9fad2898471a4e87878787604051612fdf9493929190615b87565b60405180910390a160d0546040516315bd85bf60e01b81526001600160a01b03909116906315bd85bf9061301d908a908a908a908a90600401615b87565b600060405180830381600087803b15801561303757600080fd5b505af115801561304b573d6000803e3d6000fd5b505050505050506124fc6001609755565b6130646137bf565b6130746040820160208301615713565b61271061ffff8216111561309257613092633daf741f60e21b613734565b600061309c613951565b60cf549091506001600160a01b0316806130e4576130b8612165565b6001600160a01b0316826001600160a01b0316146130df576130df6282b42960e81b613734565b613167565b60405163049a5c0f60e41b81526001600160a01b038216906349a5c0f0906131129087908690600401615bae565b602060405180830381865afa15801561312f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061315391906155ba565b6131675761316763270e710760e21b613734565b8360cd6131748282615730565b5061318790506040850160208601615713565b61ffff166131986020860186614d7c565b6001600160a01b03167f2c5ea6e4103e78cb101e796fb2dace540362fc542cbff5145eaa24af7dd8fe4160405160405180910390a360d0546001600160a01b031663d10072c06131eb6020870187614d7c565b6131fb6040880160208901615713565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015261ffff166024820152604401600060405180830381600087803b15801561324557600080fd5b505af1158015613259573d6000803e3d6000fd5b505050505050506114eb6001609755565b613272613750565b600082828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060405192935061010a926132bf925084915061535a565b908152604051908190036020019020546132e3576132e363098f417360e21b613734565b600061010b805480602002602001604051908101604052809291908181526020016000905b828210156133b457838290600052602060002001805461332790615386565b80601f016020809104026020016040519081016040528092919081815260200182805461335390615386565b80156133a05780601f10613375576101008083540402835291602001916133a0565b820191906000526020600020905b81548152906001019060200180831161338357829003601f168201915b505050505081526020019060010190613308565b5050505090506000600182516133ca91906154b9565b6001600160401b038111156133e1576133e16150da565b60405190808252806020026020018201604052801561341457816020015b60608152602001906001900390816133ff5790505b508251909150600090815b818110156134b4578580519060200120858281518110613441576134416154a3565b602002602001015180519060200120141561345f57600192506134a2565b848181518110613471576134716154a3565b602002602001015184848361348691906154b9565b81518110613496576134966154a3565b60200260200101819052505b806134ac816154ff565b91505061341f565b5082516134c99061010b906020860190614abb565b5061010a856040516134db919061535a565b90815260200160405180910390206000610eef9190614b14565b6134fd613750565b6001600160a01b0381166135625760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401611b53565b6114eb81613e79565b613576610c42613951565b61358a5761358a633e34a41b60e21b613734565b6135926137bf565b60cf54600160a01b900460ff16600114156135b7576135b76345a9661760e01b613734565b80600060016135c4613977565b6135ce91906154b9565b905060005b8281101561361e5761360c8585838181106135f0576135f06154a3565b90506020020160208101906136059190614d7c565b60016139ae565b80613616816154ff565b9150506135d3565b5061362c611297838361551a565b60408051808201909152610109546001600160a01b0381168252600160a01b900460ff1615801560208301526136cd5780516001600160a01b03166358b9164661367784600161551a565b600188886040518563ffffffff1660e01b815260040161369a949392919061557b565b600060405180830381600087803b1580156136b457600080fd5b505af11580156136c8573d6000803e3d6000fd5b505050505b505050610c116001609755565b6060610a6160c9614324565b60006301ffc9a760e01b6001600160e01b03198316148061371757506380ac58cd60e01b6001600160e01b03198316145b806109615750506001600160e01b031916635b5e139f60e01b1490565b6114eb81614331565b60006001613749613820565b5403919050565b613758613951565b6001600160a01b0316613769612165565b6001600160a01b031614610b245760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611b53565b600260975414156138125760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401611b53565b6002609755565b6001609755565b7f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c4090565b600081600111610d4f57613856613820565b54821015610d4f5760005b613869613820565b600084815260049190910160205260409020549050806138935761388c83615bd4565b9250613861565b600160e01b161592915050565b60006138ab83611e17565b90508180156138c35750336001600160a01b03821614155b156138e6576138d28133612d55565b6138e6576138e66367d9dca160e11b613734565b836138ef613820565b6000858152600691909101602052604080822080546001600160a01b0319166001600160a01b0394851617905551859287811692908516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259190a450505050565b6000610a6161433a565b6000613970836001600160a01b038416614344565b9392505050565b6000613981613820565b54919050565b61010854801580159061399957508082115b15610c1157610c1163be1a657d60e01b613734565b60006139b8613820565b549050816139d0576139d063b562e8dd60e01b613734565b6139e0836001841460e11b613b7a565b6139e8613820565b600083815260049190910160205260409020556001600160401b018202613a0d613820565b6001600160a01b03851660008181526005929092016020526040909120805490920190915580613a4657613a46622e076360e81b613734565b818301825b80836000600080516020615dcc833981519152600080a460010180821415613a4b5781613a76613820565b55505050505050565b600081600111613b2d57613a91613820565b60008381526004919091016020526040902054905080613b1d57613ab3613820565b548210613aca57613aca636f96cda160e11b613734565b613ad2613820565b6000199092016000818152600493909301602052604090922054905080613af857613aca565b600160e01b8116613b0857919050565b613b18636f96cda160e11b613734565b613aca565b600160e01b8116613b2d57919050565b610d4f636f96cda160e11b613734565b6000806000613b4a613820565b60009485526006016020525050604090912080549092909150565b6001600160a01b039081169116811491141790565b4260a01b176001600160a01b03919091161790565b6000613b9a82611e22565b90506001600160a01b03811615801590613c2357506040516301ffc9a760e01b81526001600160a01b038216906301ffc9a790613be290637af46b4f60e11b906004016155a5565b602060405180830381865afa158015613bff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c2391906155ba565b15613cbe57806001600160a01b0316638af6791b613c3f613951565b6040516001600160e01b031960e084901b1681526001600160a01b039182166004820152818816602482015290861660448201526064810185905260a06084820152600060a482015260c401600060405180830381600087803b158015613ca557600080fd5b505af1158015613cb9573d6000803e3d6000fd5b505050505b60d0546040516323de665160e01b81526001600160a01b03909116906323de665190613cf2908790879087906004016155d7565b600060405180830381600087803b158015613d0c57600080fd5b505af1158015613d20573d6000803e3d6000fd5b5050505050505050565b8383613d34613820565b6002019190613d44929190614970565b508181613d4f613820565b6003019190611772929190614970565b60408051603f8301601f19168101909152818152818360208301863c9392505050565b600080613d8e83611e17565b9050613d9a8185612d55565b80613db35750613db3613dac84610bc1565b8286613b65565b949350505050565b613dc48161435c565b600081815260d1602052604090208054613ddd90615386565b1590506114eb57600081815260d1602052604081206114eb91614b32565b6000613970836001600160a01b038416614367565b60006109616001600160a01b03831663440444c560e11b6143b1565b7f2e0a5b969d96a99aee0b35787d9a60516a02ca6f528a5f66d3f936468d8f038260d582604051613e5e929190615beb565b60405180910390a18051610c119060d59060208401906149f4565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000613970836001600160a01b0384166143cd565b60006109616001600160a01b038316633b209e2f60e11b6143b1565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290613f31903390899088908890600401615c9e565b6020604051808303816000875af1925050508015613f6c575060408051601f3d908101601f19168201909252613f6991810190615cd1565b60015b613fbe573d808015613f9a576040519150601f19603f3d011682016040523d82523d6000602084013e613f9f565b606091505b508051613fb657613fb66368d2bf6b60e11b613734565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050949350505050565b6060613fe682613844565b613ffa57613ffa63677510db60e11b613734565b600082815260d160205260408120805461401390615386565b80601f016020809104026020016040519081016040528092919081815260200182805461403f90615386565b801561408c5780601f106140615761010080835404028352916020019161408c565b820191906000526020600020905b81548152906001019060200180831161406f57829003601f168201915b5050505050905080516000141561096157613970836144c0565b600054610100900460ff16610b245760405162461bcd60e51b8152600401611b5390615cee565b600054610100900460ff166140f45760405162461bcd60e51b8152600401611b5390615cee565b602082015161271061ffff8216111561411757614117633daf741f60e21b613734565b61411f61453b565b61412761456a565b61413084613e79565b82516001600160a01b03161561417757825160cd8054602086015161ffff16600160a01b026001600160b01b03199091166001600160a01b03909316929092179190911790555b6001600160a01b038216156124fc5760cb80546001600160a01b0384166001600160a01b031990911617905550505050565b600054610100900460ff166141d05760405162461bcd60e51b8152600401611b5390615cee565b606580546001600160a01b0319166001600160a01b0392909216919091179055565b600054610100900460ff166142195760405162461bcd60e51b8152600401611b5390615cee565b610c118282614599565b600061422e84611e22565b9050600061423a613951565b90506000614246612165565b90506001600160a01b03831661428357806001600160a01b0316826001600160a01b03161461427e5761427e6282b42960e81b613734565b61430b565b604051633d820a4d60e01b81526001600160a01b03841690633d820a4d906142b59085908a908a908a906004016156a4565b6020604051808303816000875af11580156142d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142f891906155ba565b61430b5761430b6282b42960e81b613734565b600086815260d160205260409020610eef908686614970565b606060006139708361460f565b6114eb8161466b565b6000610a61614675565b60009081526001919091016020526040902054151590565b6114eb816000614697565b60006143738383614344565b6143a957508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610961565b506000610961565b60006143bc836147ee565b801561397057506139708383614821565b600081815260018301602052604081205480156144b65760006143f16001836154b9565b8554909150600090614405906001906154b9565b905081811461446a576000866000018281548110614425576144256154a3565b9060005260206000200154905080876000018481548110614448576144486154a3565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061447b5761447b615d39565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610961565b6000915050610961565b60606144cb82613844565b6144df576144df630a14c4b560e41b613734565b60006144e96148b5565b905080516000141561450a5760405180602001604052806000815250613970565b80614514846148c4565b604051602001614525929190615d4f565b6040516020818303038152906040529392505050565b600054610100900460ff166145625760405162461bcd60e51b8152600401611b5390615cee565b610b24614912565b600054610100900460ff166145915760405162461bcd60e51b8152600401611b5390615cee565b610b24614949565b600054610100900460ff166145c05760405162461bcd60e51b8152600401611b5390615cee565b816145c9613820565b60020190805190602001906145df9291906149f4565b50806145e9613820565b60030190805190602001906145ff9291906149f4565b50600161460a613820565b555050565b60608160000180548060200260200160405190810160405280929190818152602001828054801561465f57602002820191906000526020600020905b81548152602001906001019080831161464b575b50505050509050919050565b8060005260046000fd5b600061468033611d11565b15614692575060131936013560601c90565b503390565b60006146a283613a7f565b9050806000806146b186613b3d565b9150915084156146e8576146c6818433613b65565b6146e8576146d48333612d55565b6146e8576146e8632ce44b5f60e11b613734565b80156146f357600082555b6001600160801b03614703613820565b6001600160a01b038516600090815260059190910160205260409020805491909101905561473583600360e01b613b7a565b61473d613820565b60008881526004919091016020526040902055600160e11b84166147ac5760018601614767613820565b600082815260049190910160205260409020546147aa57614786613820565b5481146147aa5784614796613820565b600083815260049190910160205260409020555b505b60405186906000906001600160a01b03861690600080516020615dcc833981519152908390a46147da613820565b600190810180549091019055505050505050565b6000614801826301ffc9a760e01b614821565b8015610961575061481a826001600160e01b0319614821565b1592915050565b6000806301ffc9a760e01b8360405160240161483d91906155a5565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505090506000806000602060008551602087018a617530fa92503d9150600051905082801561489e575060208210155b80156148aa5750600081115b979650505050505050565b606060d58054610b3e90615386565b606060a06040510180604052602081039150506000815280825b600183039250600a81066030018353600a9004806148fb57614900565b6148de565b50819003601f19909101908152919050565b600054610100900460ff166149395760405162461bcd60e51b8152600401611b5390615cee565b610b24614944613951565b613e79565b600054610100900460ff166138195760405162461bcd60e51b8152600401611b5390615cee565b82805461497c90615386565b90600052602060002090601f01602090048101928261499e57600085556149e4565b82601f106149b75782800160ff198235161785556149e4565b828001600101855582156149e4579182015b828111156149e45782358255916020019190600101906149c9565b506149f0929150614b68565b5090565b828054614a0090615386565b90600052602060002090601f016020900481019282614a2257600085556149e4565b82601f10614a3b57805160ff19168380011785556149e4565b828001600101855582156149e4579182015b828111156149e4578251825591602001919060010190614a4d565b8280548282559060005260206000209081019282156149e4579160200282015b828111156149e45781546001600160a01b0319166001600160a01b03843516178255602090920191600190910190614a88565b828054828255906000526020600020908101928215614b08579160200282015b82811115614b085782518051614af89184916020909101906149f4565b5091602001919060010190614adb565b506149f0929150614b7d565b50805460008255906000526020600020908101906114eb9190614b68565b508054614b3e90615386565b6000825580601f10614b4e575050565b601f0160209004906000526020600020908101906114eb91905b5b808211156149f05760008155600101614b69565b808211156149f0576000614b918282614b32565b50600101614b7d565b6001600160e01b0319811681146114eb57600080fd5b600060208284031215614bc257600080fd5b813561397081614b9a565b60008083601f840112614bdf57600080fd5b5081356001600160401b03811115614bf657600080fd5b602083019150836020828501011115614c0e57600080fd5b9250929050565b60008060208385031215614c2857600080fd5b82356001600160401b03811115614c3e57600080fd5b614c4a85828601614bcd565b90969095509350505050565b6020808252825182820181905260009190848201906040850190845b81811015614c975783516001600160a01b031683529284019291840191600101614c72565b50909695505050505050565b60005b83811015614cbe578181015183820152602001614ca6565b838111156124fc5750506000910152565b60008151808452614ce7816020860160208601614ca3565b601f01601f19169290920160200192915050565b6020815260006139706020830184614ccf565b600060208284031215614d2057600080fd5b5035919050565b6001600160a01b0391909116815260200190565b6001600160a01b03811681146114eb57600080fd5b60008060408385031215614d6357600080fd5b8235614d6e81614d3b565b946020939093013593505050565b600060208284031215614d8e57600080fd5b813561397081614d3b565b600080600060608486031215614dae57600080fd5b8335614db981614d3b565b92506020840135614dc981614d3b565b929592945050506040919091013590565b60008060408385031215614ded57600080fd5b50508035926020909101359150565b6001600160a01b03929092168252602082015260400190565b60008060008060008060608789031215614e2e57600080fd5b86356001600160401b0380821115614e4557600080fd5b614e518a838b01614bcd565b90985096506020890135915080821115614e6a57600080fd5b614e768a838b01614bcd565b90965094506040890135915080821115614e8f57600080fd5b50614e9c89828a01614bcd565b979a9699509497509295939492505050565b60008083601f840112614ec057600080fd5b5081356001600160401b03811115614ed757600080fd5b6020830191508360208260051b8501011115614c0e57600080fd5b600080600060408486031215614f0757600080fd5b83356001600160401b03811115614f1d57600080fd5b614f2986828701614eae565b909790965060209590950135949350505050565b60008060008060408587031215614f5357600080fd5b84356001600160401b0380821115614f6a57600080fd5b614f7688838901614bcd565b90965094506020870135915080821115614f8f57600080fd5b50614f9c87828801614eae565b95989497509550505050565b60008060208385031215614fbb57600080fd5b82356001600160401b03811115614fd157600080fd5b614c4a85828601614eae565b6001600160a01b039290921682521515602082015260400190565b600060408284031215611e4b57600080fd5b60006040828403121561501c57600080fd5b6139708383614ff8565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561507b57603f19888603018452615069858351614ccf565b9450928501929085019060010161504d565b5092979650505050505050565b80151581146114eb57600080fd5b8035610d4f81615088565b600080604083850312156150b457600080fd5b82356150bf81614d3b565b915060208301356150cf81615088565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715615118576151186150da565b604052919050565b60006001600160401b03821115615139576151396150da565b50601f01601f191660200190565b600061515a61515584615120565b6150f0565b905082815283838301111561516e57600080fd5b828260208301376000602084830101529392505050565b6000806000806080858703121561519b57600080fd5b84356151a681614d3b565b935060208501356151b681614d3b565b92506040850135915060608501356001600160401b038111156151d857600080fd5b8501601f810187136151e957600080fd5b6151f887823560208401615147565b91505092959194509250565b6000806000806040858703121561521a57600080fd5b84356001600160401b038082111561523157600080fd5b61523d88838901614eae565b9096509450602087013591508082111561525657600080fd5b818701915087601f83011261526a57600080fd5b81358181111561527957600080fd5b8860208260061b850101111561528e57600080fd5b95989497505060200194505050565b6000806000604084860312156152b257600080fd5b83356001600160401b038111156152c857600080fd5b6152d486828701614bcd565b90945092505060208401356152e881614d3b565b809150509250925092565b6000806000806040858703121561530957600080fd5b84356001600160401b038082111561532057600080fd5b614f7688838901614eae565b6000806040838503121561533f57600080fd5b823561534a81614d3b565b915060208301356150cf81614d3b565b6000825161536c818460208701614ca3565b9190910192915050565b8183823760009101908152919050565b600181811c9082168061539a57607f821691505b60208210811415611e4b57634e487b7160e01b600052602260045260246000fd5b92835260208301919091526001600160a01b0316604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561540a5761540a6153da565b500290565b60008261542c57634e487b7160e01b600052601260045260246000fd5b500490565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600061546e60608301888a615431565b8281036020840152615481818789615431565b90508281036040840152615496818587615431565b9998505050505050505050565b634e487b7160e01b600052603260045260246000fd5b6000828210156154cb576154cb6153da565b500390565b600083516154e2818460208801614ca3565b8351908301906154f6818360208801614ca3565b01949350505050565b6000600019821415615513576155136153da565b5060010190565b6000821982111561552d5761552d6153da565b500190565b8183526000602080850194508260005b8581101561557057813561555581614d3b565b6001600160a01b031687529582019590820190600101615542565b509495945050505050565b84815283602082015260606040820152600061559b606083018486615532565b9695505050505050565b6001600160e01b031991909116815260200190565b6000602082840312156155cc57600080fd5b815161397081615088565b6001600160a01b039384168152919092166020820152604081019190915260600190565b81835260006001600160fb1b0383111561561457600080fd5b8260051b8083602087013760009401602001938452509192915050565b602081526000613db36020830184866155fb565b80546001600160a01b0319166001600160a01b0392909216919091179055565b813561567081614d3b565b61567a8183615645565b50602082013561568981615088565b815460ff60a01b191690151560a01b60ff60a01b1617905550565b60018060a01b038516815283602082015260606040820152600061559b606083018486615431565b602081526000613db3602083018486615431565b6001600160a01b0393841681526020810192909252909116604082015260600190565b61ffff811681146114eb57600080fd5b60006020828403121561572557600080fd5b813561397081615703565b813561573b81614d3b565b6157458183615645565b50602082013561575481615703565b815461ffff60a01b191660a09190911b61ffff60a01b1617905550565b803561577c81614d3b565b6001600160a01b03168252602081013561579581615703565b61ffff81166020840152505050565b838152608081016157b86020830185615771565b6001600160a01b03929092166060919091015292915050565b600060408083526157e581840187896155fb565b83810360208086019190915285825286910160005b8681101561581c5761580c8284615771565b91830191908301906001016157fa565b5098975050505050505050565b60006020828403121561583b57600080fd5b81516001600160401b0381111561585157600080fd5b8201601f8101841361586257600080fd5b805161587061515582615120565b81815285602083850101111561588557600080fd5b615896826020830160208601614ca3565b95945050505050565b8035610d4f81614d3b565b600082601f8301126158bb57600080fd5b61397083833560208501615147565b6000604082840312156158dc57600080fd5b604080519081016001600160401b03811182821017156158fe576158fe6150da565b604052905080823561590f81614d3b565b8152602083013561591f81615703565b6020919091015292915050565b6000806000806000806000806000806000806101a08d8f03121561594f57600080fd5b6159588d61589f565b9b506001600160401b0360208e0135111561597257600080fd5b6159828e60208f01358f016158aa565b9a506159918e60408f016158ca565b995061599f60808e0161589f565b98506001600160401b0360a08e013511156159b957600080fd5b6159c98e60a08f01358f016158aa565b97506001600160401b0360c08e013511156159e357600080fd5b6159f38e60c08f01358f016158aa565b9650615a0160e08e0161589f565b9550615a106101008e0161589f565b94506001600160401b036101208e01351115615a2b57600080fd5b615a3c8e6101208f01358f016158aa565b93506001600160401b036101408e01351115615a5757600080fd5b615a688e6101408f01358f016158aa565b92506101608d01359150615a7f6101808e01615096565b90509295989b509295989b509295989b565b6000808335601e19843603018112615aa857600080fd5b8301803591506001600160401b03821115615ac257600080fd5b602001915036819003821315614c0e57600080fd5b604081526000615aeb6040830186886155fb565b602083820381850152818583528183019050818660051b8401018760005b88811015615b7757858303601f190184528135368b9003601e19018112615b2f57600080fd5b8a0180356001600160401b03811115615b4757600080fd5b8036038c1315615b5657600080fd5b615b638582898501615431565b958701959450505090840190600101615b09565b50909a9950505050505050505050565b604081526000615b9b6040830186886155fb565b82810360208401526148aa818587615532565b60608101615bbc8285615771565b6001600160a01b039290921660409190910152919050565b600081615be357615be36153da565b506000190190565b60408152600080845481600182811c915080831680615c0b57607f831692505b6020808410821415615c2b57634e487b7160e01b86526022600452602486fd5b6040880184905260608801828015615c4a5760018114615c5b57615c86565b60ff19871682528282019750615c86565b60008c81526020902060005b87811015615c8057815484820152908601908401615c67565b83019850505b50508786038189015250505050506158968185614ccf565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061559b90830184614ccf565b600060208284031215615ce357600080fd5b815161397081614b9a565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b634e487b7160e01b600052603160045260246000fd5b60008351615d61818460208801614ca3565b602f60f81b9083019081528351615d7f816001840160208801614ca3565b0160010194935050505056fec407dfe559ca4a63d7cf8439b9fce2965d7a4c8c92eb5d5047f53bb9eec295fd73e05f4c0a27cbf60841afa4a2f8577f5e99db3e3e9c293800d6e6b1f7b8a7abddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efe236d251e7da4ac8a3c275f80aebc9b74cbf356425fa04864da5043511a81219a164736f6c634300080a000a