[ { "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" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "TokenMigrateAlreadyMigrated", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "tokenOwner", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "TokenMigrateInvalidProof", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "TokenMigrateInvalidTokenId", "type": "error" }, { "inputs": [], "name": "TokenMigrateUnauthorized", "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": "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" } ], "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": "string", "name": "uri", "type": "string" }, { "internalType": "uint256", "name": "price", "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 ITokenERC721.MintRequest", "name": "mintRequest", "type": "tuple" } ], "name": "TokensMintedWithSignature", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "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": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getDefaultRoyaltyInfo", "outputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getPlatformFeeInfo", "outputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint16", "name": "", "type": "uint16" } ], "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": "address", "name": "__originalContract", "type": "address" }, { "internalType": "bytes32", "name": "__ownershipMerkleRoot", "type": "bytes32" }, { "internalType": "string", "name": "_contractURI", "type": "string" } ], "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": "_tokenOwner", "type": "address" }, { "internalType": "uint256", "name": "_tokenId", "type": "uint256" }, { "internalType": "bytes32[]", "name": "_proof", "type": "bytes32[]" } ], "name": "migrate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_to", "type": "address" }, { "internalType": "string", "name": "_uri", "type": "string" } ], "name": "mintTo", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "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": "string", "name": "uri", "type": "string" }, { "internalType": "uint256", "name": "price", "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 ITokenERC721.MintRequest", "name": "_req", "type": "tuple" }, { "internalType": "bytes", "name": "_signature", "type": "bytes" } ], "name": "mintWithSignature", "outputs": [ { "internalType": "uint256", "name": "tokenIdMinted", "type": "uint256" } ], "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": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ownerOf", "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": "tokenId", "type": "uint256" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "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": "bytes32", "name": "_merkleRoot", "type": "bytes32" } ], "name": "setMerkleRoot", "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": "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": "index", "type": "uint256" } ], "name": "tokenByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "tokenOfOwnerByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "transferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "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": "string", "name": "uri", "type": "string" }, { "internalType": "uint256", "name": "price", "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 ITokenERC721.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" } ]
60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b806200004f5750303b1580156200004f575060005460ff166001145b620000b75760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000db576000805461ff0019166101001790555b801562000122576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5061539180620001336000396000f3fe6080604052600436106102695760003560e01c806370a082311161014b57806370a08231146105f95780637cb647591461061957806384b0196e146106395780638da5cb5b146106615780639010d07c1461067657806391d148541461069657806392928e04146106b6578063938e3d7b146106d657806395d89b41146106f65780639bcf7a151461070b578063a0a8e4601461072b578063a217fddf14610747578063a22cb4651461075c578063ac9650d81461077c578063b24f2d39146107a9578063b88d4fde146107d8578063c87b56dd146107f8578063ca15c87314610818578063cb2ef6f714610838578063d111515d1461085a578063d1959f481461086f578063d45573f61461088f578063d547741f146108c5578063de903774146108e5578063e8a3d48514610924578063e985e9c514610939578063eb13554f1461095957600080fd5b806275a3171461026e57806301ffc9a7146102a157806306fdde03146102d1578063079fe40e146102f3578063081812fc1461032c578063095ea7b31461034c57806313af40351461036e578063162094c41461038e57806318160ddd146103ae5780631e7ac488146103c457806323b872dd146103e4578063248a9ca314610404578063274e4a1d146104245780632a55205a1461043f5780632c4510f81461046d5780632f2ff15d146104805780632f745c59146104a057806336568abe146104c05780633b1475a7146104e057806342842e0e146104f757806342966c68146105175780634cc157df146105375780634f6ccce714610579578063600dd5ea146105995780636352211e146105b95780636f4f2837146105d9575b600080fd5b34801561027a57600080fd5b5061028e61028936600461431a565b61097a565b6040519081526020015b60405180910390f35b3480156102ad57600080fd5b506102c16102bc366004614384565b6109a8565b6040519015158152602001610298565b3480156102dd57600080fd5b506102e66109d4565b60405161029891906143f1565b3480156102ff57600080fd5b5061019a54610314906001600160a01b031681565b6040516001600160a01b039091168152602001610298565b34801561033857600080fd5b50610314610347366004614411565b610a67565b34801561035857600080fd5b5061036c61036736600461442a565b610a8f565b005b34801561037a57600080fd5b5061036c610389366004614456565b610ba9565b34801561039a57600080fd5b5061036c6103a936600461453e565b610c5d565b3480156103ba57600080fd5b506101635461028e565b3480156103d057600080fd5b5061036c6103df36600461442a565b610cb8565b3480156103f057600080fd5b5061036c6103ff366004614584565b610d80565b34801561041057600080fd5b5061028e61041f366004614411565b610db1565b34801561043057600080fd5b50610193546102c19060ff1681565b34801561044b57600080fd5b5061045f61045a3660046145c5565b610dc6565b6040516102989291906145e7565b61028e61047b366004614600565b610e03565b34801561048c57600080fd5b5061036c61049b366004614664565b610f2e565b3480156104ac57600080fd5b5061028e6104bb36600461442a565b610f4a565b3480156104cc57600080fd5b5061036c6104db366004614664565b610fe1565b3480156104ec57600080fd5b5061028e6101995481565b34801561050357600080fd5b5061036c610512366004614584565b61105b565b34801561052357600080fd5b5061036c610532366004614411565b611076565b34801561054357600080fd5b50610557610552366004614411565b6110f1565b604080516001600160a01b03909316835261ffff909116602083015201610298565b34801561058557600080fd5b5061028e610594366004614411565b61120d565b3480156105a557600080fd5b5061036c6105b436600461442a565b6112a2565b3480156105c557600080fd5b506103146105d4366004614411565b61133a565b3480156105e557600080fd5b5061036c6105f4366004614456565b61136e565b34801561060557600080fd5b5061028e610614366004614456565b6113c5565b34801561062557600080fd5b5061036c610634366004614411565b61144c565b34801561064557600080fd5b5061064e61147b565b6040516102989796959493929190614694565b34801561066d57600080fd5b50610314611519565b34801561068257600080fd5b506103146106913660046145c5565b611551565b3480156106a257600080fd5b506102c16106b1366004614664565b611569565b3480156106c257600080fd5b5061036c6106d136600461472d565b611594565b3480156106e257600080fd5b5061036c6106f1366004614798565b611ae5565b34801561070257600080fd5b506102e6611b04565b34801561071757600080fd5b5061036c6107263660046147d9565b611b14565b34801561073757600080fd5b5060405160018152602001610298565b34801561075357600080fd5b5061028e600081565b34801561076857600080fd5b5061036c61077736600461480e565b611bc8565b34801561078857600080fd5b5061079c610797366004614880565b611bd3565b60405161029891906148b5565b3480156107b557600080fd5b5061019c5461019d546001600160a01b03909116906001600160801b0316610557565b3480156107e457600080fd5b5061036c6107f3366004614919565b611cbc565b34801561080457600080fd5b506102e6610813366004614411565b611cee565b34801561082457600080fd5b5061028e610833366004614411565b611e31565b34801561084457600080fd5b506b546f6b656e4552433732314d60a01b61028e565b34801561086657600080fd5b5061036c611e48565b34801561087b57600080fd5b5061036c61088a36600461498c565b611ea6565b34801561089b57600080fd5b5061019b5461019d546001600160a01b0390911690600160801b90046001600160801b0316610557565b3480156108d157600080fd5b5061036c6108e0366004614664565b612021565b3480156108f157600080fd5b50610905610900366004614600565b61203d565b6040805192151583526001600160a01b03909116602083015201610298565b34801561093057600080fd5b506102e6612094565b34801561094557600080fd5b506102c16109543660046149e7565b612123565b34801561096557600080fd5b5061019b54610314906001600160a01b031681565b600060008051602061531c83398151915261099481612152565b61099f85858561215c565b95945050505050565b60006109b382612245565b806109ce57506001600160e01b0319821663152a902d60e11b145b92915050565b606061012f80546109e490614a15565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1090614a15565b8015610a5d5780601f10610a3257610100808354040283529160200191610a5d565b820191906000526020600020905b815481529060010190602001808311610a4057829003601f168201915b5050505050905090565b6000610a728261226a565b50600090815261013360205260409020546001600160a01b031690565b6000610a9a8261133a565b9050806001600160a01b0316836001600160a01b031603610b0c5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b0382161480610b285750610b288133612123565b610b9a5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610b03565b610ba4838361228f565b505050565b6000610bb481612152565b610bbf600083611569565b610c095760405162461bcd60e51b815260206004820152601b60248201527a3732bb9037bbb732b9103737ba1036b7b23ab6329030b236b4b71760291b6044820152606401610b03565b61019880546001600160a01b038481166001600160a01b0319831681179093556040519116919082907f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d7690600090a3505050565b610c656122fe565b610c82576040516318c4c13760e21b815260040160405180910390fd5b6101935460ff1615610caa576040516393dafeb760e01b815260048101839052602401610b03565b610cb48282612318565b5050565b6000610cc381612152565b612710821115610d075760405162461bcd60e51b815260206004820152600f60248201526e65786365656473204d41585f42505360881b6044820152606401610b03565b61019d80546001600160801b03166001600160401b038416600160801b0217905561019b80546001600160a01b0319166001600160a01b0385169081179091556040518381527fe2497bd806ec41a6e0dd992c29a72efc0ef8fec9092d1978fd4a1e00b2f18304906020015b60405180910390a2505050565b610d8a338261238b565b610da65760405162461bcd60e51b8152600401610b0390614a4f565b610ba48383836123ea565b600090815260cb602052604090206001015490565b600080600080610dd5866110f1565b90945084925061ffff169050612710610dee8287614ab2565b610df89190614ac9565b925050509250929050565b6000610e0d61254c565b6000610e1a8585856125a5565b90506000610e2b6020870187614456565b9050610e4381610e3e6080890189614aeb565b61215c565b92506000610e576040880160208901614456565b6001600160a01b031614610ec7576040518060400160405280876020016020810190610e839190614456565b6001600160a01b03908116825260408981013560209384015260008781526101a0845220835181546001600160a01b03191692169190911781559101516001909101555b610ed086612700565b82816001600160a01b0316836001600160a01b03167f110d160a1bedeea919a88fbc4b2a9fb61b7e664084391b6ca2740db66fef80fe89604051610f149190614bb6565b60405180910390a45050610f2760018055565b9392505050565b610f3782610db1565b610f4081612152565b610ba483836128d5565b6000610f55836113c5565b8210610fb75760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610b03565b506001600160a01b0391909116600090815261016160209081526040808320938352929052205490565b6001600160a01b03811633146110515760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610b03565b610cb482826128f7565b610ba483838360405180602001604052806000815250611cbc565b611080338261238b565b6110e55760405162461bcd60e51b815260206004820152603060248201527f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760448201526f1b995c881b9bdc88185c1c1c9bdd995960821b6064820152608401610b03565b6110ee81612919565b50565b60008181526101a060209081526040808320815180830190925280546001600160a01b0316825260010154918101919091526101a15482919084108015611140575080516001600160a01b0316155b801561114e57506020810151155b156111ca5761019654604051634cc157df60e01b8152600481018690526001600160a01b0390911690634cc157df906024016040805180830381865afa15801561119c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c09190614cb8565b9250925050915091565b80516001600160a01b0316156111e657805160208201516111c0565b61019c5461019d546001600160a01b03909116906001600160801b03169250925050915091565b60006112196101635490565b821061127c5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610b03565b610163828154811061129057611290614cee565b90600052602060002001549050919050565b60006112ad81612152565b6127108211156112cf5760405162461bcd60e51b8152600401610b0390614d04565b61019c80546001600160a01b0319166001600160a01b03851690811790915561019d80546001600160801b0319166001600160801b0385161790556040518381527f90d7ec04bcb8978719414f82e52e4cb651db41d0e6f8cea6118c2191e6183adb90602001610d73565b600080611346836129ad565b90506001600160a01b0381166109ce5760405162461bcd60e51b8152600401610b0390614d30565b600061137981612152565b61019a80546001600160a01b0319166001600160a01b0384169081179091556040517f299d17e95023f496e0ffc4909cff1a61f74bb5eb18de6f900f4155bfa1b3b33390600090a25050565b60006001600160a01b03821661142f5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610b03565b506001600160a01b03166000908152610132602052604090205490565b6114546129c9565b611471576040516327e8d25560e01b815260040160405180910390fd5b6110ee8161019555565b6000606080600080600060606033546000801b14801561149b5750603454155b6114df5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606401610b03565b6114e76129e3565b6114ef6129f2565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b610198546000906115349082906001600160a01b0316611569565b61153e5750600090565b610198546001600160a01b03165b905090565b600082815260fd60205260408120610f279083612a01565b600091825260cb602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600054610100900460ff16158080156115b45750600054600160ff909116105b806115d557506115c330612a0d565b1580156115d5575060005460ff166001145b6116385760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610b03565b6000805460ff19166001179055801561165b576000805461ff0019166101001790555b611663612a1c565b6116a96040518060400160405280600b81526020016a546f6b656e45524337323160a81b815250604051806040016040528060018152602001603160f81b815250612a4d565b61177d846001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156116ea573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526117129190810190614d62565b856001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015611750573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526117789190810190614d62565b612a7e565b6117878361019555565b61019680546001600160a01b0319166001600160a01b03861617905561019e6117b08382614e34565b50836001600160a01b031663b24f2d396040518163ffffffff1660e01b81526004016040805180830381865afa1580156117ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118129190614cb8565b61019d80546001600160801b03191661ffff90921691909117905561019c80546001600160a01b039283166001600160a01b031990911617905560408051636a2ab9fb60e11b815281519287169263d45573f6926004808401939192918290030181865afa158015611888573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ac9190614cb8565b61019d80546001600160801b031661ffff92909216600160801b0291909117905561019b80546001600160a01b0319166001600160a01b03928316179055604080516303cff20760e11b815290519186169163079fe40e916004808201926020929091908290030181865afa158015611929573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194d9190614eed565b61019a60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550836001600160a01b0316633b1475a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d69190614f0a565b6101998190556101a15561019880546001600160a01b0319166001600160a01b038716179055611a07600086612aaf565b611a1f60008051602061531c83398151915286612aaf565b611a376000805160206152b583398151915286612aaf565b611a4f6000805160206152b583398151915280612ab9565b611a686000805160206152958339815191526000612aaf565b611a806000805160206152d583398151915286612aaf565b611a986000805160206152d583398151915280612ab9565b8015611ade576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b6000611af081612152565b61019e611afe838583614f23565b50505050565b606061013080546109e490614a15565b6000611b1f81612152565b612710821115611b415760405162461bcd60e51b8152600401610b0390614d04565b6040805180820182526001600160a01b03858116808352602080840187815260008a81526101a08352869020945185546001600160a01b031916941693909317845591516001909301929092559151848152909186917f7365cf4122f072a3365c20d54eff9b38d73c096c28e1892ec8f5b0e403a0f12d910160405180910390a350505050565b610cb4338383612b0c565b6060816001600160401b03811115611bed57611bed614473565b604051908082528060200260200182016040528015611c2057816020015b6060815260200190600190039081611c0b5790505b50905060005b82811015611cb557611c9030858584818110611c4457611c44614cee565b9050602002810190611c569190614aeb565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612bd792505050565b828281518110611ca257611ca2614cee565b6020908102919091010152600101611c26565b5092915050565b611cc6338361238b565b611ce25760405162461bcd60e51b8152600401610b0390614a4f565b611afe84848484612bfc565b60606101a15482108015611d1b57506000828152610194602052604090208054611d1790614a15565b1590505b15611d92576101965460405163c87b56dd60e01b8152600481018490526001600160a01b039091169063c87b56dd90602401600060405180830381865afa158015611d6a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109ce9190810190614d62565b6000828152610194602052604090208054611dac90614a15565b80601f0160208091040260200160405190810160405280929190818152602001828054611dd890614a15565b8015611e255780601f10611dfa57610100808354040283529160200191611e25565b820191906000526020600020905b815481529060010190602001808311611e0857829003601f168201915b50505050509050919050565b600081815260fd602052604081206109ce90612c2f565b611e506122fe565b611e6d576040516318c4c13760e21b815260040160405180910390fd5b610193805460ff191660011790556040517feef043febddf4e1d1cf1f72ff1407b84e036e805aa0934418cb82095da8d716490600090a1565b6000838152610197602052604090205460ff1615611eda57604051639eee288160e01b815260048101849052602401610b03565b61019660009054906101000a90046001600160a01b03166001600160a01b0316633b1475a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f529190614f0a565b8310611f7457604051634e369fbd60e11b815260048101849052602401610b03565b611f7c612c39565b15611ffd576000611fd68383611f926101955490565b8789604051602001611fbb92919091825260601b6001600160601b031916602082015260340190565b60405160208183030381529060405280519060200120612c59565b50905080611ffb578484604051630b860e6360e11b8152600401610b039291906145e7565b505b600083815261019760205260409020805460ff19166001179055611afe8484612ce7565b61202a82610db1565b61203381612152565b610ba483836128f7565b600080600061204d868686612d70565b610120870135600090815261019f602052604090205490915060ff16158015612089575061208960008051602061531c83398151915282611569565b969095509350505050565b61019e80546120a290614a15565b80601f01602080910402602001604051908101604052809291908181526020018280546120ce90614a15565b801561211b5780601f106120f05761010080835404028352916020019161211b565b820191906000526020600020905b8154815290600101906020018083116120fe57829003601f168201915b505050505081565b6001600160a01b0391821660009081526101346020908152604080832093909416825291909152205460ff1690565b6110ee8133612dcc565b61019980549060019060006121718385614fdc565b9091555050816121b05760405162461bcd60e51b815260206004820152600a60248201526932b6b83a3c903ab9349760b11b6044820152606401610b03565b6121f08184848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061231892505050565b6121fa8482612e25565b80846001600160a01b03167f9d89e36eadf856db0ad9ffb5a569e07f95634dddd9501141ecf04820484ad0dc8585604051612236929190614fef565b60405180910390a39392505050565b60006001600160e01b0319821663780e9d6360e01b14806109ce57506109ce82612e3f565b61227381612e7f565b6110ee5760405162461bcd60e51b8152600401610b0390614d30565b60008181526101336020526040902080546001600160a01b0319166001600160a01b03841690811790915581906122c58261133a565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061154c6000805160206152b583398151915233611569565b805160000361233a5760405163a094836b60e01b815260040160405180910390fd5b6000828152610194602052604090206123538282614e34565b506040518281527ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce79060200160405180910390a15050565b6000806123978361133a565b9050806001600160a01b0316846001600160a01b031614806123be57506123be8185612123565b806123e25750836001600160a01b03166123d784610a67565b6001600160a01b0316145b949350505050565b826001600160a01b03166123fd8261133a565b6001600160a01b0316146124235760405162461bcd60e51b8152600401610b0390615003565b6001600160a01b0382166124855760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610b03565b6124928383836001612e9c565b826001600160a01b03166124a58261133a565b6001600160a01b0316146124cb5760405162461bcd60e51b8152600401610b0390615003565b60008181526101336020908152604080832080546001600160a01b03199081169091556001600160a01b038781168086526101328552838620805460001901905590871680865283862080546001019055868652610131909452828520805490921684179091559051849360008051602061533c83398151915291a4505050565b60026001540361259e5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610b03565b6002600155565b60008060006125b586868661203d565b91509150816125fa5760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964207369676e617475726560781b6044820152606401610b03565b4261260c610100880160e08901615048565b6001600160801b03161115801561263d57504261263161012088016101008901615048565b6001600160801b031610155b61267b5760405162461bcd60e51b815260206004820152600f60248201526e1c995c5d595cdd08195e1c1a5c9959608a1b6044820152606401610b03565b600061268a6020880188614456565b6001600160a01b0316036126d65760405162461bcd60e51b81526020600482015260136024820152721c9958da5c1a595b9d081d5b9919599a5b9959606a1b6044820152606401610b03565b610120860135600090815261019f60205260409020805460ff191660011790559150509392505050565b8060a001356000036127435734156110ee5760405162461bcd60e51b81526020600482015260066024820152652156616c756560d01b6044820152606401610b03565b61019d5460a0820135906000906127109061276e90600160801b90046001600160801b031684614ab2565b6127789190614ac9565b905073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee61279f60e0850160c08601614456565b6001600160a01b0316036127fa578134146127f55760405162461bcd60e51b815260206004820152601660248201527536bab9ba1039b2b732103a37ba30b610383934b1b29760511b6044820152606401610b03565b61283d565b341561283d5760405162461bcd60e51b81526020600482015260126024820152716d73672076616c7565206e6f74207a65726f60701b6044820152606401610b03565b6000806128506080860160608701614456565b6001600160a01b0316146128735761286e6080850160608601614456565b612881565b61019a546001600160a01b03165b90506128ab61289660e0860160c08701614456565b61019b5433906001600160a01b031685612f7d565b611afe6128be60e0860160c08701614456565b33836128ca8688615063565b612f7d565b60018055565b6128df8282612fc3565b600082815260fd60205260409020610ba49082613049565b612901828261305e565b600082815260fd60205260409020610ba490826130c5565b60006129248261133a565b9050612934816000846001612e9c565b61293d8261133a565b60008381526101336020908152604080832080546001600160a01b03199081169091556001600160a01b038516808552610132845282852080546000190190558785526101319093528184208054909116905551929350849260008051602061533c833981519152908390a45050565b600090815261013160205260409020546001600160a01b031690565b600061154c6000805160206152d583398151915233611569565b6060603580546109e490614a15565b6060603680546109e490614a15565b6000610f2783836130da565b6001600160a01b03163b151590565b600054610100900460ff16612a435760405162461bcd60e51b8152600401610b0390615076565b612a4b613104565b565b600054610100900460ff16612a745760405162461bcd60e51b8152600401610b0390615076565b610cb4828261312b565b600054610100900460ff16612aa55760405162461bcd60e51b8152600401610b0390615076565b610cb4828261317a565b610cb482826128d5565b6000612ac483610db1565b600084815260cb6020526040808220600101859055519192508391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b816001600160a01b0316836001600160a01b031603612b695760405162461bcd60e51b815260206004820152601960248201527822a9219b99189d1030b8383937bb32903a379031b0b63632b960391b6044820152606401610b03565b6001600160a01b0383811660008181526101346020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6060610f2783836040518060600160405280602781526020016152f5602791396131bc565b612c078484846123ea565b612c1384848484613234565b611afe5760405162461bcd60e51b8152600401610b03906150c1565b60006109ce825490565b6000612c536000805160206152d583398151915233611569565b15905090565b6000808281805b87811015612cd557612c73600283614ab2565b91506000898983818110612c8957612c89614cee565b905060200201359050808411612cae5760008481526020829052604090209350612ccc565b60008181526020859052604090209350612cc9600184614fdc565b92505b50600101612c60565b50908514925090505b94509492505050565b6101965460405163c87b56dd60e01b8152600481018390526000916001600160a01b03169063c87b56dd90602401600060405180830381865afa158015612d32573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612d5a9190810190614d62565b9050612d668282612318565b610ba48383612e25565b60006123e283838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612dc69250612dba915088905061333c565b80519060200120613476565b906134a3565b612dd68282611569565b610cb457612de3816134c7565b612dee8360206134d9565b604051602001612dff929190615113565b60408051601f198184030181529082905262461bcd60e51b8252610b03916004016143f1565b610cb4828260405180602001604052806000815250613674565b60006001600160e01b031982166380ac58cd60e01b1480612e7057506001600160e01b03198216635b5e139f60e01b145b806109ce57506109ce826136a7565b600080612e8b836129ad565b6001600160a01b0316141592915050565b612ea8848484846136cc565b612ec16000805160206152958339815191526000611569565b158015612ed657506001600160a01b03841615155b8015612eea57506001600160a01b03831615155b15611afe57612f0760008051602061529583398151915285611569565b80612f255750612f2560008051602061529583398151915284611569565b611afe5760405162461bcd60e51b815260206004820152602360248201527f7265737472696374656420746f205452414e534645525f524f4c4520686f6c6460448201526265727360e81b6064820152608401610b03565b8015611afe5773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed196001600160a01b03851601612fb757612fb282826137fb565b611afe565b611afe84848484613873565b612fcd8282611569565b610cb457600082815260cb602090815260408083206001600160a01b03851684529091529020805460ff191660011790556130053390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610f27836001600160a01b0384166138c6565b6130688282611569565b15610cb457600082815260cb602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610f27836001600160a01b038416613915565b60008260000182815481106130f1576130f1614cee565b9060005260206000200154905092915050565b600054610100900460ff166128cf5760405162461bcd60e51b8152600401610b0390615076565b600054610100900460ff166131525760405162461bcd60e51b8152600401610b0390615076565b603561315e8382614e34565b50603661316b8282614e34565b50506000603381905560345550565b600054610100900460ff166131a15760405162461bcd60e51b8152600401610b0390615076565b61012f6131ae8382614e34565b50610130610ba48282614e34565b6060600080856001600160a01b0316856040516131d99190615182565b600060405180830381855af49150503d8060008114613214576040519150601f19603f3d011682016040523d82523d6000602084013e613219565b606091505b509150915061322a86838387613a08565b9695505050505050565b6000613248846001600160a01b0316612a0d565b1561333157604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061327f90339089908890889060040161519e565b6020604051808303816000875af19250505080156132ba575060408051601f3d908101601f191682019092526132b7918101906151d1565b60015b613317573d8080156132e8576040519150601f19603f3d011682016040523d82523d6000602084013e6132ed565b606091505b50805160000361330f5760405162461bcd60e51b8152600401610b03906150c1565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506123e2565b506001949350505050565b60607f86633b4ffa94b7c3d316ca70d7d2700f3fdfa7a7806efd31499b513d9176692e61336c6020840184614456565b61337c6040850160208601614456565b60408501356133916080870160608801614456565b61339e6080880188614aeb565b6040516133ac9291906151ee565b60405190819003902060a08801356133ca60e08a0160c08b01614456565b6133db6101008b0160e08c01615048565b6133ed6101208c016101008d01615048565b60408051602081019b909b526001600160a01b03998a16908b015296881660608a0152608089019590955292861660a088015260c087019190915260e08601529092166101008401526001600160801b03918216610120808501919091529116610140830152830135610160820152610180016040516020818303038152906040529050919050565b60006109ce613483613a7f565b8360405161190160f01b8152600281019290925260228201526042902090565b60008060006134b28585613a89565b915091506134bf81613ace565b509392505050565b60606109ce6001600160a01b03831660145b606060006134e8836002614ab2565b6134f3906002614fdc565b6001600160401b0381111561350a5761350a614473565b6040519080825280601f01601f191660200182016040528015613534576020820181803683370190505b509050600360fc1b8160008151811061354f5761354f614cee565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061357e5761357e614cee565b60200101906001600160f81b031916908160001a90535060006135a2846002614ab2565b6135ad906001614fdc565b90505b6001811115613625576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106135e1576135e1614cee565b1a60f81b8282815181106135f7576135f7614cee565b60200101906001600160f81b031916908160001a90535060049490941c9361361e816151fe565b90506135b0565b508315610f275760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610b03565b61367e8383613c13565b61368b6000848484613234565b610ba45760405162461bcd60e51b8152600401610b03906150c1565b60006001600160e01b03198216635a05180f60e01b14806109ce57506109ce82613d1e565b600181111561373b5760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e7365637574697665207472604482015274185b9cd9995c9cc81b9bdd081cdd5c1c1bdc9d1959605a1b6064820152608401610b03565b816001600160a01b03851661379957613794816101638054600083815261016460205260408120829055600182018355919091527fb0f3e90519fd0de3100ca1a24094c0a25e5cbf467d74a2603172b5a5204555b30155565b6137bc565b836001600160a01b0316856001600160a01b0316146137bc576137bc8582613d53565b6001600160a01b0384166137d8576137d381613df5565b611ade565b846001600160a01b0316846001600160a01b031614611ade57611ade8482613eaa565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613848576040519150601f19603f3d011682016040523d82523d6000602084013e61384d565b606091505b5050905080610ba4578282604051635fdc4ec160e11b8152600401610b039291906145e7565b816001600160a01b0316836001600160a01b03160315611afe57306001600160a01b038416036138b157612fb26001600160a01b0385168383613ef0565b611afe6001600160a01b038516848484613f46565b600081815260018301602052604081205461390d575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556109ce565b5060006109ce565b600081815260018301602052604081205480156139fe576000613939600183615063565b855490915060009061394d90600190615063565b90508181146139b257600086600001828154811061396d5761396d614cee565b906000526020600020015490508087600001848154811061399057613990614cee565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806139c3576139c3615215565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506109ce565b60009150506109ce565b60608315613a75578251600003613a6e57613a2285612a0d565b613a6e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610b03565b50816123e2565b6123e28383613f7e565b600061154c613fa8565b6000808251604103613abf5760208301516040840151606085015160001a613ab38782858561401c565b94509450505050613ac7565b506000905060025b9250929050565b6000816004811115613ae257613ae261522b565b03613aea5750565b6001816004811115613afe57613afe61522b565b03613b465760405162461bcd60e51b815260206004820152601860248201527745434453413a20696e76616c6964207369676e617475726560401b6044820152606401610b03565b6002816004811115613b5a57613b5a61522b565b03613ba75760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610b03565b6003816004811115613bbb57613bbb61522b565b036110ee5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610b03565b6001600160a01b038216613c695760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610b03565b613c7281612e7f565b15613c8f5760405162461bcd60e51b8152600401610b0390615241565b613c9d600083836001612e9c565b613ca681612e7f565b15613cc35760405162461bcd60e51b8152600401610b0390615241565b6001600160a01b0382166000818152610132602090815260408083208054600101905584835261013190915280822080546001600160a01b03191684179055518392919060008051602061533c833981519152908290a45050565b60006001600160e01b03198216637965db0b60e01b14806109ce57506301ffc9a760e01b6001600160e01b03198316146109ce565b60006001613d60846113c5565b613d6a9190615063565b60008381526101626020526040902054909150808214613dc0576001600160a01b038416600090815261016160209081526040808320858452825280832054848452818420819055835261016290915290208190555b506000918252610162602090815260408084208490556001600160a01b03909416835261016181528383209183525290812055565b61016354600090613e0890600190615063565b600083815261016460205260408120546101638054939450909284908110613e3257613e32614cee565b90600052602060002001549050806101638381548110613e5457613e54614cee565b60009182526020808320909101929092558281526101649091526040808220849055858252812055610163805480613e8e57613e8e615215565b6001900381819060005260206000200160009055905550505050565b6000613eb5836113c5565b6001600160a01b0390931660009081526101616020908152604080832086845282528083208590559382526101629052919091209190915550565b610ba48363a9059cbb60e01b8484604051602401613f0f9291906145e7565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526140d3565b6040516001600160a01b0380851660248301528316604482015260648101829052611afe9085906323b872dd60e01b90608401613f0f565b815115613f8e5781518083602001fd5b8060405162461bcd60e51b8152600401610b0391906143f1565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f613fd36141a5565b613fdb6141fe565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6000806fa2a8918ca85bafe22016d0b997e4df60600160ff1b038311156140495750600090506003612cde565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561409d573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166140c657600060019250925050612cde565b9660009650945050505050565b6000614128826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661422f9092919063ffffffff16565b805190915015610ba457808060200190518101906141469190615277565b610ba45760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610b03565b6000806141b06129e3565b8051909150156141c7578051602090910120919050565b60335480156141d65792915050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4709250505090565b6000806142096129f2565b805190915015614220578051602090910120919050565b60345480156141d65792915050565b60606123e2848460008585600080866001600160a01b031685876040516142569190615182565b60006040518083038185875af1925050503d8060008114614293576040519150601f19603f3d011682016040523d82523d6000602084013e614298565b606091505b50915091506142a987838387613a08565b979650505050505050565b6001600160a01b03811681146110ee57600080fd5b80356142d4816142b4565b919050565b60008083601f8401126142eb57600080fd5b5081356001600160401b0381111561430257600080fd5b602083019150836020828501011115613ac757600080fd5b60008060006040848603121561432f57600080fd5b833561433a816142b4565b925060208401356001600160401b0381111561435557600080fd5b614361868287016142d9565b9497909650939450505050565b6001600160e01b0319811681146110ee57600080fd5b60006020828403121561439657600080fd5b8135610f278161436e565b60005b838110156143bc5781810151838201526020016143a4565b50506000910152565b600081518084526143dd8160208601602086016143a1565b601f01601f19169290920160200192915050565b602081526000610f2760208301846143c5565b6001600160a01b03169052565b60006020828403121561442357600080fd5b5035919050565b6000806040838503121561443d57600080fd5b8235614448816142b4565b946020939093013593505050565b60006020828403121561446857600080fd5b8135610f27816142b4565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156144b1576144b1614473565b604052919050565b60006001600160401b038211156144d2576144d2614473565b50601f01601f191660200190565b60006144f36144ee846144b9565b614489565b905082815283838301111561450757600080fd5b828260208301376000602084830101529392505050565b600082601f83011261452f57600080fd5b610f27838335602085016144e0565b6000806040838503121561455157600080fd5b8235915060208301356001600160401b0381111561456e57600080fd5b61457a8582860161451e565b9150509250929050565b60008060006060848603121561459957600080fd5b83356145a4816142b4565b925060208401356145b4816142b4565b929592945050506040919091013590565b600080604083850312156145d857600080fd5b50508035926020909101359150565b6001600160a01b03929092168252602082015260400190565b60008060006040848603121561461557600080fd5b83356001600160401b038082111561462c57600080fd5b90850190610140828803121561464157600080fd5b9093506020850135908082111561465757600080fd5b50614361868287016142d9565b6000806040838503121561467757600080fd5b823591506020830135614689816142b4565b809150509250929050565b60ff60f81b881681526000602060e060208401526146b560e084018a6143c5565b83810360408501526146c7818a6143c5565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b8181101561471b578351835292840192918401916001016146ff565b50909c9b505050505050505050505050565b6000806000806080858703121561474357600080fd5b843561474e816142b4565b9350602085013561475e816142b4565b92506040850135915060608501356001600160401b0381111561478057600080fd5b61478c8782880161451e565b91505092959194509250565b600080602083850312156147ab57600080fd5b82356001600160401b038111156147c157600080fd5b6147cd858286016142d9565b90969095509350505050565b6000806000606084860312156147ee57600080fd5b8335925060208401356145b4816142b4565b80151581146110ee57600080fd5b6000806040838503121561482157600080fd5b823561482c816142b4565b9150602083013561468981614800565b60008083601f84011261484e57600080fd5b5081356001600160401b0381111561486557600080fd5b6020830191508360208260051b8501011115613ac757600080fd5b6000806020838503121561489357600080fd5b82356001600160401b038111156148a957600080fd5b6147cd8582860161483c565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101561490c57603f198886030184526148fa8583516143c5565b945092850192908501906001016148de565b5092979650505050505050565b6000806000806080858703121561492f57600080fd5b843561493a816142b4565b9350602085013561494a816142b4565b92506040850135915060608501356001600160401b0381111561496c57600080fd5b8501601f8101871361497d57600080fd5b61478c878235602084016144e0565b600080600080606085870312156149a257600080fd5b84356149ad816142b4565b93506020850135925060408501356001600160401b038111156149cf57600080fd5b6149db8782880161483c565b95989497509550505050565b600080604083850312156149fa57600080fd5b8235614a05816142b4565b91506020830135614689816142b4565b600181811c90821680614a2957607f821691505b602082108103614a4957634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176109ce576109ce614a9c565b600082614ae657634e487b7160e01b600052601260045260246000fd5b500490565b6000808335601e19843603018112614b0257600080fd5b8301803591506001600160401b03821115614b1c57600080fd5b602001915036819003821315613ac757600080fd5b6000808335601e19843603018112614b4857600080fd5b83016020810192503590506001600160401b03811115614b6757600080fd5b803603821315613ac757600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b80356001600160801b03811681146142d457600080fd5b60208152614bcf60208201614bca846142c9565b614404565b6000614bdd602084016142c9565b614bea6040840182614404565b5060408301356060830152614c01606084016142c9565b614c0e6080840182614404565b50614c1c6080840184614b31565b6101408060a0860152614c3461016086018385614b76565b925060a086013560c0860152614c4c60c087016142c9565b9150614c5b60e0860183614404565b614c6760e08701614b9f565b9150610100614c80818701846001600160801b03169052565b614c8b818801614b9f565b925050610120614ca5818701846001600160801b03169052565b9590950135939094019290925250919050565b60008060408385031215614ccb57600080fd5b8251614cd6816142b4565b602084015190925061ffff8116811461468957600080fd5b634e487b7160e01b600052603260045260246000fd5b60208082526012908201527165786365656420726f79616c74792062707360701b604082015260600190565b602080825260189082015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604082015260600190565b600060208284031215614d7457600080fd5b81516001600160401b03811115614d8a57600080fd5b8201601f81018413614d9b57600080fd5b8051614da96144ee826144b9565b818152856020838501011115614dbe57600080fd5b61099f8260208301602086016143a1565b601f821115610ba4576000816000526020600020601f850160051c81016020861015614df85750805b601f850160051c820191505b81811015614e1757828155600101614e04565b505050505050565b600019600383901b1c191660019190911b1790565b81516001600160401b03811115614e4d57614e4d614473565b614e6181614e5b8454614a15565b84614dcf565b602080601f831160018114614e905760008415614e7e5750858301515b614e888582614e1f565b865550614e17565b600085815260208120601f198616915b82811015614ebf57888601518255948401946001909101908401614ea0565b5085821015614edd5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215614eff57600080fd5b8151610f27816142b4565b600060208284031215614f1c57600080fd5b5051919050565b6001600160401b03831115614f3a57614f3a614473565b614f4e83614f488354614a15565b83614dcf565b6000601f841160018114614f7c5760008515614f6a5750838201355b614f748682614e1f565b845550611ade565b600083815260209020601f19861690835b82811015614fad5786850135825560209485019460019092019101614f8d565b5086821015614fca5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b808201808211156109ce576109ce614a9c565b6020815260006123e2602083018486614b76565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b60006020828403121561505a57600080fd5b610f2782614b9f565b818103818111156109ce576109ce614a9c565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b8152600083516151458160178501602088016143a1565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516151768160288401602088016143a1565b01602801949350505050565b600082516151948184602087016143a1565b9190910192915050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061322a908301846143c5565b6000602082840312156151e357600080fd5b8151610f278161436e565b8183823760009101908152919050565b60008161520d5761520d614a9c565b506000190190565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b6020808252601c908201527b115490cdcc8c4e881d1bdad95b88185b1c9958591e481b5a5b9d195960221b604082015260600190565b60006020828403121561528957600080fd5b8151610f278161480056fe8502233096d909befbda0999bb8ea2f3a6be3c138b9fbf003752a4c8bce86f6c6bd6b5318a46e5fff572d5e4258a20774aab40cc35ac7680654b9081fcc82f809d7b1cf62e8376e2ef102e20d4e487b829ff44d58ddb1f416ee01cf2ed26829e416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65649f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122091dac177509c97cfd176407e3310c9f8e09000b80db202c9a5752a8c9c7c573064736f6c63430008170033