@lukso/lsp8-contracts
Version:
Package for the LSP8 Identifiable Digital Asset standard
1,352 lines • 101 kB
JSON
{
"_format": "hh3-artifact-1",
"contractName": "LSP8Mintable",
"sourceName": "contracts/presets/LSP8Mintable.sol",
"abi": [
{
"inputs": [
{
"internalType": "string",
"name": "name_",
"type": "string"
},
{
"internalType": "string",
"name": "symbol_",
"type": "string"
},
{
"internalType": "address",
"name": "newOwner_",
"type": "address"
},
{
"internalType": "uint256",
"name": "lsp4TokenType_",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "lsp8TokenIdFormat_",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"inputs": [],
"name": "AccessControlBadConfirmation",
"type": "error"
},
{
"inputs": [],
"name": "AccessControlCannotSetAdminForDefaultAdminRole",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
},
{
"internalType": "bytes32",
"name": "neededRole",
"type": "bytes32"
}
],
"name": "AccessControlUnauthorizedAccount",
"type": "error"
},
{
"inputs": [],
"name": "ERC725Y_DataKeysValuesEmptyArray",
"type": "error"
},
{
"inputs": [],
"name": "ERC725Y_DataKeysValuesLengthMismatch",
"type": "error"
},
{
"inputs": [],
"name": "ERC725Y_MsgValueDisallowed",
"type": "error"
},
{
"inputs": [
{
"internalType": "bytes",
"name": "storedData",
"type": "bytes"
}
],
"name": "InvalidExtensionAddress",
"type": "error"
},
{
"inputs": [
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "InvalidFunctionSelector",
"type": "error"
},
{
"inputs": [],
"name": "LSP4TokenNameNotEditable",
"type": "error"
},
{
"inputs": [],
"name": "LSP4TokenSymbolNotEditable",
"type": "error"
},
{
"inputs": [],
"name": "LSP4TokenTypeNotEditable",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "callIndex",
"type": "uint256"
}
],
"name": "LSP8BatchCallFailed",
"type": "error"
},
{
"inputs": [],
"name": "LSP8CannotSendToAddressZero",
"type": "error"
},
{
"inputs": [],
"name": "LSP8CannotUseAddressZeroAsOperator",
"type": "error"
},
{
"inputs": [],
"name": "LSP8InvalidTransferBatch",
"type": "error"
},
{
"inputs": [],
"name": "LSP8MintDisabled",
"type": "error"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "tokenId",
"type": "bytes32"
}
],
"name": "LSP8NonExistentTokenId",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"internalType": "bytes32",
"name": "tokenId",
"type": "bytes32"
}
],
"name": "LSP8NonExistingOperator",
"type": "error"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "tokenId",
"type": "bytes32"
},
{
"internalType": "address",
"name": "caller",
"type": "address"
}
],
"name": "LSP8NotTokenOperator",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "tokenOwner",
"type": "address"
},
{
"internalType": "bytes32",
"name": "tokenId",
"type": "bytes32"
},
{
"internalType": "address",
"name": "caller",
"type": "address"
}
],
"name": "LSP8NotTokenOwner",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "tokenReceiver",
"type": "address"
}
],
"name": "LSP8NotifyTokenReceiverContractMissingLSP1Interface",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "tokenReceiver",
"type": "address"
}
],
"name": "LSP8NotifyTokenReceiverIsEOA",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"internalType": "bytes32",
"name": "tokenId",
"type": "bytes32"
}
],
"name": "LSP8OperatorAlreadyAuthorized",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "caller",
"type": "address"
},
{
"internalType": "address",
"name": "tokenOwner",
"type": "address"
},
{
"internalType": "bytes32",
"name": "tokenId",
"type": "bytes32"
}
],
"name": "LSP8RevokeOperatorNotAuthorized",
"type": "error"
},
{
"inputs": [],
"name": "LSP8TokenContractCannotHoldValue",
"type": "error"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "tokenId",
"type": "bytes32"
}
],
"name": "LSP8TokenIdAlreadyMinted",
"type": "error"
},
{
"inputs": [],
"name": "LSP8TokenIdFormatNotEditable",
"type": "error"
},
{
"inputs": [],
"name": "LSP8TokenIdsDataEmptyArray",
"type": "error"
},
{
"inputs": [],
"name": "LSP8TokenIdsDataLengthMismatch",
"type": "error"
},
{
"inputs": [],
"name": "LSP8TokenOwnerCannotBeOperator",
"type": "error"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "tokenId",
"type": "bytes32"
},
{
"internalType": "address",
"name": "oldOwner",
"type": "address"
},
{
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "LSP8TokenOwnerChanged",
"type": "error"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "functionSelector",
"type": "bytes4"
}
],
"name": "NoExtensionFoundForFunctionSelector",
"type": "error"
},
{
"inputs": [],
"name": "OwnableCannotSetZeroAddressAsOwner",
"type": "error"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "dataKey",
"type": "bytes32"
},
{
"indexed": false,
"internalType": "bytes",
"name": "dataValue",
"type": "bytes"
}
],
"name": "DataChanged",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bool",
"name": "enabled",
"type": "bool"
}
],
"name": "MintingStatusChanged",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "tokenOwner",
"type": "address"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "tokenId",
"type": "bytes32"
},
{
"indexed": false,
"internalType": "bytes",
"name": "operatorNotificationData",
"type": "bytes"
}
],
"name": "OperatorAuthorizationChanged",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "tokenOwner",
"type": "address"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "tokenId",
"type": "bytes32"
},
{
"indexed": false,
"internalType": "bool",
"name": "notified",
"type": "bool"
},
{
"indexed": false,
"internalType": "bytes",
"name": "operatorNotificationData",
"type": "bytes"
}
],
"name": "OperatorRevoked",
"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": "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": "bytes32",
"name": "tokenId",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "dataKey",
"type": "bytes32"
},
{
"indexed": false,
"internalType": "bytes",
"name": "dataValue",
"type": "bytes"
}
],
"name": "TokenIdDataChanged",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "from",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "to",
"type": "address"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "tokenId",
"type": "bytes32"
},
{
"indexed": false,
"internalType": "bool",
"name": "force",
"type": "bool"
},
{
"indexed": false,
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "Transfer",
"type": "event"
},
{
"stateMutability": "payable",
"type": "fallback"
},
{
"inputs": [],
"name": "DEFAULT_ADMIN_ROLE",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "MINTER_ROLE",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"internalType": "bytes32",
"name": "tokenId",
"type": "bytes32"
},
{
"internalType": "bytes",
"name": "operatorNotificationData",
"type": "bytes"
}
],
"name": "authorizeOperator",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "tokenOwner",
"type": "address"
}
],
"name": "balanceOf",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes[]",
"name": "data",
"type": "bytes[]"
}
],
"name": "batchCalls",
"outputs": [
{
"internalType": "bytes[]",
"name": "results",
"type": "bytes[]"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "disableMinting",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "dataKey",
"type": "bytes32"
}
],
"name": "getData",
"outputs": [
{
"internalType": "bytes",
"name": "dataValue",
"type": "bytes"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32[]",
"name": "dataKeys",
"type": "bytes32[]"
}
],
"name": "getDataBatch",
"outputs": [
{
"internalType": "bytes[]",
"name": "dataValues",
"type": "bytes[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32[]",
"name": "tokenIds",
"type": "bytes32[]"
},
{
"internalType": "bytes32[]",
"name": "dataKeys",
"type": "bytes32[]"
}
],
"name": "getDataBatchForTokenIds",
"outputs": [
{
"internalType": "bytes[]",
"name": "dataValues",
"type": "bytes[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "tokenId",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "dataKey",
"type": "bytes32"
}
],
"name": "getDataForTokenId",
"outputs": [
{
"internalType": "bytes",
"name": "dataValue",
"type": "bytes"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "tokenId",
"type": "bytes32"
}
],
"name": "getOperatorsOf",
"outputs": [
{
"internalType": "address[]",
"name": "",
"type": "address[]"
}
],
"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": "bytes32",
"name": "role",
"type": "bytes32"
}
],
"name": "getRoleMembers",
"outputs": [
{
"internalType": "address[]",
"name": "",
"type": "address[]"
}
],
"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": [],
"name": "isMintable",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"internalType": "bytes32",
"name": "tokenId",
"type": "bytes32"
}
],
"name": "isOperatorFor",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "bytes32",
"name": "tokenId",
"type": "bytes32"
},
{
"internalType": "bool",
"name": "force",
"type": "bool"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "mint",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "renounceOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "callerConfirmation",
"type": "address"
}
],
"name": "renounceRole",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"internalType": "bytes32",
"name": "tokenId",
"type": "bytes32"
},
{
"internalType": "bool",
"name": "notify",
"type": "bool"
},
{
"internalType": "bytes",
"name": "operatorNotificationData",
"type": "bytes"
}
],
"name": "revokeOperator",
"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": "address",
"name": "account",
"type": "address"
}
],
"name": "rolesOf",
"outputs": [
{
"internalType": "bytes32[]",
"name": "",
"type": "bytes32[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "dataKey",
"type": "bytes32"
},
{
"internalType": "bytes",
"name": "dataValue",
"type": "bytes"
}
],
"name": "setData",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32[]",
"name": "dataKeys",
"type": "bytes32[]"
},
{
"internalType": "bytes[]",
"name": "dataValues",
"type": "bytes[]"
}
],
"name": "setDataBatch",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32[]",
"name": "tokenIds",
"type": "bytes32[]"
},
{
"internalType": "bytes32[]",
"name": "dataKeys",
"type": "bytes32[]"
},
{
"internalType": "bytes[]",
"name": "dataValues",
"type": "bytes[]"
}
],
"name": "setDataBatchForTokenIds",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "tokenId",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "dataKey",
"type": "bytes32"
},
{
"internalType": "bytes",
"name": "dataValue",
"type": "bytes"
}
],
"name": "setDataForTokenId",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "adminRole",
"type": "bytes32"
}
],
"name": "setRoleAdmin",
"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": [
{
"internalType": "address",
"name": "tokenOwner",
"type": "address"
}
],
"name": "tokenIdsOf",
"outputs": [
{
"internalType": "bytes32[]",
"name": "",
"type": "bytes32[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "tokenId",
"type": "bytes32"
}
],
"name": "tokenOwnerOf",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"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": "bytes32",
"name": "tokenId",
"type": "bytes32"
},
{
"internalType": "bool",
"name": "force",
"type": "bool"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "transfer",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address[]",
"name": "from",
"type": "address[]"
},
{
"internalType": "address[]",
"name": "to",
"type": "address[]"
},
{
"internalType": "bytes32[]",
"name": "tokenId",
"type": "bytes32[]"
},
{
"internalType": "bool[]",
"name": "force",
"type": "bool[]"
},
{
"internalType": "bytes[]",
"name": "data",
"type": "bytes[]"
}
],
"name": "transferBatch",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"stateMutability": "payable",
"type": "receive"
}
],
"bytecode": "0x608060405234801561000f575f5ffd5b50604051614c42380380614c4283398101604081905261002e91610825565b6001858585858584848484816100433361022e565b6001600160a01b03811661006a576040516306b620db60e21b815260040160405180910390fd5b61007381610251565b506040805180820190915260048152632936598960e21b60208201526100ba907feafec4d89fa9619884b60000a4d96624a38f7ac2d8d9a604ecf07c12c77e480c906102a0565b6100e47fdeba1e292f8ba88238e10ab3c7f88bd4be4fac56cad5194b6ecceaf653468af1856102a0565b61010e7f2f0a68ab07768e01943a599e73362a0e17a63a72e94dd2e384d2c1d4db932756846102a0565b6040805160208101839052610155917fe0261fa95db2eb3b5439bd033cda66d56b96f92f243a8228fd87550ed7bdfdb3910160408051601f198184030181529190526102a0565b505060408051602081018590526101a093507ff675e9361af1c1664c1868cfa3eb97672d6b1a513aa5b81dec34c9ee330e818d92500160408051601f198184030181529190526102f4565b506101c293505f92506101bd9150505f546001600160a01b031690565b6103b4565b6009805460ff19168215159081179091556040517f41f386d449eec03c1c3b75bbba9c18df70aa19779ff47f68eab4b6a66fb399d4905f90a28015610223576102235f516020614c225f395f51905f526101bd5f546001600160a01b031690565b505050505050610a73565b6102455f516020614c225f395f51905f525f610432565b61024e81610497565b50565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f8281526001602052604090206102b7828261093d565b50817fece574603820d07bc9b91f2a932baadf4628aabcb8afba49776529c14a6104b2826040516102e891906109f7565b60405180910390a25050565b7f2145e1d6d074577dc71ef54c3807742b41b053a9352ae6b491331509acb9750f8201610334576040516385c169bd60e01b815260040160405180910390fd5b7fd0f59754f88971fe6bc5a6618cc9d5f1e859c58d16b22d1c7b2d3e2b246cd8aa820161037457604051630eceab6760e31b815260040160405180910390fd5b7f1fd9e056a24d14c4abc642fcc325992a946906d0dbc57dd70278aaf12842024d82016102a057604051634ef6d7fb60e01b815260040160405180910390fd5b5f8281526007602052604081206103cb908361052d565b9050801561042d576001600160a01b0382165f9081526008602052604090206103f4908461054a565b5060405133906001600160a01b0384169085907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d905f90a45b505050565b816104505760405163d0dc904b60e01b815260040160405180910390fd5b5f82815260066020526040808220805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b5f546001600160a01b03166104ab82610251565b6001600160a01b0381165f9081526008602052604081206104cb90610555565b90505f5b8151811015610527575f8282815181106104eb576104eb610a2c565b60200260200101519050610505818561056860201b60201c565b6001600160a01b0385161561051e5761051e81866103b4565b506001016104cf565b50505050565b5f610541836001600160a01b0384166105e5565b90505b92915050565b5f61054183836105e5565b60605f61056183610631565b9392505050565b5f82815260076020526040812061057f908361068a565b9050801561042d576001600160a01b0382165f9081526008602052604090206105a8908461069e565b5060405133906001600160a01b0384169085907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b905f90a4505050565b5f81815260018301602052604081205461062a57508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610544565b505f610544565b6060815f0180548060200260200160405190810160405280929190818152602001828054801561067e57602002820191905f5260205f20905b81548152602001906001019080831161066a575b50505050509050919050565b5f610541836001600160a01b0384166106a5565b5f61054183835b5f818152600183016020526040812054801561077f575f6106c7600183610a40565b85549091505f906106da90600190610a40565b9050818114610739575f865f0182815481106106f8576106f8610a2c565b905f5260205f200154905080875f01848154811061071857610718610a2c565b5f918252602080832090910192909255918252600188019052604090208390555b855486908061074a5761074a610a5f565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610544565b5f915050610544565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126107ab575f5ffd5b81516001600160401b038111156107c4576107c4610788565b604051601f8201601f19908116603f011681016001600160401b03811182821017156107f2576107f2610788565b604052818152838201602001851015610809575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f5f5f5f5f60a08688031215610839575f5ffd5b85516001600160401b0381111561084e575f5ffd5b61085a8882890161079c565b602088015190965090506001600160401b03811115610877575f5ffd5b6108838882890161079c565b604088015190955090506001600160a01b03811681146108a1575f5ffd5b6060870151608090970151959894975095949392505050565b600181811c908216806108ce57607f821691505b6020821081036108ec57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561042d57805f5260205f20601f840160051c810160208510156109175750805b601f840160051c820191505b81811015610936575f8155600101610923565b5050505050565b81516001600160401b0381111561095657610956610788565b61096a8161096484546108ba565b846108f2565b6020601f82116001811461099c575f83156109855750848201515b5f19600385901b1c1916600184901b178455610936565b5f84815260208120601f198516915b828110156109cb57878501518255602094850194600190920191016109ab565b50848210156109e857868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b634e487b7160e01b5f52603260045260245ffd5b8181038181111561054457634e487b7160e01b5f52601160045260245ffd5b634e487b7160e01b5f52603160045260245ffd5b6141a280610a805f395ff3fe608060405260043610610288575f3560e01c80637e87632c11610152578063a3b261f2116100ca578063d547741f1161007e578063db8c966311610063578063db8c966314610804578063dedff9c614610823578063f2fde38b1461084257610313565b8063d547741f146107c6578063d6c1407c146107e557610313565b8063be9f0e6f116100af578063be9f0e6f14610755578063ca15c87314610774578063d53913931461079357610313565b8063a3b261f214610717578063af255b611461073657610313565b80639010d07c11610121578063979024211161010657806397902421146106d2578063a217fddf146106e5578063a3246ad3146106f857610313565b80639010d07c1461069457806391d14854146106b357610313565b80637e87632c1461061a5780637f23690c1461063957806386a10ddd1461064c5780638da5cb5b1461066b57610313565b80632f2ff15d1161020057806354f6127f116101b457806370a082311161019957806370a08231146105d3578063715018a6146105f25780637e5cd5c11461060657610313565b806354f6127f146105955780636963d438146105b457610313565b806346b45af7116101e557806346b45af71461053157806349a6078d1461054a578063511b69521461057657610313565b80632f2ff15d146104f357806336568abe1461051257610313565b80631e4e009111610257578063248a9ca31161023c578063248a9ca31461047d5780632a3654a4146104a85780632de94807146104c757610313565b80631e4e009114610418578063217b22701461043957610313565b806301ffc9a71461036e57806316e023b3146103a257806318160ddd146103ce5780631d26fce6146103ec57610313565b3661031357345f036102e1576040517fe5099ee30000000000000000000000000000000000000000000000000000000081526004016102d89060208082526004908201525f604082015260600190565b60405180910390fd5b6040517f61f4944200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f36606082826004811015610356576040517fe5099ee30000000000000000000000000000000000000000000000000000000081526004016102d89291906131d7565b50506103628383610861565b80519350602001915050f35b348015610379575f5ffd5b5061038d610388366004613223565b6109f6565b60405190151581526020015b60405180910390f35b3480156103ad575f5ffd5b506103c16103bc366004613262565b610a0f565b60405161039991906132ce565b3480156103d9575f5ffd5b506002545b604051908152602001610399565b3480156103f7575f5ffd5b5061040b6104063660046133e9565b610a22565b604051610399919061344e565b348015610423575f5ffd5b50610437610432366004613262565b610b22565b005b348015610444575f5ffd5b506104586104533660046134cf565b610b3b565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610399565b348015610488575f5ffd5b506103de6104973660046134cf565b5f9081526006602052604090205490565b3480156104b3575f5ffd5b5061038d6104c236600461350e565b610b9a565b3480156104d2575f5ffd5b506104e66104e1366004613536565b610ba5565b604051610399919061354f565b3480156104fe575f5ffd5b5061043761050d366004613591565b610bd5565b34801561051d575f5ffd5b5061043761052c366004613591565b610bf6565b34801561053c575f5ffd5b5060095461038d9060ff1681565b348015610555575f5ffd5b506105696105643660046134cf565b610cd2565b60405161039991906135bb565b348015610581575f5ffd5b506104376105903660046136a9565b610cf3565b3480156105a0575f5ffd5b506103c16105af3660046134cf565b610d6c565b3480156105bf575f5ffd5b5061040b6105ce36600461371d565b610d77565b3480156105de575f5ffd5b506103de6105ed366004613536565b610ebb565b3480156105fd575f5ffd5b50610437610ee8565b348015610611575f5ffd5b50610437610efb565b348015610625575f5ffd5b506104376106343660046138d1565b610f93565b6104376106473660046139a7565b611098565b348015610657575f5ffd5b506104376106663660046139e1565b6110e2565b348015610676575f5ffd5b505f5473ffffffffffffffffffffffffffffffffffffffff16610458565b34801561069f575f5ffd5b506104586106ae366004613262565b611332565b3480156106be575f5ffd5b5061038d6106cd366004613591565b611349565b6104376106e0366004613a34565b611354565b3480156106f0575f5ffd5b506103de5f81565b348015610703575f5ffd5b506105696107123660046134cf565b61139e565b348015610722575f5ffd5b506104e6610731366004613536565b6113b7565b348015610741575f5ffd5b50610437610750366004613a8f565b6113e7565b348015610760575f5ffd5b5061043761076f366004613af3565b61141d565b34801561077f575f5ffd5b506103de61078e3660046134cf565b611516565b34801561079e575f5ffd5b506103de7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b3480156107d1575f5ffd5b506104376107e0366004613591565b61152c565b3480156107f0575f5ffd5b506104376107ff366004613b77565b6115cf565b34801561080f575f5ffd5b5061043761081e366004613a8f565b6115e2565b34801561082e575f5ffd5b5061040b61083d366004613bad565b611765565b34801561084d575f5ffd5b5061043761085c366004613536565b61180f565b60605f6108905f357fffffffff00000000000000000000000000000000000000000000000000000000166118c6565b5090507fffffffff000000000000000000000000000000000000000000000000000000005f351673ffffffffffffffffffffffffffffffffffffffff8216610929576040517fbb370b2b0000000000000000000000000000000000000000000000000000000081527fffffffff0000000000000000000000000000000000000000000000000000000090911660048201526024016102d8565b505f5f8273ffffffffffffffffffffffffffffffffffffffff16348787333460405160200161095b9493929190613bdf565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261099391613c22565b5f6040518083038185875af1925050503d805f81146109cd576040519150601f19603f3d011682016040523d82523d5f602084013e6109d2565b606091505b509150915081156109e75792506109f0915050565b80518060208301fd5b92915050565b5f610a0082611984565b806109f057506109f082611a67565b6060610a1b8383611acb565b9392505050565b60608151835114610a5f576040517f2fa71dfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b825167ffffffffffffffff811115610a7957610a796132e0565b604051908082528060200260200182016040528015610aac57816020015b6060815260200190600190039081610a975790505b5090505f5b8351811015610b1b57610af6848281518110610acf57610acf613c38565b6020026020010151848381518110610ae957610ae9613c38565b6020026020010151611acb565b828281518110610b0857610b08613c38565b6020908102919091010152600101610ab1565b5092915050565b5f610b2c81611b9e565b610b368383611ba8565b505050565b5f8181526003602052604081205473ffffffffffffffffffffffffffffffffffffffff168281610b1b576040517fae8f9a360000000000000000000000000000000000000000000000000000000081526004016102d891815260200190565b5f610a1b8383611c26565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526008602052604090206060906109f090611c7b565b5f82815260066020526040902054610bec81611b9e565b610b368383611c87565b73ffffffffffffffffffffffffffffffffffffffff81163314610c45576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81158015610c6957505f5473ffffffffffffffffffffffffffffffffffffffff1633145b1533839091610cc2576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016102d8565b5050610cce8233611d1e565b5050565b6060610cdd82611db5565b5f8281526005602052604090206109f090611c7b565b610cfd3384611c26565b83339091610d56576040517f1294d2a9000000000000000000000000000000000000000000000000000000008152600481019290925273ffffffffffffffffffffffffffffffffffffffff1660248201526044016102d8565b5050610d658585858585611e16565b5050505050565b60606109f0826120bf565b60608167ffffffffffffffff811115610d9257610d926132e0565b604051908082528060200260200182016040528015610dc557816020015b6060815260200190600190039081610db05790505b5090505f5b82811015610b1b575f8030868685818110610de757610de7613c38565b9050602002810190610df99190613c65565b604051610e07929190613ccd565b5f60405180830381855af49150503d805f8114610e3f576040519150601f19603f3d011682016040523d82523d5f602084013e610e44565b606091505b509150915081610e9357805115610e5e5780518082602001fd5b6040517f234eb819000000000000000000000000000000000000000000000000000000008152600481018490526024016102d8565b80848481518110610ea657610ea6613c38565b60209081029190910101525050600101610dca565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526004602052604081206109f09061215e565b610ef0612167565b610ef95f6121e7565b565b610f03612167565b60095460ff16610f3f576040517f4d8af03d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600980547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040515f907f41f386d449eec03c1c3b75bbba9c18df70aa19779ff47f68eab4b6a66fb399d4908290a2565b8451845181148015610fa55750835181145b8015610fb15750825181145b8015610fbd5750815181145b610ff3576040517f93a8311900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b8181101561108f5761108787828151811061101257611012613c38565b602002602001015187838151811061102c5761102c613c38565b602002602001015187848151811061104657611046613c38565b602002602001015187858151811061106057611060613c38565b602002602001015187868151811061107a5761107a613c38565b6020026020010151610cf3565b600101610ff5565b50505050505050565b6110a0612167565b34156110d8576040517ff36ba73700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cce828261221a565b5f6110ec83610b3b565b905080833373ffffffffffffffffffffffffffffffffffffffff83168114611169576040517f5b271ea200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9384166004820152602481019290925290911660448201526064016102d8565b50505073ffffffffffffffffffffffffffffffffffffffff84166111b9576040517f9577b8b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361121e576040517f89fdad6200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f838152600560205260408120611235908661227d565b905084848261128e576040517fa7626b6800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016102d8565b5050838273ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f1b1b58aa2ec0cec2228b2d37124556d41f5a1f7b12f089171f896cc236671215866040516112ee91906132ce565b60405180910390a45f338560018660405160200161130f9493929190613cdc565b604051602081830303815290604052905061132a868261229e565b505050505050565b5f828152600760205260408120610a1b90836122c9565b5f610a1b83836122d4565b61135c612167565b3415611394576040517ff36ba73700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cce82826122eb565b5f8181526007602052604090206060906109f090611c7b565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526004602052604090206060906109f090611c7b565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a661141181611b9e565b610d65858585856123af565b611425612167565b81518351148015611437575080518251145b61146d576040517f2fa71dfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82515f036114a7576040517f80c9830500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b8351811015611510576115088482815181106114c7576114c7613c38565b60200260200101518483815181106114e1576114e1613c38565b60200260200101518484815181106114fb576114fb613c38565b60200260200101516123f7565b6001016114a9565b50505050565b5f8181526007602052604081206109f09061215e565b5f8281526006602052604090205461154381611b9e565b8215801561156a57505f5473ffffffffffffffffffffffffffffffffffffffff8381169116145b15828490916115c3576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016102d8565b5050610b368383611d1e565b6115d7612167565b610b368383836123f7565b5f6115ec84610b3b565b90503373ffffffffffffffffffffffffffffffffffffffff8216146116885733818573ffffffffffffffffffffffffffffffffffffffff88168314611684576040517f760b5acd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff938416600482015292909116602483015260448201526064016102d8565b5050505b73ffffffffffffffffffffffffffffffffffffffff85166116d5576040517f9577b8b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361173a576040517f89fdad6200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6117478582868686612485565b8215610d65575f81855f8560405160200161130f9493929190613cdc565b6060815167ffffffffffffffff811115611781576117816132e0565b6040519080825280602002602001820160405280156117b457816020015b606081526020019060019003908161179f5790505b5090505f5b8251811015611809576117e48382815181106117d7576117d7613c38565b60200260200101516120bf565b8282815181106117f6576117f6613c38565b60209081029190910101526001016117b9565b50919050565b611817612167565b73ffffffffffffffffffffffffffffffffffffffff81166118ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102d8565b6118c3816121e7565b50565b5f80806119157fcee78b4094da86011096000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008616612567565b90505f611921826120bf565b905080516014148061193257508051155b819061196b576040517f42bfe79f0000000000000000000000000000000000000000000000000000000081526004016102d891906132ce565b5061197581613d22565b60601c95600195509350505050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b000000000000000000000000000000000000000000000000000000001480611a1657507fffffffff0000000000000000000000000000000000000000000000000000000082167f5a05180f00000000000000000000000000000000000000000000000000000000145b806109f057507fffffffff0000000000000000000000000000000000000000000000000000000082167f90832245000000000000000000000000000000000000000000000000000000001492915050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f3a271706000000000000000000000000000000000000000000000000000000001480611abc5750611abc826125ea565b806109f057506109f08261263f565b606060015f8484604051602001611aec929190918252602082015260400190565b6040516020818303038152906040528051906020012081526020019081526020015f208054611b1a90613d8e565b80601f0160208091040260200160405190810160405280929190818152602001828054611b4690613d8e565b8015611b915780601f10611b6857610100808354040283529160200191611b91565b820191905f5260205f20905b815481529060010190602001808311611b7457829003601f168201915b5050505050905092915050565b6118c3813361269a565b81611bdf576040517fd0dc904b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f82815260066020526040808220805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b5f611c3082610b3b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610a1b57505f828152600560205260409020610a1b90846126fc565b60605f610a1b8361272a565b5f828152600760205260408120611c9e908361227d565b90508015610b365773ffffffffffffffffffffffffffffffffffffffff82165f908152600860205260409020611cd49084612782565b50604051339073ffffffffffffffffffffffffffffffffffffffff84169085907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d905f90a4505050565b5f828152600760205260408120611d35908361278d565b90508015610b365773ffffffffffffffffffffffffffffffffffffffff82165f908152600860205260409020611d6b90846127ae565b50604051339073ffffffffffffffffffffffffffffffffffffffff84169085907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b905f90a4505050565b5f8181526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1615158190610cce576040517fae8f9a360000000000000000000000000000000000000000000000000000000081526004016102d891815260200190565b5f611e2084610b3b565b905080848773ffffffffffffffffffffffffffffffffffffffff81811690841614611ea0576040517f5b271ea200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9384166004820152602481019290925290911660448201526064016102d8565b50505073ffffffffffffffffffffffffffffffffffffffff8516611ef0576040517f24ecef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f611efa85610b3b565b905084828273ffffffffffffffffffffffffffffffffffffffff80821690831614611f78576040517f5a9c31d3000000000000000000000000000000000000000000000000000000008152600481019390935273ffffffffffffffffffffffffffffffffffffffff91821660248401521660448201526064016102d8565b505050611f8587866127b9565b73ffffffffffffffffffffffffffffffffffffff