[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "approved", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "ApprovalForAll", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "_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": "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": "_saleRecipient", "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": "owner", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "forwarder", "type": "address" } ], "name": "isTrustedForwarder", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "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": "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" } ]
60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b806200004f5750303b1580156200004f575060005460ff166001145b620000b75760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000db576000805461ff0019166101001790555b801562000122576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50614fc180620001336000396000f3fe60806040526004361061025e5760003560e01c80636f4f2837116101405780636f4f2837146105ee57806370a082311461060e57806384b0196e1461062e5780638da5cb5b146106565780639010d07c1461066b57806391d148541461068b578063938e3d7b146106ab57806395d89b41146106cb5780639bcf7a15146106e0578063a0a8e46014610700578063a217fddf1461071c578063a22cb46514610731578063ac9650d814610751578063b24f2d391461077e578063b88d4fde146107ad578063c87b56dd146107cd578063ca15c873146107ed578063cb2ef6f71461080d578063d111515d1461082e578063d45573f614610843578063d547741f14610879578063de90377414610899578063e1591634146108d8578063e8a3d485146108f8578063e985e9c51461090d578063eb13554f1461092d57600080fd5b806275a3171461026357806301ffc9a71461029657806306fdde03146102c6578063079fe40e146102e8578063081812fc14610321578063095ea7b31461034157806313af403514610363578063162094c41461038357806318160ddd146103a35780631e7ac488146103b957806323b872dd146103d9578063248a9ca3146103f9578063274e4a1d146104195780632a55205a146104345780632c4510f8146104625780632f2ff15d146104755780632f745c591461049557806336568abe146104b55780633b1475a7146104d557806342842e0e146104ec57806342966c681461050c5780634cc157df1461052c5780634f6ccce71461056e578063572b6c051461058e578063600dd5ea146105ae5780636352211e146105ce575b600080fd5b34801561026f57600080fd5b5061028361027e366004613f49565b61094e565b6040519081526020015b60405180910390f35b3480156102a257600080fd5b506102b66102b1366004613fb1565b61097c565b604051901515815260200161028d565b3480156102d257600080fd5b506102db6109a8565b60405161028d919061401e565b3480156102f457600080fd5b506101c954610309906001600160a01b031681565b6040516001600160a01b03909116815260200161028d565b34801561032d57600080fd5b5061030961033c36600461403e565b610a3b565b34801561034d57600080fd5b5061036161035c366004614057565b610a63565b005b34801561036f57600080fd5b5061036161037e366004614081565b610b8f565b34801561038f57600080fd5b5061036161039e366004614159565b610c43565b3480156103af57600080fd5b5061019554610283565b3480156103c557600080fd5b506103616103d4366004614057565b610d0e565b3480156103e557600080fd5b506103616103f436600461419f565b610db4565b34801561040557600080fd5b5061028361041436600461403e565b610dec565b34801561042557600080fd5b506101c5546102b69060ff1681565b34801561044057600080fd5b5061045461044f3660046141db565b610e01565b60405161028d9291906141fd565b610283610470366004614216565b610e3e565b34801561048157600080fd5b5061036161049036600461427a565b610f69565b3480156104a157600080fd5b506102836104b0366004614057565b610f85565b3480156104c157600080fd5b506103616104d036600461427a565b61101c565b3480156104e157600080fd5b506102836101c85481565b3480156104f857600080fd5b5061036161050736600461419f565b6110a6565b34801561051857600080fd5b5061036161052736600461403e565b6110c1565b34801561053857600080fd5b5061054c61054736600461403e565b61113d565b604080516001600160a01b03909316835261ffff90911660208301520161028d565b34801561057a57600080fd5b5061028361058936600461403e565b6111ad565b34801561059a57600080fd5b506102b66105a9366004614081565b611242565b3480156105ba57600080fd5b506103616105c9366004614057565b611260565b3480156105da57600080fd5b506103096105e936600461403e565b6112f8565b3480156105fa57600080fd5b50610361610609366004614081565b61132c565b34801561061a57600080fd5b50610283610629366004614081565b611383565b34801561063a57600080fd5b5061064361140a565b60405161028d97969594939291906142a6565b34801561066257600080fd5b506103096114a8565b34801561067757600080fd5b506103096106863660046141db565b6114e0565b34801561069757600080fd5b506102b66106a636600461427a565b6114f9565b3480156106b757600080fd5b506103616106c636600461433f565b611524565b3480156106d757600080fd5b506102db611543565b3480156106ec57600080fd5b506103616106fb366004614380565b611553565b34801561070c57600080fd5b506040516001815260200161028d565b34801561072857600080fd5b50610283600081565b34801561073d57600080fd5b5061036161074c3660046143b3565b611607565b34801561075d57600080fd5b5061077161076c3660046143ea565b611619565b60405161028d919061445e565b34801561078a57600080fd5b506101cb546101cc546001600160a01b03909116906001600160801b031661054c565b3480156107b957600080fd5b506103616107c83660046144c2565b611795565b3480156107d957600080fd5b506102db6107e836600461403e565b6117ce565b3480156107f957600080fd5b5061028361080836600461403e565b611871565b34801561081957600080fd5b506a546f6b656e45524337323160a81b610283565b34801561083a57600080fd5b50610361611889565b34801561084f57600080fd5b506101ca546101cc546001600160a01b0390911690600160801b90046001600160801b031661054c565b34801561088557600080fd5b5061036161089436600461427a565b61192c565b3480156108a557600080fd5b506108b96108b4366004614216565b611948565b6040805192151583526001600160a01b0390911660208301520161028d565b3480156108e457600080fd5b506103616108f33660046145cf565b61199f565b34801561090457600080fd5b506102db611c6d565b34801561091957600080fd5b506102b66109283660046146e1565b611cfc565b34801561093957600080fd5b506101ca54610309906001600160a01b031681565b6000600080516020614f4c83398151915261096881611d2b565b610973858585611d3c565b95945050505050565b600061098782611e25565b806109a257506001600160e01b0319821663152a902d60e11b145b92915050565b606061016180546109b89061470b565b80601f01602080910402602001604051908101604052809291908181526020018280546109e49061470b565b8015610a315780601f10610a0657610100808354040283529160200191610a31565b820191906000526020600020905b815481529060010190602001808311610a1457829003601f168201915b5050505050905090565b6000610a4682611e4a565b50600090815261016560205260409020546001600160a01b031690565b6000610a6e826112f8565b9050806001600160a01b0316836001600160a01b031603610ae05760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b806001600160a01b0316610af2611e6f565b6001600160a01b03161480610b0e5750610b0e81610928611e6f565b610b805760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610ad7565b610b8a8383611e79565b505050565b6000610b9a81611d2b565b610ba56000836114f9565b610bef5760405162461bcd60e51b815260206004820152601b60248201527a3732bb9037bbb732b9103737ba1036b7b23ab6329030b236b4b71760291b6044820152606401610ad7565b6101c780546001600160a01b038481166001600160a01b0319831681179093556040519116919082907f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d7690600090a3505050565b610c4b611ee8565b610cac5760405162461bcd60e51b815260206004820152602c60248201527f4e46544d657461646174613a206e6f7420617574686f72697a656420746f207360448201526b32ba1036b2ba30b230ba309760a11b6064820152608401610ad7565b6101c55460ff1615610d005760405162461bcd60e51b815260206004820181905260248201527f4e46544d657461646174613a206d657461646174612069732066726f7a656e2e6044820152606401610ad7565b610d0a8282611f04565b5050565b6000610d1981611d2b565b612710821115610d3b5760405162461bcd60e51b8152600401610ad790614745565b6101cc80546001600160801b03166001600160401b038416600160801b021790556101ca80546001600160a01b0319166001600160a01b0385169081179091556040518381527fe2497bd806ec41a6e0dd992c29a72efc0ef8fec9092d1978fd4a1e00b2f18304906020015b60405180910390a2505050565b610dc5610dbf611e6f565b82611fa5565b610de15760405162461bcd60e51b8152600401610ad79061476e565b610b8a838383612004565b600090815260fd602052604090206001015490565b600080600080610e108661113d565b90945084925061ffff169050612710610e2982876147d1565b610e3391906147e8565b925050509250929050565b6000610e48612166565b6000610e558585856121bf565b90506000610e666020870187614081565b9050610e7e81610e79608089018961480a565b611d3c565b92506000610e926040880160208901614081565b6001600160a01b031614610f02576040518060400160405280876020016020810190610ebe9190614081565b6001600160a01b03908116825260408981013560209384015260008781526101cf845220835181546001600160a01b03191692169190911781559101516001909101555b610f0b8661231a565b82816001600160a01b0316836001600160a01b03167f110d160a1bedeea919a88fbc4b2a9fb61b7e664084391b6ca2740db66fef80fe89604051610f4f91906148be565b60405180910390a45050610f6260018055565b9392505050565b610f7282610dec565b610f7b81611d2b565b610b8a83836124fc565b6000610f9083611383565b8210610ff25760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610ad7565b506001600160a01b0391909116600090815261019360209081526040808320938352929052205490565b611024611e6f565b6001600160a01b0316816001600160a01b03161461109c5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610ad7565b610d0a828261251f565b610b8a83838360405180602001604052806000815250611795565b6110cc610dbf611e6f565b6111315760405162461bcd60e51b815260206004820152603060248201527f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760448201526f1b995c881b9bdc88185c1c1c9bdd995960821b6064820152608401610ad7565b61113a81612542565b50565b60008181526101cf60209081526040808320815180830190925280546001600160a01b03168083526001909101549282019290925282911561118557805160208201516111a3565b6101cb546101cc546001600160a01b03909116906001600160801b03165b9250925050915091565b60006111b96101955490565b821061121c5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610ad7565b6101958281548110611230576112306149c0565b90600052602060002001549050919050565b6001600160a01b031660009081526099602052604090205460ff1690565b600061126b81611d2b565b61271082111561128d5760405162461bcd60e51b8152600401610ad7906149d6565b6101cb80546001600160a01b0319166001600160a01b0385169081179091556101cc80546001600160801b0319166001600160801b0385161790556040518381527f90d7ec04bcb8978719414f82e52e4cb651db41d0e6f8cea6118c2191e6183adb90602001610da7565b600080611304836125d6565b90506001600160a01b0381166109a25760405162461bcd60e51b8152600401610ad790614a02565b600061133781611d2b565b6101c980546001600160a01b0319166001600160a01b0384169081179091556040517f299d17e95023f496e0ffc4909cff1a61f74bb5eb18de6f900f4155bfa1b3b33390600090a25050565b60006001600160a01b0382166113ed5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610ad7565b506001600160a01b03166000908152610164602052604090205490565b6000606080600080600060606033546000801b14801561142a5750603454155b61146e5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606401610ad7565b6114766125f2565b61147e612601565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b6101c7546000906114c39082906001600160a01b03166114f9565b6114cd5750600090565b6101c7546001600160a01b03165b905090565b600082815261012f60205260408120610f629083612610565b600091825260fd602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600061152f81611d2b565b6101cd61153d838583614a99565b50505050565b606061016280546109b89061470b565b600061155e81611d2b565b6127108211156115805760405162461bcd60e51b8152600401610ad7906149d6565b6040805180820182526001600160a01b03858116808352602080840187815260008a81526101cf8352869020945185546001600160a01b031916941693909317845591516001909301929092559151848152909186917f7365cf4122f072a3365c20d54eff9b38d73c096c28e1892ec8f5b0e403a0f12d910160405180910390a350505050565b610d0a611612611e6f565b838361261c565b6060816001600160401b038111156116335761163361409c565b60405190808252806020026020018201604052801561166657816020015b60608152602001906001900390816116515790505b5090506000611673611e6f565b9050336001600160a01b038216141560005b8481101561178c578115611704576116e2308787848181106116a9576116a96149c0565b90506020028101906116bb919061480a565b866040516020016116ce93929190614b52565b6040516020818303038152906040526126e7565b8482815181106116f4576116f46149c0565b6020026020010181905250611784565b6117663087878481811061171a5761171a6149c0565b905060200281019061172c919061480a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506126e792505050565b848281518110611778576117786149c0565b60200260200101819052505b600101611685565b50505092915050565b6117a66117a0611e6f565b83611fa5565b6117c25760405162461bcd60e51b8152600401610ad79061476e565b61153d8484848461270c565b60008181526101c6602052604090208054606091906117ec9061470b565b80601f01602080910402602001604051908101604052809291908181526020018280546118189061470b565b80156118655780601f1061183a57610100808354040283529160200191611865565b820191906000526020600020905b81548152906001019060200180831161184857829003601f168201915b50505050509050919050565b600081815261012f602052604081206109a29061273f565b611891611ee8565b6118f35760405162461bcd60e51b815260206004820152602d60248201527f4e46544d657461646174613a206e6f7420617574686f72697a656420746f206660448201526c7265657a65206d65746461746160981b6064820152608401610ad7565b6101c5805460ff191660011790556040517feef043febddf4e1d1cf1f72ff1407b84e036e805aa0934418cb82095da8d716490600090a1565b61193582610dec565b61193e81611d2b565b610b8a838361251f565b6000806000611958868686612749565b61012087013560009081526101ce602052604090205490915060ff161580156119945750611994600080516020614f4c833981519152826114f9565b969095509350505050565b600054610100900460ff16158080156119bf5750600054600160ff909116105b806119e057506119ce306127a5565b1580156119e0575060005460ff166001145b611a435760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610ad7565b6000805460ff191660011790558015611a66576000805461ff0019166101001790555b611a6e6127b4565b611ab46040518060400160405280600b81526020016a546f6b656e45524337323160a81b815250604051806040016040528060018152602001603160f81b8152506127e5565b611abd87612816565b611ac78a8a61284e565b6101cb80546001600160a01b03199081166001600160a01b03888116919091179092556101cc80546001600160801b0319166001600160801b0388161790556101ca805482168584161790556101c980549091169188169190911790556101cd611b318982614b73565b50612710836001600160801b03161115611b5d5760405162461bcd60e51b8152600401610ad790614745565b6101cc80546001600160801b03808616600160801b0291161790556101c780546001600160a01b038d166001600160a01b0319909116179055611ba160008c61287f565b611bb9600080516020614f4c8339815191528c61287f565b611bd1600080516020614f058339815191528c61287f565b611be9600080516020614f0583398151915280612889565b611c01600080516020614ee58339815191528c61287f565b611c1a600080516020614ee5833981519152600061287f565b8015611c60576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050505050565b6101cd8054611c7b9061470b565b80601f0160208091040260200160405190810160405280929190818152602001828054611ca79061470b565b8015611cf45780601f10611cc957610100808354040283529160200191611cf4565b820191906000526020600020905b815481529060010190602001808311611cd757829003601f168201915b505050505081565b6001600160a01b0391821660009081526101666020908152604080832093909416825291909152205460ff1690565b61113a81611d37611e6f565b6128dc565b6101c88054906001906000611d518385614c2c565b909155505081611d905760405162461bcd60e51b815260206004820152600a60248201526932b6b83a3c903ab9349760b11b6044820152606401610ad7565b611dd08184848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f0492505050565b611dda8482612935565b80846001600160a01b03167f9d89e36eadf856db0ad9ffb5a569e07f95634dddd9501141ecf04820484ad0dc8585604051611e16929190614c3f565b60405180910390a39392505050565b60006001600160e01b0319821663780e9d6360e01b14806109a257506109a28261294f565b611e538161298f565b61113a5760405162461bcd60e51b8152600401610ad790614a02565b60006114db6129ac565b60008181526101656020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611eaf826112f8565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006114db600080516020614f058339815191526106a6611e6f565b6000815111611f545760405162461bcd60e51b815260206004820152601c60248201527b27232a26b2ba30b230ba309d1032b6b83a3c9036b2ba30b230ba309760211b6044820152606401610ad7565b60008281526101c660205260409020611f6d8282614b73565b506040518281527ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce79060200160405180910390a15050565b600080611fb1836112f8565b9050806001600160a01b0316846001600160a01b03161480611fd85750611fd88185611cfc565b80611ffc5750836001600160a01b0316611ff184610a3b565b6001600160a01b0316145b949350505050565b826001600160a01b0316612017826112f8565b6001600160a01b03161461203d5760405162461bcd60e51b8152600401610ad790614c53565b6001600160a01b03821661209f5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610ad7565b6120ac83838360016129ce565b826001600160a01b03166120bf826112f8565b6001600160a01b0316146120e55760405162461bcd60e51b8152600401610ad790614c53565b60008181526101656020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865261016485528386208054600019019055908716808652838620805460010190558686526101639094528285208054909216841790915590518493600080516020614f6c83398151915291a4505050565b6002600154036121b85760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610ad7565b6002600155565b60008060006121cf868686611948565b91509150816122145760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964207369676e617475726560781b6044820152606401610ad7565b42612226610100880160e08901614c98565b6001600160801b03161115801561225757504261224b61012088016101008901614c98565b6001600160801b031610155b6122955760405162461bcd60e51b815260206004820152600f60248201526e1c995c5d595cdd08195e1c1a5c9959608a1b6044820152606401610ad7565b60006122a46020880188614081565b6001600160a01b0316036122f05760405162461bcd60e51b81526020600482015260136024820152721c9958da5c1a595b9d081d5b9919599a5b9959606a1b6044820152606401610ad7565b61012086013560009081526101ce60205260409020805460ff191660011790559150509392505050565b8060a0013560000361235d57341561113a5760405162461bcd60e51b81526020600482015260066024820152652156616c756560d01b6044820152606401610ad7565b6101cc5460a0820135906000906127109061238890600160801b90046001600160801b0316846147d1565b61239291906147e8565b905073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6123b960e0850160c08601614081565b6001600160a01b0316036124145781341461240f5760405162461bcd60e51b815260206004820152601660248201527536bab9ba1039b2b732103a37ba30b610383934b1b29760511b6044820152606401610ad7565b612457565b34156124575760405162461bcd60e51b81526020600482015260126024820152716d73672076616c7565206e6f74207a65726f60701b6044820152606401610ad7565b60008061246a6080860160608701614081565b6001600160a01b03161461248d576124886080850160608601614081565b61249b565b6101c9546001600160a01b03165b90506124cb6124b060e0860160c08701614081565b6124b8611e6f565b6101ca546001600160a01b031685612aaf565b61153d6124de60e0860160c08701614081565b6124e6611e6f565b836124f18688614cb3565b612aaf565b60018055565b6125068282612af5565b600082815261012f60205260409020610b8a9082612b7c565b6125298282612b91565b600082815261012f60205260409020610b8a9082612c16565b600061254d826112f8565b905061255d8160008460016129ce565b612566826112f8565b60008381526101656020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526101648452828520805460001901905587855261016390935281842080549091169055519293508492600080516020614f6c833981519152908390a45050565b600090815261016360205260409020546001600160a01b031690565b6060603580546109b89061470b565b6060603680546109b89061470b565b6000610f628383612c2b565b816001600160a01b0316836001600160a01b0316036126795760405162461bcd60e51b815260206004820152601960248201527822a9219b99189d1030b8383937bb32903a379031b0b63632b960391b6044820152606401610ad7565b6001600160a01b0383811660008181526101666020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6060610f628383604051806060016040528060278152602001614f2560279139612c55565b612717848484612004565b61272384848484612ccd565b61153d5760405162461bcd60e51b8152600401610ad790614cc6565b60006109a2825490565b6000611ffc83838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061279f92506127939150889050612ddc565b80519060200120612f16565b90612f43565b6001600160a01b03163b151590565b600054610100900460ff166127db5760405162461bcd60e51b8152600401610ad790614d18565b6127e3612f67565b565b600054610100900460ff1661280c5760405162461bcd60e51b8152600401610ad790614d18565b610d0a8282612f8e565b600054610100900460ff1661283d5760405162461bcd60e51b8152600401610ad790614d18565b612845612fdd565b61113a81613004565b600054610100900460ff166128755760405162461bcd60e51b8152600401610ad790614d18565b610d0a8282613089565b610d0a82826124fc565b600061289483610dec565b600084815260fd6020526040808220600101859055519192508391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b6128e682826114f9565b610d0a576128f3816130cb565b6128fe8360206130dd565b60405160200161290f929190614d63565b60408051601f198184030181529082905262461bcd60e51b8252610ad79160040161401e565b610d0a828260405180602001604052806000815250613278565b60006001600160e01b031982166380ac58cd60e01b148061298057506001600160e01b03198216635b5e139f60e01b145b806109a257506109a2826132ab565b60008061299b836125d6565b6001600160a01b0316141592915050565b60006129b733611242565b156129c9575060131936013560601c90565b503390565b6129da848484846132d0565b6129f3600080516020614ee583398151915260006114f9565b158015612a0857506001600160a01b03841615155b8015612a1c57506001600160a01b03831615155b1561153d57612a39600080516020614ee5833981519152856114f9565b80612a575750612a57600080516020614ee5833981519152846114f9565b61153d5760405162461bcd60e51b815260206004820152602360248201527f7265737472696374656420746f205452414e534645525f524f4c4520686f6c6460448201526265727360e81b6064820152608401610ad7565b801561153d5773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed196001600160a01b03851601612ae957612ae48282613406565b61153d565b61153d848484846134a8565b612aff82826114f9565b610d0a57600082815260fd602090815260408083206001600160a01b03851684529091529020805460ff19166001179055612b38611e6f565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610f62836001600160a01b0384166134fb565b612b9b82826114f9565b15610d0a57600082815260fd602090815260408083206001600160a01b03851684529091529020805460ff19169055612bd2611e6f565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b6000610f62836001600160a01b03841661354a565b6000826000018281548110612c4257612c426149c0565b9060005260206000200154905092915050565b6060600080856001600160a01b031685604051612c729190614dd2565b600060405180830381855af49150503d8060008114612cad576040519150601f19603f3d011682016040523d82523d6000602084013e612cb2565b606091505b5091509150612cc38683838761363d565b9695505050505050565b6000612ce1846001600160a01b03166127a5565b15612dd157836001600160a01b031663150b7a02612cfd611e6f565b8786866040518563ffffffff1660e01b8152600401612d1f9493929190614dee565b6020604051808303816000875af1925050508015612d5a575060408051601f3d908101601f19168201909252612d5791810190614e21565b60015b612db7573d808015612d88576040519150601f19603f3d011682016040523d82523d6000602084013e612d8d565b606091505b508051600003612daf5760405162461bcd60e51b8152600401610ad790614cc6565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611ffc565b506001949350505050565b60607f86633b4ffa94b7c3d316ca70d7d2700f3fdfa7a7806efd31499b513d9176692e612e0c6020840184614081565b612e1c6040850160208601614081565b6040850135612e316080870160608801614081565b612e3e608088018861480a565b604051612e4c929190614e3e565b60405190819003902060a0880135612e6a60e08a0160c08b01614081565b612e7b6101008b0160e08c01614c98565b612e8d6101208c016101008d01614c98565b60408051602081019b909b526001600160a01b03998a16908b015296881660608a0152608089019590955292861660a088015260c087019190915260e08601529092166101008401526001600160801b03918216610120808501919091529116610140830152830135610160820152610180016040516020818303038152906040529050919050565b60006109a2612f236136b4565b8360405161190160f01b8152600281019290925260228201526042902090565b6000806000612f5285856136be565b91509150612f5f81613703565b509392505050565b600054610100900460ff166124f65760405162461bcd60e51b8152600401610ad790614d18565b600054610100900460ff16612fb55760405162461bcd60e51b8152600401610ad790614d18565b6035612fc18382614b73565b506036612fce8282614b73565b50506000603381905560345550565b600054610100900460ff166127e35760405162461bcd60e51b8152600401610ad790614d18565b600054610100900460ff1661302b5760405162461bcd60e51b8152600401610ad790614d18565b60005b8151811015610d0a5760016099600084848151811061304f5761304f6149c0565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905560010161302e565b600054610100900460ff166130b05760405162461bcd60e51b8152600401610ad790614d18565b6101616130bd8382614b73565b50610162610b8a8282614b73565b60606109a26001600160a01b03831660145b606060006130ec8360026147d1565b6130f7906002614c2c565b6001600160401b0381111561310e5761310e61409c565b6040519080825280601f01601f191660200182016040528015613138576020820181803683370190505b509050600360fc1b81600081518110613153576131536149c0565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110613182576131826149c0565b60200101906001600160f81b031916908160001a90535060006131a68460026147d1565b6131b1906001614c2c565b90505b6001811115613229576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106131e5576131e56149c0565b1a60f81b8282815181106131fb576131fb6149c0565b60200101906001600160f81b031916908160001a90535060049490941c9361322281614e4e565b90506131b4565b508315610f625760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610ad7565b6132828383613848565b61328f6000848484612ccd565b610b8a5760405162461bcd60e51b8152600401610ad790614cc6565b60006001600160e01b03198216635a05180f60e01b14806109a257506109a282613953565b600181111561333f5760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e7365637574697665207472604482015274185b9cd9995c9cc81b9bdd081cdd5c1c1bdc9d1959605a1b6064820152608401610ad7565b816001600160a01b03851661339d57613398816101958054600083815261019660205260408120829055600182018355919091527f54034dca961b61bc2a3147cc0c1986762915b42723ed64155364f17a2e2967700155565b6133c0565b836001600160a01b0316856001600160a01b0316146133c0576133c08582613988565b6001600160a01b0384166133dc576133d781613a2a565b6133ff565b846001600160a01b0316846001600160a01b0316146133ff576133ff8482613adf565b5050505050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613453576040519150601f19603f3d011682016040523d82523d6000602084013e613458565b606091505b5050905080610b8a5760405162461bcd60e51b815260206004820152601c60248201527b1b985d1a5d99481d1bdad95b881d1c985b9cd9995c8819985a5b195960221b6044820152606401610ad7565b816001600160a01b0316836001600160a01b0316031561153d57306001600160a01b038416036134e657612ae46001600160a01b0385168383613b25565b61153d6001600160a01b038516848484613b7b565b6000818152600183016020526040812054613542575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556109a2565b5060006109a2565b6000818152600183016020526040812054801561363357600061356e600183614cb3565b855490915060009061358290600190614cb3565b90508181146135e75760008660000182815481106135a2576135a26149c0565b90600052602060002001549050808760000184815481106135c5576135c56149c0565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806135f8576135f8614e65565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506109a2565b60009150506109a2565b606083156136aa5782516000036136a357613657856127a5565b6136a35760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610ad7565b5081611ffc565b611ffc8383613bb3565b60006114db613bdd565b60008082516041036136f45760208301516040840151606085015160001a6136e887828585613c51565b945094505050506136fc565b506000905060025b9250929050565b600081600481111561371757613717614e7b565b0361371f5750565b600181600481111561373357613733614e7b565b0361377b5760405162461bcd60e51b815260206004820152601860248201527745434453413a20696e76616c6964207369676e617475726560401b6044820152606401610ad7565b600281600481111561378f5761378f614e7b565b036137dc5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610ad7565b60038160048111156137f0576137f0614e7b565b0361113a5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610ad7565b6001600160a01b03821661389e5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610ad7565b6138a78161298f565b156138c45760405162461bcd60e51b8152600401610ad790614e91565b6138d26000838360016129ce565b6138db8161298f565b156138f85760405162461bcd60e51b8152600401610ad790614e91565b6001600160a01b0382166000818152610164602090815260408083208054600101905584835261016390915280822080546001600160a01b031916841790555183929190600080516020614f6c833981519152908290a45050565b60006001600160e01b03198216637965db0b60e01b14806109a257506301ffc9a760e01b6001600160e01b03198316146109a2565b6000600161399584611383565b61399f9190614cb3565b600083815261019460205260409020549091508082146139f5576001600160a01b038416600090815261019360209081526040808320858452825280832054848452818420819055835261019490915290208190555b506000918252610194602090815260408084208490556001600160a01b03909416835261019381528383209183525290812055565b61019554600090613a3d90600190614cb3565b600083815261019660205260408120546101958054939450909284908110613a6757613a676149c0565b90600052602060002001549050806101958381548110613a8957613a896149c0565b60009182526020808320909101929092558281526101969091526040808220849055858252812055610195805480613ac357613ac3614e65565b6001900381819060005260206000200160009055905550505050565b6000613aea83611383565b6001600160a01b0390931660009081526101936020908152604080832086845282528083208590559382526101949052919091209190915550565b610b8a8363a9059cbb60e01b8484604051602401613b449291906141fd565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613d0b565b6040516001600160a01b038085166024830152831660448201526064810182905261153d9085906323b872dd60e01b90608401613b44565b815115613bc35781518083602001fd5b8060405162461bcd60e51b8152600401610ad7919061401e565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f613c08613ddd565b613c10613e36565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6000806fa2a8918ca85bafe22016d0b997e4df60600160ff1b03831115613c7e5750600090506003613d02565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015613cd2573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116613cfb57600060019250925050613d02565b9150600090505b94509492505050565b6000613d60826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613e679092919063ffffffff16565b805190915015610b8a5780806020019051810190613d7e9190614ec7565b610b8a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610ad7565b600080613de86125f2565b805190915015613dff578051602090910120919050565b6033548015613e0e5792915050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4709250505090565b600080613e41612601565b805190915015613e58578051602090910120919050565b6034548015613e0e5792915050565b6060611ffc848460008585600080866001600160a01b03168587604051613e8e9190614dd2565b60006040518083038185875af1925050503d8060008114613ecb576040519150601f19603f3d011682016040523d82523d6000602084013e613ed0565b606091505b5091509150613ee18783838761363d565b979650505050505050565b80356001600160a01b0381168114613f0357600080fd5b919050565b60008083601f840112613f1a57600080fd5b5081356001600160401b03811115613f3157600080fd5b6020830191508360208285010111156136fc57600080fd5b600080600060408486031215613f5e57600080fd5b613f6784613eec565b925060208401356001600160401b03811115613f8257600080fd5b613f8e86828701613f08565b9497909650939450505050565b6001600160e01b03198116811461113a57600080fd5b600060208284031215613fc357600080fd5b8135610f6281613f9b565b60005b83811015613fe9578181015183820152602001613fd1565b50506000910152565b6000815180845261400a816020860160208601613fce565b601f01601f19169290920160200192915050565b602081526000610f626020830184613ff2565b6001600160a01b03169052565b60006020828403121561405057600080fd5b5035919050565b6000806040838503121561406a57600080fd5b61407383613eec565b946020939093013593505050565b60006020828403121561409357600080fd5b610f6282613eec565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156140da576140da61409c565b604052919050565b60006001600160401b038311156140fb576140fb61409c565b61410e601f8401601f19166020016140b2565b905082815283838301111561412257600080fd5b828260208301376000602084830101529392505050565b600082601f83011261414a57600080fd5b610f62838335602085016140e2565b6000806040838503121561416c57600080fd5b8235915060208301356001600160401b0381111561418957600080fd5b61419585828601614139565b9150509250929050565b6000806000606084860312156141b457600080fd5b6141bd84613eec565b92506141cb60208501613eec565b9150604084013590509250925092565b600080604083850312156141ee57600080fd5b50508035926020909101359150565b6001600160a01b03929092168252602082015260400190565b60008060006040848603121561422b57600080fd5b83356001600160401b038082111561424257600080fd5b90850190610140828803121561425757600080fd5b9093506020850135908082111561426d57600080fd5b50613f8e86828701613f08565b6000806040838503121561428d57600080fd5b8235915061429d60208401613eec565b90509250929050565b60ff60f81b881681526000602060e060208401526142c760e084018a613ff2565b83810360408501526142d9818a613ff2565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b8181101561432d57835183529284019291840191600101614311565b50909c9b505050505050505050505050565b6000806020838503121561435257600080fd5b82356001600160401b0381111561436857600080fd5b61437485828601613f08565b90969095509350505050565b60008060006060848603121561439557600080fd5b833592506141cb60208501613eec565b801515811461113a57600080fd5b600080604083850312156143c657600080fd5b6143cf83613eec565b915060208301356143df816143a5565b809150509250929050565b600080602083850312156143fd57600080fd5b82356001600160401b038082111561441457600080fd5b818501915085601f83011261442857600080fd5b81358181111561443757600080fd5b8660208260051b850101111561444c57600080fd5b60209290920196919550909350505050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b828110156144b557603f198886030184526144a3858351613ff2565b94509285019290850190600101614487565b5092979650505050505050565b600080600080608085870312156144d857600080fd5b6144e185613eec565b93506144ef60208601613eec565b92506040850135915060608501356001600160401b0381111561451157600080fd5b8501601f8101871361452257600080fd5b614531878235602084016140e2565b91505092959194509250565b600082601f83011261454e57600080fd5b813560206001600160401b038211156145695761456961409c565b8160051b6145788282016140b2565b928352848101820192828101908785111561459257600080fd5b83870192505b84831015613ee1576145a983613eec565b82529183019190830190614598565b80356001600160801b0381168114613f0357600080fd5b6000806000806000806000806000806101408b8d0312156145ef57600080fd5b6145f88b613eec565b995060208b01356001600160401b038082111561461457600080fd5b6146208e838f01614139565b9a5060408d013591508082111561463657600080fd5b6146428e838f01614139565b995060608d013591508082111561465857600080fd5b6146648e838f01614139565b985060808d013591508082111561467a57600080fd5b506146878d828e0161453d565b96505061469660a08c01613eec565b94506146a460c08c01613eec565b93506146b260e08c016145b8565b92506146c16101008c016145b8565b91506146d06101208c01613eec565b90509295989b9194979a5092959850565b600080604083850312156146f457600080fd5b6146fd83613eec565b915061429d60208401613eec565b600181811c9082168061471f57607f821691505b60208210810361473f57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252600f908201526e65786365656473204d41585f42505360881b604082015260600190565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176109a2576109a26147bb565b60008261480557634e487b7160e01b600052601260045260246000fd5b500490565b6000808335601e1984360301811261482157600080fd5b8301803591506001600160401b0382111561483b57600080fd5b6020019150368190038213156136fc57600080fd5b6000808335601e1984360301811261486757600080fd5b83016020810192503590506001600160401b0381111561488657600080fd5b8036038213156136fc57600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b602081526148d7602082016148d284613eec565b614031565b60006148e560208401613eec565b6148f26040840182614031565b506040830135606083015261490960608401613eec565b6149166080840182614031565b506149246080840184614850565b6101408060a086015261493c61016086018385614895565b925060a086013560c086015261495460c08701613eec565b915061496360e0860183614031565b61496f60e087016145b8565b9150610100614988818701846001600160801b03169052565b6149938188016145b8565b9250506101206149ad818701846001600160801b03169052565b9590950135939094019290925250919050565b634e487b7160e01b600052603260045260246000fd5b60208082526012908201527165786365656420726f79616c74792062707360701b604082015260600190565b602080825260189082015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604082015260600190565b601f821115610b8a576000816000526020600020601f850160051c81016020861015614a5d5750805b601f850160051c820191505b81811015614a7c57828155600101614a69565b505050505050565b600019600383901b1c191660019190911b1790565b6001600160401b03831115614ab057614ab061409c565b614ac483614abe835461470b565b83614a34565b6000601f841160018114614af25760008515614ae05750838201355b614aea8682614a84565b8455506133ff565b600083815260209020601f19861690835b82811015614b235786850135825560209485019460019092019101614b03565b5086821015614b405760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b8284823760609190911b6001600160601b0319169101908152601401919050565b81516001600160401b03811115614b8c57614b8c61409c565b614ba081614b9a845461470b565b84614a34565b602080601f831160018114614bcf5760008415614bbd5750858301515b614bc78582614a84565b865550614a7c565b600085815260208120601f198616915b82811015614bfe57888601518255948401946001909101908401614bdf565b5085821015614c1c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b808201808211156109a2576109a26147bb565b602081526000611ffc602083018486614895565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b600060208284031215614caa57600080fd5b610f62826145b8565b818103818111156109a2576109a26147bb565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b815260008351614d95816017850160208801613fce565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351614dc6816028840160208801613fce565b01602801949350505050565b60008251614de4818460208701613fce565b9190910192915050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612cc390830184613ff2565b600060208284031215614e3357600080fd5b8151610f6281613f9b565b8183823760009101908152919050565b600081614e5d57614e5d6147bb565b506000190190565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b6020808252601c908201527b115490cdcc8c4e881d1bdad95b88185b1c9958591e481b5a5b9d195960221b604082015260600190565b600060208284031215614ed957600080fd5b8151610f62816143a556fe8502233096d909befbda0999bb8ea2f3a6be3c138b9fbf003752a4c8bce86f6c6bd6b5318a46e5fff572d5e4258a20774aab40cc35ac7680654b9081fcc82f80416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65649f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212204e155653dfd46db0e2a29623b4f6f0356e6fc591861e62fd9fe9a95d30ec0cb564736f6c63430008170033