[ { "inputs": [], "name": "ApprovalCallerNotOwnerNorApproved", "type": "error" }, { "inputs": [], "name": "ApprovalQueryForNonexistentToken", "type": "error" }, { "inputs": [], "name": "ApproveToCaller", "type": "error" }, { "inputs": [], "name": "BalanceQueryForZeroAddress", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "newMaxSupply", "type": "uint256" } ], "name": "CannotExceedMaxSupplyOfUint64", "type": "error" }, { "inputs": [], "name": "ERC721Base_InoOnlyApprovedMinter", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "total", "type": "uint256" }, { "internalType": "uint256", "name": "maxSupply", "type": "uint256" } ], "name": "ERC721Base_MintQuantityExceedsMaxSupply", "type": "error" }, { "inputs": [ { "internalType": "enum Status", "name": "current", "type": "uint8" } ], "name": "ERC721Base_OnlyIfInoCompleted", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "maxSupply", "type": "uint256" }, { "internalType": "uint256", "name": "exceededBy", "type": "uint256" } ], "name": "ERC721Base_PostmintAndReduceSupply_QuantityExceedsMaxSupply", "type": "error" }, { "inputs": [ { "internalType": "enum Status", "name": "current", "type": "uint8" } ], "name": "ERC721Base_Premint_INOStarted", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "maxSupply", "type": "uint256" } ], "name": "ERC721Base_ReduceSupplyTo_NotGreaterEqThan", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "totalSupply", "type": "uint256" } ], "name": "ERC721Base_ReduceSupplyTo_NotLowerEqThan", "type": "error" }, { "inputs": [ { "internalType": "enum Status", "name": "current", "type": "uint8" } ], "name": "ERC721Base_SetBaseURI", "type": "error" }, { "inputs": [ { "internalType": "enum Status", "name": "current", "type": "uint8" } ], "name": "ERC721Base_SetProvenanceHash", "type": "error" }, { "inputs": [], "name": "MintERC2309QuantityExceedsLimit", "type": "error" }, { "inputs": [], "name": "MintToZeroAddress", "type": "error" }, { "inputs": [], "name": "MintZeroQuantity", "type": "error" }, { "inputs": [], "name": "OnlyOwner", "type": "error" }, { "inputs": [], "name": "OwnerQueryForNonexistentToken", "type": "error" }, { "inputs": [], "name": "OwnershipNotInitializedForExtraData", "type": "error" }, { "inputs": [], "name": "ProvenanceHashCannotBeSetAfterMintStarted", "type": "error" }, { "inputs": [], "name": "TransferCallerNotOwnerNorApproved", "type": "error" }, { "inputs": [], "name": "TransferFromIncorrectOwner", "type": "error" }, { "inputs": [], "name": "TransferToNonERC721ReceiverImplementer", "type": "error" }, { "inputs": [], "name": "TransferToZeroAddress", "type": "error" }, { "inputs": [], "name": "URIQueryForNonexistentToken", "type": "error" }, { "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": "uint256", "name": "fromTokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "toTokenId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" } ], "name": "ConsecutiveTransfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "newContractURI", "type": "string" } ], "name": "ContractURIUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "newMaxSupply", "type": "uint256" } ], "name": "MaxSupplyUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "quantity", "type": "uint256" } ], "name": "MintedAllUnsold", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "quantity", "type": "uint256" }, { "indexed": true, "internalType": "uint256", "name": "reducedBy", "type": "uint256" }, { "indexed": true, "internalType": "uint256", "name": "newSupply", "type": "uint256" } ], "name": "MintedSomeUnsoldAndReducedSupply", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "enum INFTInternal.Type", "name": "nftType", "type": "uint8" }, { "indexed": true, "internalType": "address", "name": "initialOwner", "type": "address" }, { "indexed": true, "internalType": "string", "name": "name", "type": "string" }, { "indexed": false, "internalType": "string", "name": "symbol", "type": "string" } ], "name": "NFTDeployed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferStarted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "receiver", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "quantity", "type": "uint256" }, { "indexed": true, "internalType": "uint256", "name": "startTokenId", "type": "uint256" } ], "name": "Preminted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bytes32", "name": "previousHash", "type": "bytes32" }, { "indexed": false, "internalType": "bytes32", "name": "newHash", "type": "bytes32" } ], "name": "ProvenanceHashUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "receiver", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "bps", "type": "uint256" } ], "name": "RoyaltyInfoUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "oldSupply", "type": "uint256" }, { "indexed": true, "internalType": "uint256", "name": "newSupply", "type": "uint256" } ], "name": "SupplyReduced", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "receiver", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "bps", "type": "uint256" } ], "name": "TokenRoyaltyInfoUpdated", "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": "acceptOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "baseURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "contractURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "deleteDefaultRoyalty", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "fromTokenId", "type": "uint256" }, { "internalType": "uint256", "name": "toTokenId", "type": "uint256" } ], "name": "emitBatchMetadataUpdate", "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": [ { "internalType": "address", "name": "minter", "type": "address" } ], "name": "getMintStats", "outputs": [ { "internalType": "uint256", "name": "minterNumMinted", "type": "uint256" }, { "internalType": "uint256", "name": "currentTotalSupply", "type": "uint256" }, { "internalType": "uint256", "name": "maxSupply_", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "symbol", "type": "string" }, { "internalType": "string", "name": "uri", "type": "string" }, { "internalType": "uint256", "name": "maxCap", "type": "uint256" }, { "internalType": "uint256", "name": "startTokenId", "type": "uint256" } ], "internalType": "struct INOStorage.NFTCollectionData", "name": "data", "type": "tuple" }, { "internalType": "address", "name": "initialOwner", "type": "address" }, { "internalType": "address", "name": "ino_", "type": "address" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "ino", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "minter", "type": "address" }, { "internalType": "uint256", "name": "quantity", "type": "uint256" } ], "name": "mint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "minterOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "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": "pendingOwner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "postmintAllUnsold", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "uint256", "name": "quantity", "type": "uint256" } ], "name": "postmintAndReduceSupply", "outputs": [ { "internalType": "uint256", "name": "reducedBy", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "uint256", "name": "quantity", "type": "uint256" } ], "name": "premint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "provenanceHash", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newMaxSupply", "type": "uint256" } ], "name": "reduceSupplyTo", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "resetTokenRoyalty", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "salePrice", "type": "uint256" } ], "name": "royaltyInfo", "outputs": [ { "internalType": "address", "name": "", "type": "address" }, { "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": "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": "newBaseURI", "type": "string" } ], "name": "setBaseURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "newContractURI", "type": "string" } ], "name": "setContractURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "uint96", "name": "feeNumerator", "type": "uint96" } ], "name": "setDefaultRoyalty", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "newProvenanceHash", "type": "bytes32" } ], "name": "setProvenanceHash", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "uint96", "name": "feeNumerator", "type": "uint96" } ], "name": "setTokenRoyalty", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "startTokenId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "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": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
6080806040523461001657612bfe908161001c8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c80629a91cb146102b657806301ffc9a7146102b157806304634d8d146102ac578063046431f6146102a757806306fdde03146102a2578063081812fc1461029d578063095ea7b314610298578063099b6bfa1461029357806318160ddd1461028e57806323b872dd146102895780632a55205a146102845780632b5e3e261461027f578063395792971461027a57806340c10f191461027557806342842e0e1461027057806355f804b31461026b5780635944c753146102665780636352211e146102615780636c0360eb1461025c57806370a0823114610257578063715018a61461025257806379ba50971461024d57806383a5cc1614610248578063840e15d4146102435780638a616bc01461023e5780638d1197b0146102395780638da5cb5b14610234578063938e3d7b1461022f57806395d89b411461022a5780639e942ace14610225578063a22cb46514610220578063a48301141461021b578063aa1b103f14610216578063b88d4fde14610211578063c6ab67a31461020c578063c87b56dd14610207578063d5abeb0114610202578063e30c3978146101fd578063e6798baa146101f8578063e8a3d485146101f3578063e985e9c5146101ee5763f2fde38b146101e957600080fd5b611af2565b611a95565b6119bd565b61199e565b611975565b611956565b61188d565b61186e565b61180f565b611720565b6116cb565b61163d565b611609565b611561565b611416565b6113ed565b611270565b611243565b6111e5565b611148565b6110c3565b61105b565b611000565b610fd0565b610fa1565b610e51565b610d07565b610c96565b610b98565b610b6e565b610a5d565b6109ce565b6109b5565b610951565b6108dd565b610811565b6107bd565b6106d8565b61060b565b6104e9565b6103fa565b610302565b600435906001600160a01b03821682036102d157565b600080fd5b602435906001600160a01b03821682036102d157565b604435906001600160a01b03821682036102d157565b346102d15760403660031901126102d15761031b6102bb565b602435610326612181565b61032e6121d9565b60655461013a549003918183018093116103b257610104908154938481116103b75784039384116103b2576103ae91610368848693612260565b60655461013a5461037991036123f9565b546040519485947fd561ae6ef7871841615307a17faaa1b1e38fe82e6b9d46171a43467a83d2e0f8600080a482526020820190565b0390f35b611b5f565b848082039182116103b257604051633dfe357f60e21b815260048101919091526024810191909152604490fd5b0390fd5b6001600160e01b03198116036102d157565b346102d15760203660031901126102d1576103ae60043561041a816103e8565b63ffffffff60e01b1663152a902d60e11b81149081156104ac575b811561044f575b5060405190151581529081906020820190565b632483248360e11b811491508115610469575b503861043c565b6301ffc9a760e01b81149150811561049b575b811561048a575b5038610462565b635b5e139f60e01b14905038610483565b6380ac58cd60e01b8114915061047c565b6301ffc9a760e01b81149150610435565b602435906001600160601b03821682036102d157565b604435906001600160601b03821682036102d157565b346102d15760403660031901126102d1576105026102bb565b61050a6104bd565b610512612459565b6105296127106001600160601b0383161115612483565b6001600160a01b038216156105c6577ff21fccf4d64d86d532c4e4eb86c007b6ad57a460c27d724188625e755ec6cf6d9161059a6105656117ae565b6001600160a01b0383168082526001600160601b0385166020909201919091526001600160a01b031960a085901b1617603355565b604080516001600160a01b0390921682526001600160601b03909216602082015290819081015b0390a1005b60405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c6964207265636569766572000000000000006044820152606490fd5b346102d15760203660031901126102d1576106246102bb565b61062c612181565b6106346121d9565b610104549060655461013a54900382039182116103b2578161065591612260565b7f233ea847ac6210b1603897271e7e75589fc39b1af0263d9e671b9c3137a6c04a600080a2005b60005b83811061068f5750506000910152565b818101518382015260200161067f565b906020916106b88151809281855285808601910161067c565b601f01601f1916010190565b9060206106d592818152019061069f565b90565b346102d1576000806003193601126107ba576040519080606754906106fc82611b91565b8085529160209160019182811690811561078d5750600114610735575b6103ae866107298188038261178d565b604051918291826106c4565b9350606784527f9787eeb91fe3101235e4a76063c7023ecb40f923f97916639c598592fa30d6ae5b83851061077a57505050508101602001610729826103ae38610719565b805486860184015293820193810161075d565b90508695506103ae9693506020925061072994915060ff191682840152151560051b820101929338610719565b80fd5b346102d15760203660031901126102d1576004356107da816124e2565b156107ff57600052606b602052602060018060a01b0360406000205416604051908152f35b6040516333d1c03960e21b8152600490fd5b346102d15760403660031901126102d15761082a6102bb565b602435906001600160a01b03806108408461251f565b16918233036108aa575b6108818161086286600052606b602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b16907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600080a4005b6000838152606c6020908152604080832033845290915290205460ff1661084a576040516367d9dca160e11b8152600490fd5b346102d15760203660031901126102d1576004356108f9612459565b60655461013a540361093f5760407f7c22004198bf87da0f0dab623c72e66ca1200f4454aa3b9ca30f436275428b7c9161010790808254925582519182526020820152a1005b60405163e03264af60e01b8152600490fd5b346102d15760003660031901126102d1576020610978606554606654900361013a54900390565b604051908152f35b60609060031901126102d1576001600160a01b039060043582811681036102d1579160243590811681036102d1579060443590565b346102d1576109cc6109c636610980565b91611c83565b005b346102d15760403660031901126102d15760243560043560005260346020526109fa6040600020611e7e565b80519091906001600160a01b031615610a4d575b6001600160601b03602083015116908181029181830414901517156103b2579051604080516001600160a01b0390921682526127109092046020820152f35b9050610a57611e58565b90610a0e565b346102d15760403660031901126102d157610a766102bb565b602435610a81612181565b61013b54600490602090610aab90610a9f906001600160a01b031681565b6001600160a01b031690565b60405163f9020e3360e01b815292839182905afa908115610b6957600091610b3a575b50610ad881611edd565b80610b1d5750610ae88183612260565b61013a54916001600160a01b03167f2220f9ebe859d26d856c27c871c0d79aa5f6daa862dd4bf250abb427bbb63570600080a4005b604051633f43da4b60e01b81529081906103e49060048301611eec565b610b5c915060203d602011610b62575b610b54818361178d565b810190611ea3565b38610ace565b503d610b4a565b611ebb565b346102d15760003660031901126102d15761013b546040516001600160a01b039091168152602090f35b346102d15760403660031901126102d157610bb16102bb565b6024356101086002815414610c51576002905561013b546001600160a01b03163303610c3f57610be98160655461013a549003611b75565b9161010454809311610c0a57610bff9250612260565b6109cc600161010855565b5060655461013a54610c1d929103611b75565b604051634c2dec5360e11b815260048101919091526024810191909152604490fd5b604051631a676a0b60e31b8152600490fd5b60405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606490fd5b346102d1576109cc610ca736610980565b9060405192610cb584611772565b60008452612126565b9060206003198301126102d1576004356001600160401b03928382116102d157806023830112156102d15781600401359384116102d157602484830101116102d1576024019190565b346102d157610d1536610cbe565b610d1d612459565b6001600160401b038111610e4c5761010590610d4281610d3d8454611b91565b611eff565b6000601f8211600114610ddc578190610d739394600092610dd1575b50508160011b916000199060031b1c19161790565b90555b60655460665461013a54910303610d8957005b7f6bd5c950a8d8df17f772f5af37cb3655737899cbf903264b9795592da439661c61013a54610db9606554611b82565b604080519283526020830191909152819081016105c1565b013590503880610d5e565b610105600052601f19821693600080516020612ba983398151915291805b868110610e345750836001959610610e1a575b505050811b019055610d76565b0135600019600384901b60f8161c19169055388080610e0d565b90926020600181928686013581550194019101610dfa565b611741565b346102d15760603660031901126102d157600435610e6d6102d6565b610e756104d3565b91610e7e612459565b610e956127106001600160601b0385161115612483565b6001600160a01b03821615610f5c576105c17f9338e34f07c76b684dafe21119db770832f33bf2ade18eb408993de1d8d3fe5b93610f2b610ed46117ae565b6001600160a01b03861681526001600160601b0383166020820152610f03856000526034602052604060002090565b815160209092015160a01b6001600160a01b0319166001600160a01b03909216919091179055565b604080519384526001600160a01b0390941660208401526001600160601b0316928201929092529081906060820190565b60405162461bcd60e51b815260206004820152601b60248201527f455243323938313a20496e76616c696420706172616d657465727300000000006044820152606490fd5b346102d15760203660031901126102d15760206001600160a01b03610fc760043561251f565b16604051908152f35b346102d15760003660031901126102d1576103ae610fec611bcb565b60405191829160208352602083019061069f565b346102d15760203660031901126102d1576001600160a01b036110216102bb565b16801561104957600052606a60205260206001600160401b0360406000205416604051908152f35b6040516323d3ad8160e21b8152600490fd5b346102d1576000806003193601126107ba57611075612181565b60d280546001600160a01b031990811690915560a08054918216905581906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b346102d15760003660031901126102d15760d254336001600160a01b03909116036110f1576109cc3361258e565b60405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608490fd5b346102d15760203660031901126102d1576004356111646121d9565b6101045490818110156111cc5760655461013a549003808211156111b25750806109cc927fbba296472f2135056aa4038d0d43f8b8dd1ff674c970ca244557fda3bf2bdead600080a36123f9565b60405163242cb5af60e01b81526004810191909152602490fd5b60405163697fbb6f60e11b815260048101839052602490fd5b346102d15760203660031901126102d1576001600160a01b036112066102bb565b16600052606a60205260606001600160401b0360406000205460401c1660655461013a549003610104549060405192835260208301526040820152f35b346102d15760203660031901126102d15761125c612459565b600435600090815260346020526040812055005b346102d1576003196060368201126102d1576004356001600160401b0381116102d15760a0816004019282360301126102d15760007f4eea6ed37565af9c6743c25e6f5df9ee6ae35934012fd06c4a4be798434e66e8602461134661133e6112d66102d6565b966112df6102ec565b61132587549161130660ff8460081c1615809481956113df575b81156113bf575b506125df565b82611319600160ff196000541617600055565b6113a6575b8a84612642565b611364575b61133481806120b7565b94909701906120b7565b9290956120e9565b9461135f60405192839260018060a01b031696836120fe565b0390a4005b61137461ff001960005416600055565b604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602090a161132a565b6113ba61010061ff00196000541617600055565b61131e565b303b159150816113d1575b5038611300565b6001915060ff1614386113ca565b600160ff82161091506112f9565b346102d15760003660031901126102d15760a0546040516001600160a01b039091168152602090f35b346102d15761142436610cbe565b61142c612459565b6001600160401b038111610e4c57610106916114518261144c8554611b91565b611f60565b600092601f83116001146114bf576114a283807f905d981207a7d0b6c62cc46ab0be2a076d0298e4a86d0ab79882dbd01ac37378966000916114b4575b508160011b916000199060031b1c19161790565b90555b6105c1604051928392836120fe565b90508401353861148e565b610106600052601f198316937fc9ef9fceea91e87b2c84ea400a44fde78842aae8aa24cd4b502ce5fb4d91e63b90805b8681106115495750847f905d981207a7d0b6c62cc46ab0be2a076d0298e4a86d0ab79882dbd01ac37378961061152f575b5050600183811b0190556114a5565b830135600019600386901b60f8161c191690553880611520565b909160206001819285880135815501930191016114ef565b346102d1576000806003193601126107ba5760405190806068549061158582611b91565b8085529160209160019182811690811561078d57506001146115b1576103ae866107298188038261178d565b9350606884527fa2153420d844928b4421650203c77babc8b33d7f2e7b450e2966db0c220977535b8385106115f657505050508101602001610729826103ae38610719565b80548686018401529382019381016115d9565b346102d15760203660031901126102d157600435600052606d602052602060018060a01b0360406000205416604051908152f35b346102d15760403660031901126102d1576116566102bb565b602435908115158092036102d157336000908152606c602090815260408083206001600160a01b0385168452909152902060ff1981541660ff841617905560405191825260018060a01b0316907f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160203392a3005b346102d15760403660031901126102d1576116e4612459565b60408051600435815260243560208201527f6bd5c950a8d8df17f772f5af37cb3655737899cbf903264b9795592da439661c91819081016105c1565b346102d1576000806003193601126107ba5761173a612459565b8060335580f35b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b03821117610e4c57604052565b602081019081106001600160401b03821117610e4c57604052565b90601f801991011681019081106001600160401b03821117610e4c57604052565b604051906117bb82611757565b565b6001600160401b038111610e4c57601f01601f191660200190565b9291926117e4826117bd565b916117f2604051938461178d565b8294818452818301116102d1578281602093846000960137010152565b346102d15760803660031901126102d1576118286102bb565b6118306102d6565b606435916001600160401b0383116102d157366023840112156102d1576118646109cc9336906024816004013591016117d8565b9160443591612126565b346102d15760003660031901126102d157602061010754604051908152f35b346102d15760203660031901126102d1576004356118aa816124e2565b15611944576118b7611bcb565b80511561192a5760405160a08101604052608081019260008452925b6000190192600a9060308282060185530492836118d3576103ae93506119189261191e610729936080601f19948581019203018152604051958693602085019061216a565b9061216a565b0390810183528261178d565b50506103ae60405161193b81611772565b60008152610729565b604051630a14c4b560e41b8152600490fd5b346102d15760003660031901126102d157602061010454604051908152f35b346102d15760003660031901126102d15760d2546040516001600160a01b039091168152602090f35b346102d15760003660031901126102d157602061013a54604051908152f35b346102d1576000806003193601126107ba57604051908061010680546119e281611b91565b80865292602092600192808416908115611a665750600114611a0f575b6103ae876107298189038261178d565b815293507fc9ef9fceea91e87b2c84ea400a44fde78842aae8aa24cd4b502ce5fb4d91e63b5b838510611a5357505050508101602001610729826103ae38806119ff565b8054868601840152938201938101611a35565b9150508695506103ae9693506020925061072994915060ff191682840152151560051b820101929338806119ff565b346102d15760403660031901126102d157602060ff611ae6611ab56102bb565b611abd6102d6565b6001600160a01b039182166000908152606c865260408082209290931681526020919091522090565b54166040519015158152f35b346102d15760203660031901126102d157611b0b6102bb565b611b13612181565b60d280546001600160a01b0319166001600160a01b0392831690811790915560a0549091167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700600080a3005b634e487b7160e01b600052601160045260246000fd5b919082018092116103b257565b6000198101919082116103b257565b90600182811c92168015611bc1575b6020831014611bab57565b634e487b7160e01b600052602260045260246000fd5b91607f1691611ba0565b6040519060008261010591825492611be284611b91565b80845293602091600191828116908115611c5d5750600114611c0e575b5050506117bb9250038361178d565b6000908152600080516020612ba98339815191529590935091905b828410611c4557506117bb945050508101602001388080611bff565b85548885018301529485019487945092810192611c29565b92505050602092506117bb94915060ff191682840152151560051b820101388080611bff565b90611c8d8361251f565b6001600160a01b0383811692828216849003611e47576000868152606b6020526040902080549092611cd26001600160a01b03881633908114908414171590565b1590565b611dec575b8216958615611dda57611d3c93611d0892611dd0575b506001600160a01b03166000908152606a6020526040902090565b80546000190190556001600160a01b03166000818152606a60205260409020805460010190554260a01b17600160e11b1790565b611d50856000526069602052604060002090565b55600160e11b811615611d86575b507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4565b60018401611d9e816000526069602052604060002090565b5415611dab575b50611d5e565b6065548114611da557611dc8906000526069602052604060002090565b553880611da5565b6000905538611ced565b604051633a954ecd60e21b8152600490fd5b611e30611cce611e2933611e128b60018060a01b0316600052606c602052604060002090565b9060018060a01b0316600052602052604060002090565b5460ff1690565b15611cd757604051632ce44b5f60e11b8152600490fd5b60405162a1148160e81b8152600490fd5b60405190611e6582611757565b6033546001600160a01b038116835260a01c6020830152565b90604051611e8b81611757565b91546001600160a01b038116835260a01c6020830152565b908160209103126102d1575160048110156102d15790565b6040513d6000823e3d90fd5b634e487b7160e01b600052602160045260246000fd5b60041115611ee757565b611ec7565b919060208301926004821015611ee75752565b601f8111611f0b575050565b600090610105600052600080516020612ba9833981519152906020601f850160051c83019410611f56575b601f0160051c01915b828110611f4b57505050565b818155600101611f3f565b9092508290611f36565b601f8111611f6c575050565b6000906101066000527fc9ef9fceea91e87b2c84ea400a44fde78842aae8aa24cd4b502ce5fb4d91e63b906020601f850160051c83019410611fc9575b601f0160051c01915b828110611fbe57505050565b818155600101611fb2565b9092508290611fa9565b601f8111611fdf575050565b60009060676000527f9787eeb91fe3101235e4a76063c7023ecb40f923f97916639c598592fa30d6ae906020601f850160051c8301941061203b575b601f0160051c01915b82811061203057505050565b818155600101612024565b909250829061201b565b601f8111612051575050565b60009060686000527fa2153420d844928b4421650203c77babc8b33d7f2e7b450e2966db0c22097753906020601f850160051c830194106120ad575b601f0160051c01915b8281106120a257505050565b818155600101612096565b909250829061208d565b903590601e19813603018212156102d157018035906001600160401b0382116102d1576020019181360383136102d157565b81604051928392833781016000815203902090565b90918060409360208452816020850152848401376000828201840152601f01601f1916010190565b929190612134828286611c83565b803b612141575b50505050565b61214a93612901565b15612158573880808061213b565b6040516368d2bf6b60e11b8152600490fd5b9061217d6020928281519485920161067c565b0190565b60a0546001600160a01b0316330361219557565b606460405162461bcd60e51b815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b61013b5460405163f9020e3360e01b815290602090829060049082906001600160a01b03165afa908115610b6957600091612241575b5061221981611edd565b600281036122245750565b604051632f55632f60e11b81529081906103e49060048301611eec565b61225a915060203d602011610b6257610b54818361178d565b3861220f565b906040805161226e81611772565b6000938482526065549084156123e7576001600160a01b0381166000908152606a6020526040902080546801000000000000000187020190556001916001600160a01b0382164260a01b84881460e11b17176122d4826000526069602052604060002090565b55808601906001600160a01b038316907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908590819080858d868180a48661232682608052606d60a052604060802090565b55015b8481036123c257505050156123b157606555803b61234a575b505050505050565b6065549485039180805b612371575b505050505050606554036107ba578080808080612342565b156123a4575b86612389611cce868487019686612857565b6123935781612354565b85516368d2bf6b60e11b8152600490fd5b8583106123775780612359565b604051622e076360e81b8152600490fd5b856123d782608052606d60a052604060802090565b5580848c858180a4018590612329565b60405163b562e8dd60e01b8152600490fd5b612401612459565b6001600160401b038111612441576020817f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9261010455604051908152a1565b6024906040519063b43e913760e01b82526004820152fd5b60018060a01b0360a054163314303314171561247157565b604051635fc483c560e01b8152600490fd5b1561248a57565b60405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b6064820152608490fd5b8061013a5411159081612513575b816124f9575090565b90506000526069602052600160e01b604060002054161590565b606554811091506124f0565b808061013a54111561253e575b604051636f96cda160e11b8152600490fd5b60655481101561252c57600052606960205260406000205490600160e01b821661252c575b811561256d575090565b905060001901612587816000526069602052604060002090565b5490612563565b6001600160601b0360a01b908160d2541660d25560a05460018060a01b03809216809382161760a055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3565b156125e657565b60405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608490fd5b6001600160401b036060820135818111612441576101045561266760408301836120b7565b90918111610e4c576101059161268182610d3d8554611b91565b600090601f831160011461273757926126bf836127089461271597946117bb9a9997600092610dd15750508160011b916000199060031b1c19161790565b90555b6126d0608082013561013a55565b6127026126f06126fa6126e384806120b7565b92909460208101906120b7565b94909236916117d8565b9236916117d8565b9061298a565b612710612b86565b61258e565b61013b80546001600160a01b0319166001600160a01b03909216919091179055565b610105600052600080516020612ba983398151915291601f198416815b81811061279e57509361271596936117bb99989693600193836127089810612784575b505050811b0190556126c2565b0135600019600384901b60f8161c19169055388080612777565b91936020600181928787013581550195019201612754565b908160209103126102d157516106d5816103e8565b6106d5939260809260018060a01b03168252600060208301526040820152816060820152019061069f565b6001600160a01b0391821681529116602082015260408101919091526080606082018190526106d59291019061069f565b3d15612852573d90612838826117bd565b91612846604051938461178d565b82523d6000602084013e565b606090565b61288060209160009394604051948580948193630a85bd0160e11b998a845233600485016127cb565b03926001600160a01b03165af1600091816128d0575b506128c2576128a3612827565b805190816128bd576040516368d2bf6b60e11b8152600490fd5b602001fd5b6001600160e01b0319161490565b6128f391925060203d6020116128fa575b6128eb818361178d565b8101906127b6565b9038612896565b503d6128e1565b92602091612880936000604051809681958294630a85bd0160e11b9a8b855233600486016127f6565b1561293157565b60405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608490fd5b61299b60ff60005460081c1661292a565b8051906001600160401b038211610e4c576129c0826129bb606754611b91565b611fd3565b602090816001601f851114612a16575091806129f7926129ff9594600092612a0b5750508160011b916000199060031b1c19161790565b606755612aa2565b6117bb61013a54606555565b015190503880610d5e565b60676000529190601f1984167f9787eeb91fe3101235e4a76063c7023ecb40f923f97916639c598592fa30d6ae936000905b828210612a8a5750509160019391856129ff97969410612a71575b505050811b01606755612aa2565b015160001960f88460031b161c19169055388080612a63565b80600186978294978701518155019601940190612a48565b9081516001600160401b038111610e4c57612ac781612ac2606854611b91565b612045565b602080601f8311600114612afe57508190612af99394600092612a0b5750508160011b916000199060031b1c19161790565b606855565b90601f19831694612b3160686000527fa2153420d844928b4421650203c77babc8b33d7f2e7b450e2966db0c2209775390565b926000905b878210612b6e575050836001959610612b55575b505050811b01606855565b015160001960f88460031b161c19169055388080612b4a565b80600185968294968601518155019501930190612b36565b612ba060ff60005460081c16612b9b8161292a565b61292a565b60016101085556fefc62abc8c0fc47c2d92f5aec99bf8b60f375828e14394d89345cae11a9867371a26469706673582212204a4df16c5e71ffd5ff92a819737cef9b7650ca9dea9872ee7cc3f975aed6f83f64736f6c63430008170033