[ { "inputs": [], "name": "ERC721AddressZeroIsNotaValidOwner", "type": "error" }, { "inputs": [], "name": "ERC721ApprovalToCurrentOwner", "type": "error" }, { "inputs": [], "name": "ERC721ApproveCallerIsNotOwnerNorApprovedForAll", "type": "error" }, { "inputs": [], "name": "ERC721ApproveToCaller", "type": "error" }, { "inputs": [], "name": "ERC721InvalidTokenId", "type": "error" }, { "inputs": [], "name": "ERC721MintToTheZeroAddress", "type": "error" }, { "inputs": [], "name": "ERC721NotApprovedOrOwner", "type": "error" }, { "inputs": [], "name": "ERC721TokenAlreadyMinted", "type": "error" }, { "inputs": [], "name": "ERC721TransferFromIncorrectOwner", "type": "error" }, { "inputs": [], "name": "ERC721TransferToNonReceiverImplementer", "type": "error" }, { "inputs": [], "name": "ERC721TransferToTheZeroAddress", "type": "error" }, { "inputs": [], "name": "IndexOutOfBounds", "type": "error" }, { "inputs": [], "name": "RMRKApprovalForAssetsToCurrentOwner", "type": "error" }, { "inputs": [], "name": "RMRKApproveForAssetsCallerIsNotOwnerNorApprovedForAll", "type": "error" }, { "inputs": [], "name": "RMRKAssetAlreadyExists", "type": "error" }, { "inputs": [], "name": "RMRKBadPriorityListLength", "type": "error" }, { "inputs": [], "name": "RMRKCannotTransferSoulbound", "type": "error" }, { "inputs": [], "name": "RMRKIdZeroForbidden", "type": "error" }, { "inputs": [], "name": "RMRKIndexOutOfRange", "type": "error" }, { "inputs": [], "name": "RMRKMaxPendingAssetsReached", "type": "error" }, { "inputs": [], "name": "RMRKNoAssetMatchingId", "type": "error" }, { "inputs": [], "name": "RMRKNotApprovedForAssetsOrOwner", "type": "error" }, { "inputs": [], "name": "RMRKTokenDoesNotHaveAsset", "type": "error" }, { "inputs": [], "name": "RMRKUnexpectedAssetId", "type": "error" }, { "inputs": [], "name": "RMRKUnexpectedNumberOfAssets", "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": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "ApprovalForAllForAssets", "type": "event" }, { "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": "ApprovalForAssets", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": true, "internalType": "uint64", "name": "assetId", "type": "uint64" }, { "indexed": true, "internalType": "uint64", "name": "replacesId", "type": "uint64" } ], "name": "AssetAccepted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" }, { "indexed": true, "internalType": "uint64", "name": "assetId", "type": "uint64" }, { "indexed": true, "internalType": "uint64", "name": "replacesId", "type": "uint64" } ], "name": "AssetAddedToTokens", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "AssetPrioritySet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": true, "internalType": "uint64", "name": "assetId", "type": "uint64" } ], "name": "AssetRejected", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint64", "name": "assetId", "type": "uint64" } ], "name": "AssetSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "bool", "name": "state", "type": "bool" } ], "name": "Soulbound", "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": "RMRK_INTERFACE", "outputs": [ { "internalType": "bytes4", "name": "rmrkInterface", "type": "bytes4" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "VERSION", "outputs": [ { "internalType": "string", "name": "version", "type": "string" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "index", "type": "uint256" }, { "internalType": "uint64", "name": "assetId", "type": "uint64" } ], "name": "acceptAsset", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint64", "name": "token_id", "type": "uint64" }, { "internalType": "string", "name": "metadataURI", "type": "string" } ], "name": "addAssets", "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": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "approveForAssets", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "balance", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getActiveAssetPriorities", "outputs": [ { "internalType": "uint64[]", "name": "priorities", "type": "uint64[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getActiveAssets", "outputs": [ { "internalType": "uint64[]", "name": "assetIds", "type": "uint64[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "approved", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApprovedForAssets", "outputs": [ { "internalType": "address", "name": "approved", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint64", "name": "assetId", "type": "uint64" } ], "name": "getAssetMetadata", "outputs": [ { "internalType": "string", "name": "metadata", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint64", "name": "newAssetId", "type": "uint64" } ], "name": "getAssetReplacements", "outputs": [ { "internalType": "uint64", "name": "replacesAssetId", "type": "uint64" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getPendingAssets", "outputs": [ { "internalType": "uint64[]", "name": "assetIds", "type": "uint64[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getTokens", "outputs": [ { "internalType": "uint64[]", "name": "", "type": "uint64[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "isApproved", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAllForAssets", "outputs": [ { "internalType": "bool", "name": "isApproved", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" } ], "name": "isTransferable", "outputs": [ { "internalType": "bool", "name": "isTransferable_", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "metadataURI", "type": "string" }, { "internalType": "bool", "name": "soulBound", "type": "bool" } ], "name": "mint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "maxRejections", "type": "uint256" } ], "name": "rejectAllAssets", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "index", "type": "uint256" }, { "internalType": "uint64", "name": "assetId", "type": "uint64" } ], "name": "rejectAsset", "outputs": [], "stateMutability": "nonpayable", "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": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAllForAssets", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint64[]", "name": "priorities", "type": "uint64[]" } ], "name": "setPriority", "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": "tokenCount", "outputs": [ { "internalType": "uint64", "name": "", "type": "uint64" } ], "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" } ]
6080604052600d80546001600160801b031916680100000000000000011790556000600e5534801561003057600080fd5b50612632806100406000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c80637280281e11610104578063b88d4fde116100a2578063e7de4de411610071578063e7de4de41461047a578063e985e9c51461048d578063fc3517c8146104c9578063ffa1ad74146104dc57600080fd5b8063b88d4fde1461040a578063de8e602c1461041d578063df6f556b14610430578063e467a48f1461046757600080fd5b806391a6262f116100de57806391a6262f146103b75780639f181b5e146103ca578063a22cb465146103ef578063aa6ca8081461040257600080fd5b80637280281e1461037c5780638507dc281461038f5780638d4f3bf5146103a257600080fd5b806345349e8c1161017c5780635ea72f361161014b5780635ea72f36146103225780635f257f29146103355780636352211e1461034857806370a082311461035b57600080fd5b806345349e8c146102bc57806351532e5a146102cf5780635e2e3292146102ef5780635e94354a1461030f57600080fd5b806322e6d160116101b857806322e6d1601461024757806322f6da9c1461028357806323b872dd1461029657806342842e0e146102a957600080fd5b806301ffc9a7146101df578063081812fc14610207578063095ea7b314610232575b600080fd5b6101f26101ed366004611e9c565b6104fd565b60405190151581526020015b60405180910390f35b61021a610215366004611ec0565b61051a565b6040516001600160a01b0390911681526020016101fe565b610245610240366004611ef0565b610541565b005b6101f2610255366004611f1a565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b610245610291366004611f64565b6105cd565b6102456102a4366004611f99565b6105e8565b6102456102b7366004611f99565b6105fd565b6102456102ca366004612080565b610618565b6102e26102dd366004611ec0565b610735565b6040516101fe91906120cd565b6103026102fd36600461211a565b6107c9565b6040516101fe9190612183565b6102e261031d366004611ec0565b6108b8565b610245610330366004611ef0565b610921565b6102456103433660046121a6565b6109a8565b61021a610356366004611ec0565b610a2e565b61036e6103693660046121ea565b610a69565b6040519081526020016101fe565b6102e261038a366004611ec0565b610aae565b61024561039d366004612205565b610b17565b60405163524d524b60e01b81526020016101fe565b6101f26103c536600461222f565b610bac565b600d546001600160401b03165b6040516001600160401b0390911681526020016101fe565b6102456103fd366004612205565b610bed565b6102e2610bfc565b610245610418366004612262565b610cd6565b61024561042b3660046122dd565b610cf3565b6103d761043e36600461211a565b60009182526001602090815260408084206001600160401b039384168552909152909120541690565b61021a610475366004611ec0565b610d08565b61024561048836600461235b565b610d2f565b6101f261049b366004611f1a565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205460ff1690565b6102456104d7366004611f64565b610d43565b604080518082019091526005815264191719971960d91b6020820152610302565b60006391a6262f60e01b6001600160e01b03198316145b92915050565b600061052582610d58565b506000908152600960205260409020546001600160a01b031690565b600061054c82610a2e565b9050806001600160a01b0316836001600160a01b03160361058057604051630591db6d60e01b815260040160405180910390fd5b336001600160a01b038216148015906105a0575061059e813361049b565b155b156105be57604051634c12315960e11b815260040160405180910390fd5b6105c88383610d90565b505050565b826105d781610dfe565b6105e2848484610e25565b50505050565b806105f281610e94565b6105e2848484610ebb565b6105c883838360405180602001604052806000815250610cd6565b600061062c836001600160401b0316610a2e565b90506001600160a01b038116331461068a5760405162461bcd60e51b815260206004820152601960248201527f6f6e6c79206f776e65722063616e206164642061737365747300000000000000604482015260640160405180910390fd5b600d546106a790600160401b90046001600160401b03168361100a565b600d546106c8906001600160401b0380861691600160401b900416806110d0565b600e54600d546106eb916001600160401b0380871692600160401b9004166112c6565b600d8054600160401b90046001600160401b031690600861070b83612393565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050505050565b6000818152600360209081526040918290208054835181840281018401909452808452606093928301828280156107bd57602002820191906000526020600020906000905b82829054906101000a90046001600160401b03166001600160401b03168152602001906008019060208260070104928301926001038202915080841161077a5790505b50505050509050919050565b60008281526005602090815260408083206001600160401b038516845290915290205460609060ff1661080f57604051631b9928fd60e31b815260040160405180910390fd5b6001600160401b03821660009081526020819052604090208054610832906123b9565b80601f016020809104026020016040519081016040528092919081815260200182805461085e906123b9565b80156108ab5780601f10610880576101008083540402835291602001916108ab565b820191906000526020600020905b81548152906001019060200180831161088e57829003601f168201915b5050505050905092915050565b6000818152600460209081526040918290208054835181840281018401909452808452606093928301828280156107bd57600091825260209182902080546001600160401b0316845290820283019290916008910180841161077a575094979650505050505050565b600061092c82610a2e565b9050806001600160a01b0316836001600160a01b031603610960576040516375f45abd60e01b815260040160405180910390fd5b336001600160a01b03821614801590610980575061097e8133610255565b155b1561099e576040516357a2e94960e11b815260040160405180910390fd5b6105c88383611508565b600d546109bf9033906001600160401b0316611576565b600d546109d5906001600160401b031683610618565b600d546109ec906001600160401b03168215611684565b600d80546001600160401b0316906000610a0583612393565b91906101000a8154816001600160401b0302191690836001600160401b03160217905550505050565b6000818152600760205260409020546001600160a01b031680610a645760405163089ba7e160e41b815260040160405180910390fd5b919050565b60006001600160a01b038216610a9257604051633bb9143360e11b815260040160405180910390fd5b506001600160a01b031660009081526008602052604090205490565b6000818152600260209081526040918290208054835181840281018401909452808452606093928301828280156107bd57600091825260209182902080546001600160401b0316845290820283019290916008910180841161077a575094979650505050505050565b6001600160a01b0382163303610b40576040516375f45abd60e01b815260040160405180910390fd5b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f0cff4fcf777050010027190b8061fd8bfd1de16d81b1f94e9752df1427a26235910160405180910390a35050565b60006001600160a01b0383161580610bcb57506001600160a01b038216155b80610be557506000848152600c602052604090205460ff16155b949350505050565b610bf83383836116db565b5050565b600d54606090600090610c1a906001906001600160401b03166123ed565b6001600160401b03166001600160401b03811115610c3a57610c3a611fd5565b604051908082528060200260200182016040528015610c63578160200160208202803683370190505b50905060015b600d546001600160401b039081169082161015610cd0578082610c8d6001836123ed565b6001600160401b031681518110610ca657610ca6612414565b6001600160401b039092166020928302919091019091015280610cc881612393565b915050610c69565b50919050565b81610ce081610e94565b610cec8585858561177a565b5050505050565b82610cfd81610dfe565b6105e28484846117ae565b6000610d1382610d58565b506000908152600b60205260409020546001600160a01b031690565b81610d3981610dfe565b6105c88383611828565b82610d4d81610dfe565b6105e28484846112c6565b6000818152600760205260409020546001600160a01b0316610d8d5760405163089ba7e160e41b815260040160405180910390fd5b50565b600081815260096020526040902080546001600160a01b0319166001600160a01b0384169081179091558190610dc582610a2e565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b610e083382611925565b610d8d57604051635d64832960e01b815260040160405180910390fd5b610e308383836119a3565b610e3b838383611a4b565b60008381526005602090815260408083206001600160401b0385168085529252808320805460ff1916905551909185917f1010837a46db9510cad56c9b63e97183557a136e9d4ddbec309ce52c99afb1249190a3505050565b610e9e3382611a99565b610d8d576040516302728a9d60e41b815260040160405180910390fd5b826001600160a01b0316610ece82610a2e565b6001600160a01b031614610ef55760405163e146af6f60e01b815260040160405180910390fd5b6001600160a01b038216610f1c576040516338f646ff60e21b815260040160405180910390fd5b610f27838383611b05565b600081815260096020908152604080832080546001600160a01b0319908116909155600b8352818420805490911690556001600160a01b038616835260089091528120805460019290610f7b90849061242a565b90915550506001600160a01b0382166000908152600860205260408120805460019290610fa990849061243d565b909155505060008181526007602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6001600160401b038216611031576040516312c33ce360e01b815260040160405180910390fd5b6001600160401b03821660009081526020819052604081208054611054906123b9565b90501115611075576040516308fe3c3160e41b815260040160405180910390fd5b6001600160401b03821660009081526020819052604090206110978282612496565b506040516001600160401b038316907f3cd061096eaf881067d936308fbd8b81d060c45ab2ec910c02b953162befc10990600090a25050565b60008381526005602090815260408083206001600160401b038616845290915290205460ff1615611114576040516308fe3c3160e41b815260040160405180910390fd5b6001600160401b03821660009081526020819052604081208054611137906123b9565b90500361115757604051632aa5eff960e11b815260040160405180910390fd5b6000838152600360205260409020546080116111865760405163bade3a7b60e01b815260040160405180910390fd5b60008381526005602090815260408083206001600160401b03808716808652918452828520805460ff1916600190811790915588865260038086529386208054918201815586529390942060048404018054600894909316939093026101000a908102908402199091161790558116156112345760008381526001602090815260408083206001600160401b0386811685529252909120805467ffffffffffffffff19169183169190911790555b60408051600180825281830190925260009160208083019080368337019050509050838160008151811061126a5761126a612414565b602002602001018181525050816001600160401b0316836001600160401b03167f4a85a0221f784dbe75db7c29c422f474c15bde9211a98e50a30018fa8dfa937b836040516112b99190612555565b60405180910390a36105e2565b6112d18383836119a3565b60008381526001602090815260408083206001600160401b038086168552925282205416908082156113a9576113a3836002600089815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561139057602002820191906000526020600020906000905b82829054906101000a90046001600160401b03166001600160401b03168152602001906008019060208260070104928301926001038202915080841161134d5790505b5050505050611b2d90919063ffffffff16565b90925090505b801561142a5760008681526002602052604090208054859190849081106113d2576113d2612414565b600091825260208083206004830401805460039093166008026101000a6001600160401b038181021990941695841602949094179093558882526005835260408083209187168352925220805460ff191690556114b3565b60008681526004602081815260408084206002835290842080548254600180820185559387528487208682040180546003928316600890810261010090810a6001600160401b038181021990941696841602959095179092558454958601855593885294872095840490950180549390951690930290920a808302199091169188160217905592505b6114be868686611a4b565b826001600160401b0316846001600160401b0316877f3f2709a99f6c06b4e57bbb38eb0134332f96f51a3da314f41a515adbb28b17cc60405160405180910390a45b505050505050565b6000818152600b6020526040902080546001600160a01b0319166001600160a01b038416908117909155819061153d82610a2e565b6001600160a01b03167fb90cc0d925ac3511ab6af2d7ca73ffcf7ec4bd871fff36b958ecf440079c463e60405160405180910390a45050565b6001600160a01b03821661159d576040516325bd6bd360e01b815260040160405180910390fd5b6000818152600760205260409020546001600160a01b0316156115d35760405163c5a8d37160e01b815260040160405180910390fd5b806115f1576040516312c33ce360e01b815260040160405180910390fd5b6115fd60008383611b05565b6001600160a01b038216600090815260086020526040812080546001929061162690849061243d565b909155505060008181526007602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000828152600c6020908152604091829020805460ff1916841515908117909155915191825283917fe0abe9435049152fa612635eac4022235b6f5c156ecf799bdac41b11b9fa2211910160405180910390a25050565b816001600160a01b0316836001600160a01b03160361170d57604051630b7b99b960e21b815260040160405180910390fd5b6001600160a01b038381166000818152600a6020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611785848484610ebb565b61179184848484611b96565b6105e25760405163bcb5663760e01b815260040160405180910390fd5b600083815260026020526040902054819081146117de57604051633581be1d60e11b815260040160405180910390fd5b60008481526004602052604090206117f7908484611d8f565b5060405184907ff0bfd70b0068f973d58178846ca67112671ec45e060838f7de5662036bcf801790600090a26105e2565b6000828152600360205260409020548181111561185857604051635134ce8960e01b815260040160405180910390fd5b60005b818110156118db57600084815260036020526040812080548390811061188357611883612414565b600091825260208083206004830401548884526001808352604080862060039095166008026101000a9092046001600160401b0316855292909152909120805467ffffffffffffffff1916905591909101905061185b565b5060008381526003602052604081206118f391611e50565b60405160009084907f1010837a46db9510cad56c9b63e97183557a136e9d4ddbec309ce52c99afb124908390a3505050565b60008061193183610a2e565b9050806001600160a01b0316846001600160a01b0316148061197857506001600160a01b0380821660009081526006602090815260408083209388168352929052205460ff165b80610be55750836001600160a01b031661199184610d08565b6001600160a01b031614949350505050565b60008381526003602052604090205482106119d157604051630757d52160e01b815260040160405180910390fd5b60008381526003602052604090208054839081106119f1576119f1612414565b90600052602060002090600491828204019190066008029054906101000a90046001600160401b03166001600160401b0316816001600160401b0316146105c8576040516378eeeecf60e01b815260040160405180910390fd5b6000838152600360205260409020611a639083611c95565b60009283526001602090815260408085206001600160401b039093168552919052909120805467ffffffffffffffff1916905550565b600080611aa583610a2e565b9050806001600160a01b0316846001600160a01b03161480611aec57506001600160a01b038082166000908152600a602090815260408083209388168352929052205460ff165b80610be55750836001600160a01b03166119918461051a565b611b10818484610bac565b6105c85760405163792fac8360e11b815260040160405180910390fd5b81516000908190815b81811015611b8557846001600160401b0316868281518110611b5a57611b5a612414565b60200260200101516001600160401b031603611b7d57925060019150611b8f9050565b600101611b36565b5060008092509250505b9250929050565b60006001600160a01b0384163b15611c8a57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611bda90339089908890889060040161258d565b6020604051808303816000875af1925050508015611c15575060408051601f3d908101601f19168201909252611c12918101906125c9565b60015b611c70573d808015611c43576040519150601f19603f3d011682016040523d82523d6000602084013e611c48565b606091505b508051611c685760405163bcb5663760e01b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610be5565b506001949350505050565b81548110611cb657604051634e23d03560e01b815260040160405180910390fd5b81548290611cc69060019061242a565b81548110611cd657611cd6612414565b90600052602060002090600491828204019190066008029054906101000a90046001600160401b0316828281548110611d1157611d11612414565b90600052602060002090600491828204019190066008026101000a8154816001600160401b0302191690836001600160401b0316021790555081805480611d5a57611d5a6125e6565b60008281526020902060046000199092019182040180546001600160401b03600860038516026101000a021916905590555050565b82805482825590600052602060002090600301600490048101928215611e405791602002820160005b83821115611e0b5783356001600160401b031683826101000a8154816001600160401b0302191690836001600160401b031602179055509260200192600801602081600701049283019260010302611db8565b8015611e3e5782816101000a8154906001600160401b030219169055600801602081600701049283019260010302611e0b565b505b50611e4c929150611e71565b5090565b508054600082556003016004900490600052602060002090810190610d8d91905b5b80821115611e4c5760008155600101611e72565b6001600160e01b031981168114610d8d57600080fd5b600060208284031215611eae57600080fd5b8135611eb981611e86565b9392505050565b600060208284031215611ed257600080fd5b5035919050565b80356001600160a01b0381168114610a6457600080fd5b60008060408385031215611f0357600080fd5b611f0c83611ed9565b946020939093013593505050565b60008060408385031215611f2d57600080fd5b611f3683611ed9565b9150611f4460208401611ed9565b90509250929050565b80356001600160401b0381168114610a6457600080fd5b600080600060608486031215611f7957600080fd5b8335925060208401359150611f9060408501611f4d565b90509250925092565b600080600060608486031215611fae57600080fd5b611fb784611ed9565b9250611fc560208501611ed9565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b60006001600160401b038084111561200557612005611fd5565b604051601f8501601f19908116603f0116810190828211818310171561202d5761202d611fd5565b8160405280935085815286868601111561204657600080fd5b858560208301376000602087830101525050509392505050565b600082601f83011261207157600080fd5b611eb983833560208501611feb565b6000806040838503121561209357600080fd5b61209c83611f4d565b915060208301356001600160401b038111156120b757600080fd5b6120c385828601612060565b9150509250929050565b6020808252825182820181905260009190848201906040850190845b8181101561210e5783516001600160401b0316835292840192918401916001016120e9565b50909695505050505050565b6000806040838503121561212d57600080fd5b82359150611f4460208401611f4d565b6000815180845260005b8181101561216357602081850181015186830182015201612147565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000611eb9602083018461213d565b80358015158114610a6457600080fd5b600080604083850312156121b957600080fd5b82356001600160401b038111156121cf57600080fd5b6121db85828601612060565b925050611f4460208401612196565b6000602082840312156121fc57600080fd5b611eb982611ed9565b6000806040838503121561221857600080fd5b61222183611ed9565b9150611f4460208401612196565b60008060006060848603121561224457600080fd5b8335925061225460208501611ed9565b9150611f9060408501611ed9565b6000806000806080858703121561227857600080fd5b61228185611ed9565b935061228f60208601611ed9565b92506040850135915060608501356001600160401b038111156122b157600080fd5b8501601f810187136122c257600080fd5b6122d187823560208401611feb565b91505092959194509250565b6000806000604084860312156122f257600080fd5b8335925060208401356001600160401b038082111561231057600080fd5b818601915086601f83011261232457600080fd5b81358181111561233357600080fd5b8760208260051b850101111561234857600080fd5b6020830194508093505050509250925092565b6000806040838503121561236e57600080fd5b50508035926020909101359150565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b038083168181036123af576123af61237d565b6001019392505050565b600181811c908216806123cd57607f821691505b602082108103610cd057634e487b7160e01b600052602260045260246000fd5b6001600160401b0382811682821603908082111561240d5761240d61237d565b5092915050565b634e487b7160e01b600052603260045260246000fd5b818103818111156105145761051461237d565b808201808211156105145761051461237d565b601f8211156105c857600081815260208120601f850160051c810160208610156124775750805b601f850160051c820191505b8181101561150057828155600101612483565b81516001600160401b038111156124af576124af611fd5565b6124c3816124bd84546123b9565b84612450565b602080601f8311600181146124f857600084156124e05750858301515b600019600386901b1c1916600185901b178555611500565b600085815260208120601f198616915b8281101561252757888601518255948401946001909101908401612508565b50858210156125455787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6020808252825182820181905260009190848201906040850190845b8181101561210e57835183529284019291840191600101612571565b60006001600160a01b038087168352808616602084015250836040830152608060608301526125bf608083018461213d565b9695505050505050565b6000602082840312156125db57600080fd5b8151611eb981611e86565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220f2e87c6d531744d79c8f3b132eea82ecd9ba8b15591a1404b9197908d36e7b8064736f6c63430008150033