[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "CurrencyTransferLibFailedNativeTransfer", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "NFTMetadataFrozen", "type": "error" }, { "inputs": [], "name": "NFTMetadataInvalidUrl", "type": "error" }, { "inputs": [], "name": "NFTMetadataUnauthorized", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "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": "_fromTokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "_toTokenId", "type": "uint256" } ], "name": "BatchMetadataUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "newRoyaltyRecipient", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "newRoyaltyBps", "type": "uint256" } ], "name": "DefaultRoyalty", "type": "event" }, { "anonymous": false, "inputs": [], "name": "EIP712DomainChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "platformFeeRecipient", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "flatFee", "type": "uint256" } ], "name": "FlatPlatformFeeUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [], "name": "MetadataFrozen", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "MetadataUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "prevOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnerUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "platformFeeRecipient", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "platformFeeBps", "type": "uint256" } ], "name": "PlatformFeeInfoUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "enum IPlatformFee.PlatformFeeType", "name": "feeType", "type": "uint8" } ], "name": "PlatformFeeTypeUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "recipient", "type": "address" } ], "name": "PrimarySaleRecipientUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "previousAdminRole", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "newAdminRole", "type": "bytes32" } ], "name": "RoleAdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleGranted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleRevoked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "royaltyRecipient", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "royaltyBps", "type": "uint256" } ], "name": "RoyaltyForToken", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "mintedTo", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenIdMinted", "type": "uint256" }, { "indexed": false, "internalType": "string", "name": "uri", "type": "string" }, { "indexed": false, "internalType": "uint256", "name": "quantityMinted", "type": "uint256" } ], "name": "TokensMinted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "signer", "type": "address" }, { "indexed": true, "internalType": "address", "name": "mintedTo", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenIdMinted", "type": "uint256" }, { "components": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "address", "name": "royaltyRecipient", "type": "address" }, { "internalType": "uint256", "name": "royaltyBps", "type": "uint256" }, { "internalType": "address", "name": "primarySaleRecipient", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "string", "name": "uri", "type": "string" }, { "internalType": "uint256", "name": "quantity", "type": "uint256" }, { "internalType": "uint256", "name": "pricePerToken", "type": "uint256" }, { "internalType": "address", "name": "currency", "type": "address" }, { "internalType": "uint128", "name": "validityStartTimestamp", "type": "uint128" }, { "internalType": "uint128", "name": "validityEndTimestamp", "type": "uint128" }, { "internalType": "bytes32", "name": "uid", "type": "bytes32" } ], "indexed": false, "internalType": "struct ITokenERC1155.MintRequest", "name": "mintRequest", "type": "tuple" } ], "name": "TokensMintedWithSignature", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "indexed": false, "internalType": "uint256[]", "name": "values", "type": "uint256[]" } ], "name": "TransferBatch", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "id", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "TransferSingle", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "value", "type": "string" }, { "indexed": true, "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "URI", "type": "event" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "accounts", "type": "address[]" }, { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" } ], "name": "balanceOfBatch", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "values", "type": "uint256[]" } ], "name": "burnBatch", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "contractType", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "contractURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "contractVersion", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "eip712Domain", "outputs": [ { "internalType": "bytes1", "name": "fields", "type": "bytes1" }, { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "version", "type": "string" }, { "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "address", "name": "verifyingContract", "type": "address" }, { "internalType": "bytes32", "name": "salt", "type": "bytes32" }, { "internalType": "uint256[]", "name": "extensions", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "freezeMetadata", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "getDefaultRoyaltyInfo", "outputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getFlatPlatformFeeInfo", "outputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getPlatformFeeInfo", "outputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getPlatformFeeType", "outputs": [ { "internalType": "enum IPlatformFee.PlatformFeeType", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleAdmin", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "getRoleMember", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleMemberCount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "getRoyaltyInfoForToken", "outputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "grantRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "hasRole", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_defaultAdmin", "type": "address" }, { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "string", "name": "_symbol", "type": "string" }, { "internalType": "string", "name": "_contractURI", "type": "string" }, { "internalType": "address[]", "name": "_trustedForwarders", "type": "address[]" }, { "internalType": "address", "name": "_primarySaleRecipient", "type": "address" }, { "internalType": "address", "name": "_royaltyRecipient", "type": "address" }, { "internalType": "uint128", "name": "_royaltyBps", "type": "uint128" }, { "internalType": "uint128", "name": "_platformFeeBps", "type": "uint128" }, { "internalType": "address", "name": "_platformFeeRecipient", "type": "address" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "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": [ { "internalType": "address", "name": "_to", "type": "address" }, { "internalType": "uint256", "name": "_tokenId", "type": "uint256" }, { "internalType": "string", "name": "_uri", "type": "string" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "mintTo", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "address", "name": "royaltyRecipient", "type": "address" }, { "internalType": "uint256", "name": "royaltyBps", "type": "uint256" }, { "internalType": "address", "name": "primarySaleRecipient", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "string", "name": "uri", "type": "string" }, { "internalType": "uint256", "name": "quantity", "type": "uint256" }, { "internalType": "uint256", "name": "pricePerToken", "type": "uint256" }, { "internalType": "address", "name": "currency", "type": "address" }, { "internalType": "uint128", "name": "validityStartTimestamp", "type": "uint128" }, { "internalType": "uint128", "name": "validityEndTimestamp", "type": "uint128" }, { "internalType": "bytes32", "name": "uid", "type": "bytes32" } ], "internalType": "struct ITokenERC1155.MintRequest", "name": "_req", "type": "tuple" }, { "internalType": "bytes", "name": "_signature", "type": "bytes" } ], "name": "mintWithSignature", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "bytes[]", "name": "data", "type": "bytes[]" } ], "name": "multicall", "outputs": [ { "internalType": "bytes[]", "name": "results", "type": "bytes[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "nextTokenIdToMint", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "platformFeeRecipient", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "primarySaleRecipient", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "salePrice", "type": "uint256" } ], "name": "royaltyInfo", "outputs": [ { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "uint256", "name": "royaltyAmount", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "safeBatchTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "saleRecipientForToken", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "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": "_uri", "type": "string" } ], "name": "setContractURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_royaltyRecipient", "type": "address" }, { "internalType": "uint256", "name": "_royaltyBps", "type": "uint256" } ], "name": "setDefaultRoyaltyInfo", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_platformFeeRecipient", "type": "address" }, { "internalType": "uint256", "name": "_flatFee", "type": "uint256" } ], "name": "setFlatPlatformFeeInfo", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_newOwner", "type": "address" } ], "name": "setOwner", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_platformFeeRecipient", "type": "address" }, { "internalType": "uint256", "name": "_platformFeeBps", "type": "uint256" } ], "name": "setPlatformFeeInfo", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "enum IPlatformFee.PlatformFeeType", "name": "_feeType", "type": "uint8" } ], "name": "setPlatformFeeType", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_saleRecipient", "type": "address" } ], "name": "setPrimarySaleRecipient", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" }, { "internalType": "address", "name": "_recipient", "type": "address" }, { "internalType": "uint256", "name": "_bps", "type": "uint256" } ], "name": "setRoyaltyInfoForToken", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" }, { "internalType": "string", "name": "_uri", "type": "string" } ], "name": "setTokenURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "uri", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "uriFrozen", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "address", "name": "royaltyRecipient", "type": "address" }, { "internalType": "uint256", "name": "royaltyBps", "type": "uint256" }, { "internalType": "address", "name": "primarySaleRecipient", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "string", "name": "uri", "type": "string" }, { "internalType": "uint256", "name": "quantity", "type": "uint256" }, { "internalType": "uint256", "name": "pricePerToken", "type": "uint256" }, { "internalType": "address", "name": "currency", "type": "address" }, { "internalType": "uint128", "name": "validityStartTimestamp", "type": "uint128" }, { "internalType": "uint128", "name": "validityEndTimestamp", "type": "uint128" }, { "internalType": "bytes32", "name": "uid", "type": "bytes32" } ], "internalType": "struct ITokenERC1155.MintRequest", "name": "_req", "type": "tuple" }, { "internalType": "bytes", "name": "_signature", "type": "bytes" } ], "name": "verify", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" }, { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" } ]
60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b806200004f5750303b1580156200004f575060005460ff166001145b620000b75760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000db576000805461ff0019166101001790555b801562000122576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5061589d80620001336000396000f3fe6080604052600436106102695760003560e01c8063938e3d7b1161014b578063938e3d7b1461061a57806395d89b411461063a57806398a6e9931461064f5780639bcf7a1514610662578063a0a8e46014610682578063a217fddf1461069e578063a22cb465146106b3578063ac9650d8146106d3578063b03f452814610700578063b17cd86f14610720578063b24f2d391461075f578063b6f10c791461078e578063bd85b039146107ae578063ca15c873146107dc578063cb2ef6f7146107fc578063d111515d1461081e578063d45573f614610833578063d547741f14610869578063e159163414610889578063e57553da146108a9578063e8a3d485146108cf578063e985e9c5146108e4578063ea500d691461092e578063eb13554f14610965578063f242432a14610986578063f28083c3146109a6578063f5298aca146109c757600080fd5b8062fdd58e1461026e57806301ffc9a7146102a157806306fdde03146102d1578063079fe40e146102f35780630e89341c1461032c57806313af40351461034c578063162094c41461036e5780631e7ac4881461038e578063248a9ca3146103ae578063274e4a1d146103ce5780632a55205a146103e95780632eb2c2d6146104175780632f2ff15d1461043757806336568abe146104575780633b1475a7146104775780634cc157df1461048e5780634e1273f4146104d0578063572b6c05146104fd578063600dd5ea1461051d5780636b20c4541461053d5780636f4f28371461055d5780637e54523c1461057d57806384b0196e1461059d5780638da5cb5b146105c55780639010d07c146105da57806391d14854146105fa575b600080fd5b34801561027a57600080fd5b5061028e610289366004614248565b6109e7565b6040519081526020015b60405180910390f35b3480156102ad57600080fd5b506102c16102bc366004614288565b610a83565b6040519015158152602001610298565b3480156102dd57600080fd5b506102e6610ac9565b60405161029891906142f5565b3480156102ff57600080fd5b5061019954610314906001600160a01b031681565b6040516001600160a01b039091168152602001610298565b34801561033857600080fd5b506102e6610347366004614315565b610b58565b34801561035857600080fd5b5061036c61036736600461432e565b610bfb565b005b34801561037a57600080fd5b5061036c6103893660046143fe565b610caf565b34801561039a57600080fd5b5061036c6103a9366004614248565b610d0a565b3480156103ba57600080fd5b5061028e6103c9366004614315565b610db0565b3480156103da57600080fd5b50610193546102c19060ff1681565b3480156103f557600080fd5b50610409610404366004614444565b610dc5565b604051610298929190614466565b34801561042357600080fd5b5061036c610432366004614518565b610e02565b34801561044357600080fd5b5061036c6104523660046145c1565b610e60565b34801561046357600080fd5b5061036c6104723660046145c1565b610e81565b34801561048357600080fd5b5061028e6101985481565b34801561049a57600080fd5b506104ae6104a9366004614315565b610f0b565b604080516001600160a01b03909316835261ffff909116602083015201610298565b3480156104dc57600080fd5b506104f06104eb36600461465f565b610f7b565b60405161029891906146f4565b34801561050957600080fd5b506102c161051836600461432e565b61109c565b34801561052957600080fd5b5061036c610538366004614248565b6110ba565b34801561054957600080fd5b5061036c610558366004614707565b611152565b34801561056957600080fd5b5061036c61057836600461432e565b6111a7565b34801561058957600080fd5b5061036c610598366004614248565b6111fe565b3480156105a957600080fd5b506105b261126a565b604051610298979695949392919061477a565b3480156105d157600080fd5b50610314611308565b3480156105e657600080fd5b506103146105f5366004614444565b611340565b34801561060657600080fd5b506102c16106153660046145c1565b611360565b34801561062657600080fd5b5061036c61063536600461482b565b61138b565b34801561064657600080fd5b506102e66113aa565b61036c61065d36600461486c565b6113b8565b34801561066e57600080fd5b5061036c61067d3660046148dd565b61153d565b34801561068e57600080fd5b5060405160018152602001610298565b3480156106aa57600080fd5b5061028e600081565b3480156106bf57600080fd5b5061036c6106ce366004614920565b6115f1565b3480156106df57600080fd5b506106f36106ee366004614957565b611603565b60405161029891906149cb565b34801561070c57600080fd5b5061036c61071b366004614a2f565b61177f565b34801561072c57600080fd5b5061074061073b36600461486c565b611809565b6040805192151583526001600160a01b03909116602083015201610298565b34801561076b57600080fd5b5061019b5461019c546001600160a01b03909116906001600160801b03166104ae565b34801561079a57600080fd5b5061036c6107a9366004614a90565b611860565b3480156107ba57600080fd5b5061028e6107c9366004614315565b6101a16020526000908152604090205481565b3480156107e857600080fd5b5061028e6107f7366004614315565b6118ca565b34801561080857600080fd5b506b546f6b656e4552433131353560a01b61028e565b34801561082a57600080fd5b5061036c6118e2565b34801561083f57600080fd5b5061019a5461019c546001600160a01b0390911690600160801b90046001600160801b03166104ae565b34801561087557600080fd5b5061036c6108843660046145c1565b611940565b34801561089557600080fd5b5061036c6108a4366004614ac8565b61195c565b3480156108b557600080fd5b5061040961019a5461019d546001600160a01b0390911691565b3480156108db57600080fd5b506102e6611d14565b3480156108f057600080fd5b506102c16108ff366004614bda565b6001600160a01b0391821660009081526101626020908152604080832093909416825291909152205460ff1690565b34801561093a57600080fd5b50610314610949366004614315565b6101a2602052600090815260409020546001600160a01b031681565b34801561097157600080fd5b5061019a54610314906001600160a01b031681565b34801561099257600080fd5b5061036c6109a1366004614c04565b611d22565b3480156109b257600080fd5b5061019e5460ff166040516102989190614c7e565b3480156109d357600080fd5b5061036c6109e2366004614ca6565b611d79565b60006001600160a01b038316610a575760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b60648201526084015b60405180910390fd5b506000818152610161602090815260408083206001600160a01b03861684529091529020545b92915050565b6000610a8e82611dce565b80610aa957506001600160e01b03198216636cdb3d1360e11b145b80610a7d57506001600160e01b0319821663152a902d60e11b1492915050565b6101958054610ad790614cd9565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0390614cd9565b8015610b505780601f10610b2557610100808354040283529160200191610b50565b820191906000526020600020905b815481529060010190602001808311610b3357829003601f168201915b505050505081565b600081815261019460205260409020805460609190610b7690614cd9565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba290614cd9565b8015610bef5780601f10610bc457610100808354040283529160200191610bef565b820191906000526020600020905b815481529060010190602001808311610bd257829003601f168201915b50505050509050919050565b6000610c0681611e0e565b610c11600083611360565b610c5b5760405162461bcd60e51b815260206004820152601b60248201527a3732bb9037bbb732b9103737ba1036b7b23ab6329030b236b4b71760291b6044820152606401610a4e565b61019780546001600160a01b038481166001600160a01b0319831681179093556040519116919082907f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d7690600090a3505050565b610cb7611e22565b610cd4576040516318c4c13760e21b815260040160405180910390fd5b6101935460ff1615610cfc576040516393dafeb760e01b815260048101839052602401610a4e565b610d068282611e3e565b5050565b6000610d1581611e0e565b612710821115610d375760405162461bcd60e51b8152600401610a4e90614d13565b61019c80546001600160801b03166001600160401b038416600160801b0217905561019a80546001600160a01b0319166001600160a01b0385169081179091556040518381527fe2497bd806ec41a6e0dd992c29a72efc0ef8fec9092d1978fd4a1e00b2f18304906020015b60405180910390a2505050565b600090815260fd602052604090206001015490565b600080600080610dd486610f0b565b90945084925061ffff169050612710610ded8287614d52565b610df79190614d69565b925050509250929050565b610e0a611eaa565b6001600160a01b0316856001600160a01b03161480610e305750610e30856108ff611eaa565b610e4c5760405162461bcd60e51b8152600401610a4e90614d8b565b610e598585858585611eb4565b5050505050565b610e6982610db0565b610e7281611e0e565b610e7c8383612067565b505050565b610e89611eaa565b6001600160a01b0316816001600160a01b031614610f015760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610a4e565b610d06828261208a565b60008181526101a360209081526040808320815180830190925280546001600160a01b031680835260019091015492820192909252829115610f535780516020820151610f71565b61019b5461019c546001600160a01b03909116906001600160801b03165b9250925050915091565b60608151835114610fe05760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610a4e565b600083516001600160401b03811115610ffb57610ffb614349565b604051908082528060200260200182016040528015611024578160200160208202803683370190505b50905060005b84518110156110945761106f85828151811061104857611048614dd9565b602002602001015185838151811061106257611062614dd9565b60200260200101516109e7565b82828151811061108157611081614dd9565b602090810291909101015260010161102a565b509392505050565b6001600160a01b031660009081526099602052604090205460ff1690565b60006110c581611e0e565b6127108211156110e75760405162461bcd60e51b8152600401610a4e90614def565b61019b80546001600160a01b0319166001600160a01b03851690811790915561019c80546001600160801b0319166001600160801b0385161790556040518381527f90d7ec04bcb8978719414f82e52e4cb651db41d0e6f8cea6118c2191e6183adb90602001610da3565b61115a611eaa565b6001600160a01b0316836001600160a01b031614806111805750611180836108ff611eaa565b61119c5760405162461bcd60e51b8152600401610a4e90614e1b565b610e7c8383836120ad565b60006111b281611e0e565b61019980546001600160a01b0319166001600160a01b0384169081179091556040517f299d17e95023f496e0ffc4909cff1a61f74bb5eb18de6f900f4155bfa1b3b33390600090a25050565b600061120981611e0e565b61019d82905561019a80546001600160a01b0319166001600160a01b0385161790556040517ff8086cee80709bd44c82f89dbca54115ebd05e840a88ab81df9cf5be9754eb639061125d9085908590614466565b60405180910390a1505050565b6000606080600080600060606001546000801b14801561128a5750600254155b6112ce5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606401610a4e565b6112d661224b565b6112de6122dd565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b610197546000906113239082906001600160a01b0316611360565b61132d5750600090565b610197546001600160a01b03165b905090565b600082815261012f6020526040812061135990836122ec565b9392505050565b600091825260fd602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600061139681611e0e565b61019f6113a4838583614ec2565b50505050565b6101968054610ad790614cd9565b6113c06122f8565b60006113cd848484612351565b905060006113de602086018661432e565b90506000600019866080013503611410575061019880549060019060006114058385614f7b565b9091555061143d9050565b610198548660800135106114365760405162461bcd60e51b8152600401610a4e90614f8e565b5060808501355b600061144f604088016020890161432e565b6001600160a01b0316146114bf57604051806040016040528087602001602081019061147b919061432e565b6001600160a01b03908116825260408981013560209384015260008581526101a3845220835181546001600160a01b03191692169190911781559101516001909101555b6114db826114d060a0890189614fb2565b848a60c001356124f1565b6114e4866125cd565b80826001600160a01b0316846001600160a01b03167f0b35afaf155daeef41cc46df86f058df2855c57d30ab134647a6b587e7cc8c39896040516115289190615066565b60405180910390a4505050610e7c6001603555565b600061154881611e0e565b61271082111561156a5760405162461bcd60e51b8152600401610a4e90614def565b6040805180820182526001600160a01b03858116808352602080840187815260008a81526101a38352869020945185546001600160a01b031916941693909317845591516001909301929092559151848152909186917f7365cf4122f072a3365c20d54eff9b38d73c096c28e1892ec8f5b0e403a0f12d910160405180910390a350505050565b610d066115fc611eaa565b838361283d565b6060816001600160401b0381111561161d5761161d614349565b60405190808252806020026020018201604052801561165057816020015b606081526020019060019003908161163b5790505b509050600061165d611eaa565b9050336001600160a01b038216141560005b848110156117765781156116ee576116cc3087878481811061169357611693614dd9565b90506020028101906116a59190614fb2565b866040516020016116b893929190615181565b60405160208183030381529060405261291e565b8482815181106116de576116de614dd9565b602002602001018190525061176e565b6117503087878481811061170457611704614dd9565b90506020028101906117169190614fb2565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061291e92505050565b84828151811061176257611762614dd9565b60200260200101819052505b60010161166f565b50505092915050565b6117876122f8565b60008051602061584883398151915261179f81611e0e565b600060001986036117cb575061019880549060019060006117c08385614f7b565b909155506117f09050565b6101985486106117ed5760405162461bcd60e51b8152600401610a4e90614f8e565b50845b6117fd87868684876124f1565b5050610e596001603555565b6000806000611819868686612943565b61016087013560009081526101a0602052604090205490915060ff16158015611855575061185560008051602061584883398151915282611360565b969095509350505050565b600061186b81611e0e565b61019e805483919060ff19166001838181111561188a5761188a614c68565b02179055507fd246da9440709ce0dd3f4fd669abc85ada012ab9774b8ecdcc5059ba1486b9c1826040516118be9190614c7e565b60405180910390a15050565b600081815261012f60205260408120610a7d906129a7565b6118ea611e22565b611907576040516318c4c13760e21b815260040160405180910390fd5b610193805460ff191660011790556040517feef043febddf4e1d1cf1f72ff1407b84e036e805aa0934418cb82095da8d716490600090a1565b61194982610db0565b61195281611e0e565b610e7c838361208a565b600054610100900460ff161580801561197c5750600054600160ff909116105b8061199d575061198b306129b1565b15801561199d575060005460ff166001145b611a005760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610a4e565b6000805460ff191660011790558015611a23576000805461ff0019166101001790555b611a2b6129c0565b611a726040518060400160405280600c81526020016b546f6b656e4552433131353560a01b815250604051806040016040528060018152602001603160f81b8152506129f1565b611a7b87612a22565b611a9360405180602001604052806000815250612a5a565b610195611aa08b826151a2565b50610196611aae8a826151a2565b5061019b80546001600160a01b03199081166001600160a01b038881169190911790925561019c80546001600160801b0319166001600160801b03881617905561019a80548216858416179055610199805490911691881691909117905561019f611b1989826151a2565b50612710836001600160801b03161115611b455760405162461bcd60e51b8152600401610a4e90614d13565b61019c80546001600160801b03858116600160801b02911617905561019e805460ff1916905561019780546001600160a01b0319166001600160a01b038d16179055611b9260008c612a8a565b611baa6000805160206158488339815191528c612a8a565b611bc26000805160206157c18339815191528c612a8a565b611bdb6000805160206157c18339815191526000612a8a565b611bf36000805160206158018339815191528c612a8a565b611c0b60008051602061580183398151915280612a94565b6040516001600160a01b038716907f299d17e95023f496e0ffc4909cff1a61f74bb5eb18de6f900f4155bfa1b3b33390600090a2816001600160a01b03167fe2497bd806ec41a6e0dd992c29a72efc0ef8fec9092d1978fd4a1e00b2f1830484604051611c78919061525b565b60405180910390a2846001600160a01b03167f90d7ec04bcb8978719414f82e52e4cb651db41d0e6f8cea6118c2191e6183adb85604051611cb9919061525b565b60405180910390a28015611d07576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050505050565b61019f8054610ad790614cd9565b611d2a611eaa565b6001600160a01b0316856001600160a01b03161480611d505750611d50856108ff611eaa565b611d6c5760405162461bcd60e51b8152600401610a4e90614d8b565b610e598585858585612ae7565b611d81611eaa565b6001600160a01b0316836001600160a01b03161480611da75750611da7836108ff611eaa565b611dc35760405162461bcd60e51b8152600401610a4e90614e1b565b610e7c838383612c1e565b60006001600160e01b03198216636cdb3d1360e11b1480611dff57506001600160e01b031982166303a24d0760e21b145b80610a7d5750610a7d82612d3a565b611e1f81611e1a611eaa565b612d5f565b50565b600061133b600080516020615801833981519152610615611eaa565b8051600003611e605760405163a094836b60e01b815260040160405180910390fd5b600082815261019460205260409020611e7982826151a2565b506040518281527ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce7906020016118be565b600061133b612db8565b8151835114611ed55760405162461bcd60e51b8152600401610a4e9061526f565b6001600160a01b038416611efb5760405162461bcd60e51b8152600401610a4e906152b7565b6000611f05611eaa565b9050611f15818787878787612ddd565b60005b8451811015611ff9576000858281518110611f3557611f35614dd9565b602002602001015190506000858381518110611f5357611f53614dd9565b6020908102919091018101516000848152610161835260408082206001600160a01b038e168352909352919091205490915081811015611fa55760405162461bcd60e51b8152600401610a4e906152fc565b6000838152610161602090815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290611fe5908490614f7b565b909155505060019093019250611f18915050565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051612049929190615346565b60405180910390a461205f818787878787612fae565b505050505050565b6120718282613110565b600082815261012f60205260409020610e7c9082613197565b61209482826131ac565b600082815261012f60205260409020610e7c9082613231565b6001600160a01b0383166120d35760405162461bcd60e51b8152600401610a4e90615374565b80518251146120f45760405162461bcd60e51b8152600401610a4e9061526f565b60006120fe611eaa565b905061211e81856000868660405180602001604052806000815250612ddd565b60005b83518110156121de57600084828151811061213e5761213e614dd9565b60200260200101519050600084838151811061215c5761215c614dd9565b6020908102919091018101516000848152610161835260408082206001600160a01b038c1683529093529190912054909150818110156121ae5760405162461bcd60e51b8152600401610a4e906153b7565b6000928352610161602090815260408085206001600160a01b038b16865290915290922091039055600101612121565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb868660405161222f929190615346565b60405180910390a46040805160208101909152600090526113a4565b60606003805461225a90614cd9565b80601f016020809104026020016040519081016040528092919081815260200182805461228690614cd9565b80156122d35780601f106122a8576101008083540402835291602001916122d3565b820191906000526020600020905b8154815290600101906020018083116122b657829003601f168201915b5050505050905090565b60606004805461225a90614cd9565b60006113598383613246565b60026035540361234a5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610a4e565b6002603555565b6000806000612361868686611809565b91509150816123a65760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964207369676e617475726560781b6044820152606401610a4e565b426123b9610140880161012089016153fb565b6001600160801b0316111580156123ea5750426123de610160880161014089016153fb565b6001600160801b031610155b6124285760405162461bcd60e51b815260206004820152600f60248201526e1c995c5d595cdd08195e1c1a5c9959608a1b6044820152606401610a4e565b6000612437602088018861432e565b6001600160a01b0316036124835760405162461bcd60e51b81526020600482015260136024820152721c9958da5c1a595b9d081d5b9919599a5b9959606a1b6044820152606401610a4e565b60008660c00135116124c75760405162461bcd60e51b815260206004820152600d60248201526c7a65726f207175616e7469747960981b6044820152606401610a4e565b61016086013560009081526101a060205260409020805460ff191660011790559150509392505050565b600082815261019460205260409020805461250b90614cd9565b9050600003612554576125548285858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611e3e92505050565b61256f85838360405180602001604052806000815250613270565b81856001600160a01b03167f04133ee4cb027e1c5fce5e3481289278a93bd16a65a3b65b428a6d239e706bfb6101946000868152602001908152602001600020846040516125be929190615416565b60405180910390a35050505050565b8060e00135600003612610573415611e1f5760405162461bcd60e51b81526020600482015260066024820152652156616c756560d01b6044820152606401610a4e565b600061262460c083013560e0840135614d52565b90506000600161019e5460ff16600181111561264257612642614c68565b146126785761019c546127109061266990600160801b90046001600160801b031684614d52565b6126739190614d69565b61267d565b61019d545b9050808210156126ce5760405162461bcd60e51b815260206004820152601c60248201527b7072696365206c657373207468616e20706c6174666f726d2066656560201b6044820152606401610a4e565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6126f56101208501610100860161432e565b6001600160a01b0316036127505781341461274b5760405162461bcd60e51b815260206004820152601660248201527536bab9ba1039b2b732103a37ba30b610383934b1b29760511b6044820152606401610a4e565b612793565b34156127935760405162461bcd60e51b81526020600482015260126024820152716d73672076616c7565206e6f74207a65726f60701b6044820152606401610a4e565b6000806127a6608086016060870161432e565b6001600160a01b0316146127c9576127c4608085016060860161432e565b6127d7565b610199546001600160a01b03165b90506128096127ee6101208601610100870161432e565b6127f6611eaa565b61019a546001600160a01b031685613386565b6113a461281e6101208601610100870161432e565b612826611eaa565b8361283186886154ad565b613386565b6001603555565b816001600160a01b0316836001600160a01b0316036128b05760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610a4e565b6001600160a01b0383811660008181526101626020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b60606113598383604051806060016040528060278152602001615821602791396133cc565b600061299f83838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612999925061298d9150889050613444565b805190602001206135d0565b906135fd565b949350505050565b6000610a7d825490565b6001600160a01b03163b151590565b600054610100900460ff166129e75760405162461bcd60e51b8152600401610a4e906154c0565b6129ef613619565b565b600054610100900460ff16612a185760405162461bcd60e51b8152600401610a4e906154c0565b610d068282613640565b600054610100900460ff16612a495760405162461bcd60e51b8152600401610a4e906154c0565b612a5161368f565b611e1f816136b6565b600054610100900460ff16612a815760405162461bcd60e51b8152600401610a4e906154c0565b611e1f8161373b565b610d068282612067565b6000612a9f83610db0565b600084815260fd6020526040808220600101859055519192508391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b6001600160a01b038416612b0d5760405162461bcd60e51b8152600401610a4e906152b7565b6000612b17611eaa565b90506000612b248561376b565b90506000612b318561376b565b9050612b41838989858589612ddd565b6000868152610161602090815260408083206001600160a01b038c16845290915290205485811015612b855760405162461bcd60e51b8152600401610a4e906152fc565b6000878152610161602090815260408083206001600160a01b038d8116855292528083208985039055908a16825281208054889290612bc5908490614f7b565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816916000805160206157e1833981519152910160405180910390a4612c13848a8a8a8a8a6137b6565b505050505050505050565b6001600160a01b038316612c445760405162461bcd60e51b8152600401610a4e90615374565b6000612c4e611eaa565b90506000612c5b8461376b565b90506000612c688461376b565b9050612c8883876000858560405180602001604052806000815250612ddd565b6000858152610161602090815260408083206001600160a01b038a16845290915290205484811015612ccc5760405162461bcd60e51b8152600401610a4e906153b7565b6000868152610161602090815260408083206001600160a01b038b81168086529184528285208a8703905582518b81529384018a90529092908816916000805160206157e1833981519152910160405180910390a46040805160208101909152600090525b50505050505050565b60006001600160e01b03198216635a05180f60e01b1480610a7d5750610a7d82613878565b612d698282611360565b610d0657612d76816138ad565b612d818360206138bf565b604051602001612d9292919061550b565b60408051601f198184030181529082905262461bcd60e51b8252610a4e916004016142f5565b6000612dc33361109c565b15612dd5575060131936013560601c90565b503390565b90565b612df66000805160206157c18339815191526000611360565b158015612e0b57506001600160a01b03851615155b8015612e1f57506001600160a01b03841615155b15612eb257612e3c6000805160206157c183398151915286611360565b80612e5a5750612e5a6000805160206157c183398151915285611360565b612eb25760405162461bcd60e51b8152602060048201526024808201527f7265737472696374656420746f205452414e534645525f524f4c4520686f6c6460448201526332b9399760e11b6064820152608401610a4e565b6001600160a01b038516612f315760005b8351811015612f2f57828181518110612ede57612ede614dd9565b60200260200101516101a16000868481518110612efd57612efd614dd9565b602002602001015181526020019081526020016000206000828254612f229190614f7b565b9091555050600101612ec3565b505b6001600160a01b03841661205f5760005b8351811015612d3157828181518110612f5d57612f5d614dd9565b60200260200101516101a16000868481518110612f7c57612f7c614dd9565b602002602001015181526020019081526020016000206000828254612fa191906154ad565b9091555050600101612f42565b612fc0846001600160a01b03166129b1565b1561205f5760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190612ff9908990899088908890889060040161557a565b6020604051808303816000875af1925050508015613034575060408051601f3d908101601f19168201909252613031918101906155d8565b60015b6130e0576130406155f5565b806308c379a0036130795750613054615610565b8061305f575061307b565b8060405162461bcd60e51b8152600401610a4e91906142f5565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e2d455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610a4e565b6001600160e01b0319811663bc197c8160e01b14612d315760405162461bcd60e51b8152600401610a4e90615699565b61311a8282611360565b610d0657600082815260fd602090815260408083206001600160a01b03851684529091529020805460ff19166001179055613153611eaa565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000611359836001600160a01b038416613a5a565b6131b68282611360565b15610d0657600082815260fd602090815260408083206001600160a01b03851684529091529020805460ff191690556131ed611eaa565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b6000611359836001600160a01b038416613aa9565b600082600001828154811061325d5761325d614dd9565b9060005260206000200154905092915050565b6001600160a01b0384166132d05760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610a4e565b60006132da611eaa565b905060006132e78561376b565b905060006132f48561376b565b905061330583600089858589612ddd565b6000868152610161602090815260408083206001600160a01b038b16845290915281208054879290613338908490614f7b565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716916000805160206157e1833981519152910160405180910390a4612d31836000898989896137b6565b80156113a45773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed196001600160a01b038516016133c0576133bb8282613b9c565b6113a4565b6113a484848484613c14565b6060600080856001600160a01b0316856040516133e991906156e1565b600060405180830381855af49150503d8060008114613424576040519150601f19603f3d011682016040523d82523d6000602084013e613429565b606091505b509150915061343a86838387613c67565b9695505050505050565b60607fc7a95ef88f83fa833ccfce325157b7111633b181b6a27181b86415d8d501134d613474602084018461432e565b613484604085016020860161432e565b6040850135613499608087016060880161432e565b60808701356134ab60a0890189614fb2565b6040516134b99291906156fd565b6040805191829003822060208301989098526001600160a01b03968716908201529385166060850152608084019290925290921660a082015260c081019190915260e08101919091526101000160408051601f1981840301815291905260c083013560e08401356135326101208601610100870161432e565b613544610140870161012088016153fb565b613556610160880161014089016153fb565b6040805160208101969096528501939093526001600160a01b0390911660608401526001600160801b0390811660808401521660a082015261016084013560c082015260e00160408051601f19818403018152908290526135ba929160200161570d565b6040516020818303038152906040529050919050565b6000610a7d6135dd613cde565b8360405161190160f01b8152600281019290925260228201526042902090565b600080600061360c8585613ce8565b9150915061109481613d2d565b600054610100900460ff166128365760405162461bcd60e51b8152600401610a4e906154c0565b600054610100900460ff166136675760405162461bcd60e51b8152600401610a4e906154c0565b600361367383826151a2565b50600461368082826151a2565b50506000600181905560025550565b600054610100900460ff166129ef5760405162461bcd60e51b8152600401610a4e906154c0565b600054610100900460ff166136dd5760405162461bcd60e51b8152600401610a4e906154c0565b60005b8151811015610d065760016099600084848151811061370157613701614dd9565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790556001016136e0565b600054610100900460ff166137625760405162461bcd60e51b8152600401610a4e906154c0565b611e1f81613e72565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106137a5576137a5614dd9565b602090810291909101015292915050565b6137c8846001600160a01b03166129b1565b1561205f5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190613801908990899088908890889060040161573c565b6020604051808303816000875af192505050801561383c575060408051601f3d908101601f19168201909252613839918101906155d8565b60015b613848576130406155f5565b6001600160e01b0319811663f23a6e6160e01b14612d315760405162461bcd60e51b8152600401610a4e90615699565b60006001600160e01b03198216637965db0b60e01b1480610a7d57506301ffc9a760e01b6001600160e01b0319831614610a7d565b6060610a7d6001600160a01b03831660145b606060006138ce836002614d52565b6138d9906002614f7b565b6001600160401b038111156138f0576138f0614349565b6040519080825280601f01601f19166020018201604052801561391a576020820181803683370190505b509050600360fc1b8160008151811061393557613935614dd9565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061396457613964614dd9565b60200101906001600160f81b031916908160001a9053506000613988846002614d52565b613993906001614f7b565b90505b6001811115613a0b576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106139c7576139c7614dd9565b1a60f81b8282815181106139dd576139dd614dd9565b60200101906001600160f81b031916908160001a90535060049490941c93613a0481615776565b9050613996565b5083156113595760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610a4e565b6000818152600183016020526040812054613aa157508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610a7d565b506000610a7d565b60008181526001830160205260408120548015613b92576000613acd6001836154ad565b8554909150600090613ae1906001906154ad565b9050818114613b46576000866000018281548110613b0157613b01614dd9565b9060005260206000200154905080876000018481548110613b2457613b24614dd9565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613b5757613b5761578d565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610a7d565b6000915050610a7d565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613be9576040519150601f19603f3d011682016040523d82523d6000602084013e613bee565b606091505b5050905080610e7c578282604051635fdc4ec160e11b8152600401610a4e929190614466565b816001600160a01b0316836001600160a01b031603156113a457306001600160a01b03841603613c52576133bb6001600160a01b0385168383613e7f565b6113a46001600160a01b038516848484613ed5565b60608315613cd4578251600003613ccd57613c81856129b1565b613ccd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a4e565b508161299f565b61299f8383613f0d565b600061133b613f1d565b6000808251604103613d1e5760208301516040840151606085015160001a613d1287828585613f91565b94509450505050613d26565b506000905060025b9250929050565b6000816004811115613d4157613d41614c68565b03613d495750565b6001816004811115613d5d57613d5d614c68565b03613da55760405162461bcd60e51b815260206004820152601860248201527745434453413a20696e76616c6964207369676e617475726560401b6044820152606401610a4e565b6002816004811115613db957613db9614c68565b03613e065760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610a4e565b6003816004811115613e1a57613e1a614c68565b03611e1f5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610a4e565b610163610d0682826151a2565b610e7c8363a9059cbb60e01b8484604051602401613e9e929190614466565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261404b565b6040516001600160a01b03808516602483015283166044820152606481018290526113a49085906323b872dd60e01b90608401613e9e565b81511561305f5781518083602001fd5b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f613f4861411d565b613f50614176565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6000806fa2a8918ca85bafe22016d0b997e4df60600160ff1b03831115613fbe5750600090506003614042565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015614012573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661403b57600060019250925050614042565b9150600090505b94509492505050565b60006140a0826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166141a79092919063ffffffff16565b805190915015610e7c57808060200190518101906140be91906157a3565b610e7c5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a4e565b60008061412861224b565b80519091501561413f578051602090910120919050565b600154801561414e5792915050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4709250505090565b6000806141816122dd565b805190915015614198578051602090910120919050565b600254801561414e5792915050565b606061299f848460008585600080866001600160a01b031685876040516141ce91906156e1565b60006040518083038185875af1925050503d806000811461420b576040519150601f19603f3d011682016040523d82523d6000602084013e614210565b606091505b509150915061422187838387613c67565b979650505050505050565b80356001600160a01b038116811461424357600080fd5b919050565b6000806040838503121561425b57600080fd5b6142648361422c565b946020939093013593505050565b6001600160e01b031981168114611e1f57600080fd5b60006020828403121561429a57600080fd5b813561135981614272565b60005b838110156142c05781810151838201526020016142a8565b50506000910152565b600081518084526142e18160208601602086016142a5565b601f01601f19169290920160200192915050565b60208152600061135960208301846142c9565b6001600160a01b03169052565b60006020828403121561432757600080fd5b5035919050565b60006020828403121561434057600080fd5b6113598261422c565b634e487b7160e01b600052604160045260246000fd5b601f8201601f191681016001600160401b038111828210171561438457614384614349565b6040525050565b600082601f83011261439c57600080fd5b81356001600160401b038111156143b5576143b5614349565b6040516143cc601f8301601f19166020018261435f565b8181528460208386010111156143e157600080fd5b816020850160208301376000918101602001919091529392505050565b6000806040838503121561441157600080fd5b8235915060208301356001600160401b0381111561442e57600080fd5b61443a8582860161438b565b9150509250929050565b6000806040838503121561445757600080fd5b50508035926020909101359150565b6001600160a01b03929092168252602082015260400190565b60006001600160401b0382111561449857614498614349565b5060051b60200190565b600082601f8301126144b357600080fd5b813560206144c08261447f565b6040516144cd828261435f565b80915083815260208101915060208460051b8701019350868411156144f157600080fd5b602086015b8481101561450d57803583529183019183016144f6565b509695505050505050565b600080600080600060a0868803121561453057600080fd5b6145398661422c565b94506145476020870161422c565b935060408601356001600160401b038082111561456357600080fd5b61456f89838a016144a2565b9450606088013591508082111561458557600080fd5b61459189838a016144a2565b935060808801359150808211156145a757600080fd5b506145b48882890161438b565b9150509295509295909350565b600080604083850312156145d457600080fd5b823591506145e46020840161422c565b90509250929050565b600082601f8301126145fe57600080fd5b8135602061460b8261447f565b604051614618828261435f565b80915083815260208101915060208460051b87010193508684111561463c57600080fd5b602086015b8481101561450d576146528161422c565b8352918301918301614641565b6000806040838503121561467257600080fd5b82356001600160401b038082111561468957600080fd5b614695868387016145ed565b935060208501359150808211156146ab57600080fd5b5061443a858286016144a2565b60008151808452602080850194506020840160005b838110156146e9578151875295820195908201906001016146cd565b509495945050505050565b60208152600061135960208301846146b8565b60008060006060848603121561471c57600080fd5b6147258461422c565b925060208401356001600160401b038082111561474157600080fd5b61474d878388016144a2565b9350604086013591508082111561476357600080fd5b50614770868287016144a2565b9150509250925092565b60ff60f81b8816815260e06020820152600061479960e08301896142c9565b82810360408401526147ab81896142c9565b606084018890526001600160a01b038716608085015260a0840186905283810360c085015290506147dc81856146b8565b9a9950505050505050505050565b60008083601f8401126147fc57600080fd5b5081356001600160401b0381111561481357600080fd5b602083019150836020828501011115613d2657600080fd5b6000806020838503121561483e57600080fd5b82356001600160401b0381111561485457600080fd5b614860858286016147ea565b90969095509350505050565b60008060006040848603121561488157600080fd5b83356001600160401b038082111561489857600080fd5b9085019061018082880312156148ad57600080fd5b909350602085013590808211156148c357600080fd5b506148d0868287016147ea565b9497909650939450505050565b6000806000606084860312156148f257600080fd5b833592506149026020850161422c565b9150604084013590509250925092565b8015158114611e1f57600080fd5b6000806040838503121561493357600080fd5b61493c8361422c565b9150602083013561494c81614912565b809150509250929050565b6000806020838503121561496a57600080fd5b82356001600160401b038082111561498157600080fd5b818501915085601f83011261499557600080fd5b8135818111156149a457600080fd5b8660208260051b85010111156149b957600080fd5b60209290920196919550909350505050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b82811015614a2257603f19888603018452614a108583516142c9565b945092850192908501906001016149f4565b5092979650505050505050565b600080600080600060808688031215614a4757600080fd5b614a508661422c565b94506020860135935060408601356001600160401b03811115614a7257600080fd5b614a7e888289016147ea565b96999598509660600135949350505050565b600060208284031215614aa257600080fd5b81356002811061135957600080fd5b80356001600160801b038116811461424357600080fd5b6000806000806000806000806000806101408b8d031215614ae857600080fd5b614af18b61422c565b995060208b01356001600160401b0380821115614b0d57600080fd5b614b198e838f0161438b565b9a5060408d0135915080821115614b2f57600080fd5b614b3b8e838f0161438b565b995060608d0135915080821115614b5157600080fd5b614b5d8e838f0161438b565b985060808d0135915080821115614b7357600080fd5b50614b808d828e016145ed565b965050614b8f60a08c0161422c565b9450614b9d60c08c0161422c565b9350614bab60e08c01614ab1565b9250614bba6101008c01614ab1565b9150614bc96101208c0161422c565b90509295989b9194979a5092959850565b60008060408385031215614bed57600080fd5b614bf68361422c565b91506145e46020840161422c565b600080600080600060a08688031215614c1c57600080fd5b614c258661422c565b9450614c336020870161422c565b9350604086013592506060860135915060808601356001600160401b03811115614c5c57600080fd5b6145b48882890161438b565b634e487b7160e01b600052602160045260246000fd5b6020810160028310614ca057634e487b7160e01b600052602160045260246000fd5b91905290565b600080600060608486031215614cbb57600080fd5b614cc48461422c565b95602085013595506040909401359392505050565b600181811c90821680614ced57607f821691505b602082108103614d0d57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252600f908201526e65786365656473204d41585f42505360881b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610a7d57610a7d614d3c565b600082614d8657634e487b7160e01b600052601260045260246000fd5b500490565b6020808252602e908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526d195c881bdc88185c1c1c9bdd995960921b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60208082526012908201527165786365656420726f79616c74792062707360701b604082015260600190565b6020808252602a908201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f726040820152691030b8383937bb32b21760b11b606082015260800190565b601f821115610e7c576000816000526020600020601f850160051c81016020861015614e8e5750805b601f850160051c820191505b8181101561205f57828155600101614e9a565b600019600383901b1c191660019190911b1790565b6001600160401b03831115614ed957614ed9614349565b614eed83614ee78354614cd9565b83614e65565b6000601f841160018114614f1b5760008515614f095750838201355b614f138682614ead565b845550610e59565b600083815260209020601f19861690835b82811015614f4c5786850135825560209485019460019092019101614f2c565b5086821015614f695760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b80820180821115610a7d57610a7d614d3c565b6020808252600a90820152691a5b9d985b1a59081a5960b21b604082015260600190565b6000808335601e19843603018112614fc957600080fd5b8301803591506001600160401b03821115614fe357600080fd5b602001915036819003821315613d2657600080fd5b6000808335601e1984360301811261500f57600080fd5b83016020810192503590506001600160401b0381111561502e57600080fd5b803603821315613d2657600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6020815261507f6020820161507a8461422c565b614308565b600061508d6020840161422c565b61509a6040840182614308565b50604083013560608301526150b16060840161422c565b6150be6080840182614308565b50608083013560a08301526150d660a0840184614ff8565b6101808060c08601526150ee6101a08601838561503d565b925060c086013560e0860152610100915060e08601358286015261511382870161422c565b915061012061512481870184614308565b61512f818801614ab1565b925050610140615149818701846001600160801b03169052565b615154818801614ab1565b92505061016061516e818701846001600160801b03169052565b9590950135939094019290925250919050565b8284823760609190911b6001600160601b0319169101908152601401919050565b81516001600160401b038111156151bb576151bb614349565b6151cf816151c98454614cd9565b84614e65565b602080601f8311600181146151fe57600084156151ec5750858301515b6151f68582614ead565b86555061205f565b600085815260208120601f198616915b8281101561522d5788860151825594840194600190910190840161520e565b508582101561524b5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160801b0391909116815260200190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b60408152600061535960408301856146b8565b828103602084015261536b81856146b8565b95945050505050565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526024908201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604082015263616e636560e01b606082015260800190565b60006020828403121561540d57600080fd5b61135982614ab1565b60408152600080845461542881614cd9565b806040860152606060018084166000811461544a576001811461546657615498565b60ff1985166060890152606084151560051b8901019550615498565b8960005260208060002060005b8681101561548e5781548b8201870152908401908201615473565b8a01606001975050505b50505050506020929092019290925292915050565b81810381811115610a7d57610a7d614d3c565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b81526000835161553d8160178501602088016142a5565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161556e8160288401602088016142a5565b01602801949350505050565b6001600160a01b0386811682528516602082015260a0604082018190526000906155a6908301866146b8565b82810360608401526155b881866146b8565b905082810360808401526155cc81856142c9565b98975050505050505050565b6000602082840312156155ea57600080fd5b815161135981614272565b600060033d1115612dda5760046000803e5060005160e01c90565b600060443d101561561e5790565b6040516003193d81016004833e81513d6001600160401b03816024840111818411171561564d57505050505090565b82850191508151818111156156655750505050505090565b843d870101602082850101111561567f5750505050505090565b61568e6020828601018761435f565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b600082516156f38184602087016142a5565b9190910192915050565b8183823760009101908152919050565b6000835161571f8184602088016142a5565b8351908301906157338183602088016142a5565b01949350505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090614221908301846142c9565b60008161578557615785614d3c565b506000190190565b634e487b7160e01b600052603160045260246000fd5b6000602082840312156157b557600080fd5b81516113598161491256fe8502233096d909befbda0999bb8ea2f3a6be3c138b9fbf003752a4c8bce86f6cc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f626bd6b5318a46e5fff572d5e4258a20774aab40cc35ac7680654b9081fcc82f80416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65649f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6a2646970667358221220fb948f045caf3c185871e81450045b58315dc24d853a875f1a5cfb70879d0c2864736f6c63430008170033