UNPKG

@lukso/lsp8-contracts

Version:

Package for the LSP8 Identifiable Digital Asset standard

1,372 lines 106 kB
{ "_format": "hh3-artifact-1", "contractName": "LSP8MintableInit", "sourceName": "contracts/presets/LSP8MintableInit.sol", "abi": [ { "inputs": [], "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": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "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": [ { "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" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "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": "0x6080604052348015600e575f5ffd5b5060156019565b60d3565b5f54610100900460ff161560835760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff9081161460d1575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b614ac6806100e05f395ff3fe6080604052600436106102a3575f3560e01c80637e5cd5c11161016d578063a3b261f2116100ca578063d547741f1161007e578063db8c966311610063578063db8c96631461083f578063dedff9c61461085e578063f2fde38b1461087d5761032e565b8063d547741f14610801578063d6c1407c146108205761032e565b8063be9f0e6f116100af578063be9f0e6f14610790578063ca15c873146107af578063d5391393146107ce5761032e565b8063a3b261f214610752578063af255b61146107715761032e565b80639010d07c116101215780639790242111610106578063979024211461070d578063a217fddf14610720578063a3246ad3146107335761032e565b80639010d07c146106cf57806391d14854146106ee5761032e565b80637f23690c116101525780637f23690c1461067357806386a10ddd146106865780638da5cb5b146106a55761032e565b80637e5cd5c1146106405780637e87632c146106545761032e565b80632f2ff15d1161021b57806354f6127f116101cf57806370a08231116101b457806370a08231146105ee578063715018a61461060d57806374823132146106215761032e565b806354f6127f146105b05780636963d438146105cf5761032e565b806346b45af71161020057806346b45af71461054c57806349a6078d14610565578063511b6952146105915761032e565b80632f2ff15d1461050e57806336568abe1461052d5761032e565b80631e4e009111610272578063248a9ca311610257578063248a9ca3146104985780632a3654a4146104c35780632de94807146104e25761032e565b80631e4e009114610433578063217b2270146104545761032e565b806301ffc9a71461038957806316e023b3146103bd57806318160ddd146103e95780631d26fce6146104075761032e565b3661032e57345f036102fc576040517fe5099ee30000000000000000000000000000000000000000000000000000000081526004016102f39060208082526004908201525f604082015260600190565b60405180910390fd5b6040517f61f4944200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f36606082826004811015610371576040517fe5099ee30000000000000000000000000000000000000000000000000000000081526004016102f3929190613a2a565b505061037d838361089c565b80519350602001915050f35b348015610394575f5ffd5b506103a86103a3366004613a76565b610a31565b60405190151581526020015b60405180910390f35b3480156103c8575f5ffd5b506103dc6103d7366004613ab5565b610a4a565b6040516103b49190613b21565b3480156103f4575f5ffd5b506098545b6040519081526020016103b4565b348015610412575f5ffd5b50610426610421366004613c3c565b610a5d565b6040516103b49190613ca1565b34801561043e575f5ffd5b5061045261044d366004613ab5565b610b5d565b005b34801561045f575f5ffd5b5061047361046e366004613d22565b610b76565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016103b4565b3480156104a3575f5ffd5b506103f96104b2366004613d22565b5f908152609c602052604090205490565b3480156104ce575f5ffd5b506103a86104dd366004613d61565b610bd5565b3480156104ed575f5ffd5b506105016104fc366004613d89565b610be0565b6040516103b49190613da2565b348015610519575f5ffd5b50610452610528366004613de4565b610c10565b348015610538575f5ffd5b50610452610547366004613de4565b610c31565b348015610557575f5ffd5b5060ce546103a89060ff1681565b348015610570575f5ffd5b5061058461057f366004613d22565b610d0e565b6040516103b49190613e0e565b34801561059c575f5ffd5b506104526105ab366004613efc565b610d2f565b3480156105bb575f5ffd5b506103dc6105ca366004613d22565b610da8565b3480156105da575f5ffd5b506104266105e9366004613f70565b610db3565b3480156105f9575f5ffd5b506103f9610608366004613d89565b610ef7565b348015610618575f5ffd5b50610452610f24565b34801561062c575f5ffd5b5061045261063b366004614026565b610f37565b34801561064b575f5ffd5b5061045261114a565b34801561065f575f5ffd5b5061045261066e3660046141fc565b6111e2565b6104526106813660046142d2565b6112e7565b348015610691575f5ffd5b506104526106a036600461430c565b611331565b3480156106b0575f5ffd5b5060335473ffffffffffffffffffffffffffffffffffffffff16610473565b3480156106da575f5ffd5b506104736106e9366004613ab5565b611581565b3480156106f9575f5ffd5b506103a8610708366004613de4565b611598565b61045261071b36600461435f565b6115a3565b34801561072b575f5ffd5b506103f95f81565b34801561073e575f5ffd5b5061058461074d366004613d22565b6115ed565b34801561075d575f5ffd5b5061050161076c366004613d89565b611606565b34801561077c575f5ffd5b5061045261078b3660046143ba565b611636565b34801561079b575f5ffd5b506104526107aa36600461441e565b61166c565b3480156107ba575f5ffd5b506103f96107c9366004613d22565b611765565b3480156107d9575f5ffd5b506103f97f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b34801561080c575f5ffd5b5061045261081b366004613de4565b61177b565b34801561082b575f5ffd5b5061045261083a3660046144a2565b61181f565b34801561084a575f5ffd5b506104526108593660046143ba565b611832565b348015610869575f5ffd5b506104266108783660046144d8565b6119b5565b348015610888575f5ffd5b50610452610897366004613d89565b611a5f565b60605f6108cb5f357fffffffff0000000000000000000000000000000000000000000000000000000016611b16565b5090507fffffffff000000000000000000000000000000000000000000000000000000005f351673ffffffffffffffffffffffffffffffffffffffff8216610964576040517fbb370b2b0000000000000000000000000000000000000000000000000000000081527fffffffff0000000000000000000000000000000000000000000000000000000090911660048201526024016102f3565b505f5f8273ffffffffffffffffffffffffffffffffffffffff163487873334604051602001610996949392919061450a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526109ce9161454d565b5f6040518083038185875af1925050503d805f8114610a08576040519150601f19603f3d011682016040523d82523d5f602084013e610a0d565b606091505b50915091508115610a22579250610a2b915050565b80518060208301fd5b92915050565b5f610a3b82611bd4565b80610a2b5750610a2b82611cb7565b6060610a568383611d1b565b9392505050565b60608151835114610a9a576040517f2fa71dfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b825167ffffffffffffffff811115610ab457610ab4613b33565b604051908082528060200260200182016040528015610ae757816020015b6060815260200190600190039081610ad25790505b5090505f5b8351811015610b5657610b31848281518110610b0a57610b0a614563565b6020026020010151848381518110610b2457610b24614563565b6020026020010151611d1b565b828281518110610b4357610b43614563565b6020908102919091010152600101610aec565b5092915050565b5f610b6781611dee565b610b718383611df8565b505050565b5f8181526099602052604081205473ffffffffffffffffffffffffffffffffffffffff168281610b56576040517fae8f9a360000000000000000000000000000000000000000000000000000000081526004016102f391815260200190565b5f610a568383611e76565b73ffffffffffffffffffffffffffffffffffffffff81165f908152609e60205260409020606090610a2b90611ecb565b5f828152609c6020526040902054610c2781611dee565b610b718383611ed7565b73ffffffffffffffffffffffffffffffffffffffff81163314610c80576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81158015610ca5575060335473ffffffffffffffffffffffffffffffffffffffff1633145b1533839091610cfe576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016102f3565b5050610d0a8233611f6e565b5050565b6060610d1982612005565b5f828152609b60205260409020610a2b90611ecb565b610d393384611e76565b83339091610d92576040517f1294d2a9000000000000000000000000000000000000000000000000000000008152600481019290925273ffffffffffffffffffffffffffffffffffffffff1660248201526044016102f3565b5050610da18585858585612066565b5050505050565b6060610a2b82612305565b60608167ffffffffffffffff811115610dce57610dce613b33565b604051908082528060200260200182016040528015610e0157816020015b6060815260200190600190039081610dec5790505b5090505f5b82811015610b56575f8030868685818110610e2357610e23614563565b9050602002810190610e359190614590565b604051610e439291906145f1565b5f60405180830381855af49150503d805f8114610e7b576040519150601f19603f3d011682016040523d82523d5f602084013e610e80565b606091505b509150915081610ecf57805115610e9a5780518082602001fd5b6040517f234eb819000000000000000000000000000000000000000000000000000000008152600481018490526024016102f3565b80848481518110610ee257610ee2614563565b60209081029190910101525050600101610e06565b73ffffffffffffffffffffffffffffffffffffffff81165f908152609a60205260408120610a2b906123a4565b610f2c6123ad565b610f355f61242e565b565b5f54610100900460ff1615808015610f5557505f54600160ff909116105b80610f6e5750303b158015610f6e57505f5460ff166001145b610ffa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016102f3565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611056575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6110cc88888080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050604080516020601f8c018190048102820181019092528a815292508a91508990819084018382808284375f92019190915250899250889150879050612461565b6110d4612549565b6110de60016125e7565b8015611140575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b6111526123ad565b60ce5460ff1661118e576040517f4d8af03d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ce80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040515f907f41f386d449eec03c1c3b75bbba9c18df70aa19779ff47f68eab4b6a66fb399d4908290a2565b84518451811480156111f45750835181145b80156112005750825181145b801561120c5750815181145b611242576040517f93a8311900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b818110156112de576112d687828151811061126157611261614563565b602002602001015187838151811061127b5761127b614563565b602002602001015187848151811061129557611295614563565b60200260200101518785815181106112af576112af614563565b60200260200101518786815181106112c9576112c9614563565b6020026020010151610d2f565b600101611244565b50505050505050565b6112ef6123ad565b3415611327576040517ff36ba73700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d0a8282612722565b5f61133b83610b76565b905080833373ffffffffffffffffffffffffffffffffffffffff831681146113b8576040517f5b271ea200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9384166004820152602481019290925290911660448201526064016102f3565b50505073ffffffffffffffffffffffffffffffffffffffff8416611408576040517f9577b8b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361146d576040517f89fdad6200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f838152609b602052604081206114849086612785565b90508484826114dd576040517fa7626b6800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016102f3565b5050838273ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f1b1b58aa2ec0cec2228b2d37124556d41f5a1f7b12f089171f896cc2366712158660405161153d9190613b21565b60405180910390a45f338560018660405160200161155e9493929190614600565b604051602081830303815290604052905061157986826127a6565b505050505050565b5f828152609d60205260408120610a5690836127d1565b5f610a5683836127dc565b6115ab6123ad565b34156115e3576040517ff36ba73700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d0a82826127f3565b5f818152609d60205260409020606090610a2b90611ecb565b73ffffffffffffffffffffffffffffffffffffffff81165f908152609a60205260409020606090610a2b90611ecb565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a661166081611dee565b610da1858585856128b7565b6116746123ad565b81518351148015611686575080518251145b6116bc576040517f2fa71dfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82515f036116f6576040517f80c9830500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b835181101561175f5761175784828151811061171657611716614563565b602002602001015184838151811061173057611730614563565b602002602001015184848151811061174a5761174a614563565b60200260200101516128ff565b6001016116f8565b50505050565b5f818152609d60205260408120610a2b906123a4565b5f828152609c602052604090205461179281611dee565b821580156117ba575060335473ffffffffffffffffffffffffffffffffffffffff8381169116145b1582849091611813576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016102f3565b5050610b718383611f6e565b6118276123ad565b610b718383836128ff565b5f61183c84610b76565b90503373ffffffffffffffffffffffffffffffffffffffff8216146118d85733818573ffffffffffffffffffffffffffffffffffffffff881683146118d4576040517f760b5acd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff938416600482015292909116602483015260448201526064016102f3565b5050505b73ffffffffffffffffffffffffffffffffffffffff8516611925576040517f9577b8b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361198a576040517f89fdad6200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611997858286868661298d565b8215610da1575f81855f8560405160200161155e9493929190614600565b6060815167ffffffffffffffff8111156119d1576119d1613b33565b604051908082528060200260200182016040528015611a0457816020015b60608152602001906001900390816119ef5790505b5090505f5b8251811015611a5957611a34838281518110611a2757611a27614563565b6020026020010151612305565b828281518110611a4657611a46614563565b6020908102919091010152600101611a09565b50919050565b611a676123ad565b73ffffffffffffffffffffffffffffffffffffffff8116611b0a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102f3565b611b138161242e565b50565b5f8080611b657fcee78b4094da86011096000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008616612a6f565b90505f611b7182612305565b9050805160141480611b8257508051155b8190611bbb576040517f42bfe79f0000000000000000000000000000000000000000000000000000000081526004016102f39190613b21565b50611bc581614646565b60601c95600195509350505050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b000000000000000000000000000000000000000000000000000000001480611c6657507fffffffff0000000000000000000000000000000000000000000000000000000082167f5a05180f00000000000000000000000000000000000000000000000000000000145b80610a2b57507fffffffff0000000000000000000000000000000000000000000000000000000082167f90832245000000000000000000000000000000000000000000000000000000001492915050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f3a271706000000000000000000000000000000000000000000000000000000001480611d0c5750611d0c82612af2565b80610a2b5750610a2b82612b47565b606060975f8484604051602001611d3c929190918252602082015260400190565b6040516020818303038152906040528051906020012081526020019081526020015f208054611d6a906146b2565b80601f0160208091040260200160405190810160405280929190818152602001828054611d96906146b2565b8015611de15780601f10611db857610100808354040283529160200191611de1565b820191905f5260205f20905b815481529060010190602001808311611dc457829003601f168201915b5050505050905092915050565b611b138133612ba2565b81611e2f576040517fd0dc904b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f828152609c6020526040808220805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b5f611e8082610b76565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610a5657505f828152609b60205260409020610a569084612c04565b60605f610a5683612c32565b5f828152609d60205260408120611eee9083612785565b90508015610b715773ffffffffffffffffffffffffffffffffffffffff82165f908152609e60205260409020611f249084612c8a565b50604051339073ffffffffffffffffffffffffffffffffffffffff84169085907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d905f90a4505050565b5f828152609d60205260408120611f859083612c95565b90508015610b715773ffffffffffffffffffffffffffffffffffffffff82165f908152609e60205260409020611fbb9084612cb6565b50604051339073ffffffffffffffffffffffffffffffffffffffff84169085907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b905f90a4505050565b5f8181526099602052604090205473ffffffffffffffffffffffffffffffffffffffff1615158190610d0a576040517fae8f9a360000000000000000000000000000000000000000000000000000000081526004016102f391815260200190565b5f61207084610b76565b905080848773ffffffffffffffffffffffffffffffffffffffff818116908416146120f0576040517f5b271ea200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9384166004820152602481019290925290911660448201526064016102f3565b50505073ffffffffffffffffffffffffffffffffffffffff8516612140576040517f24ecef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f61214a85610b76565b905084828273ffffffffffffffffffffffffffffffffffffffff808216908316146121c8576040517f5a9c31d3000000000000000000000000000000000000000000000000000000008152600481019390935273ffffffffffffffffffffffffffffffffffffffff91821660248401521660448201526064016102f3565b5050506121d58786612cc1565b73ffffffffffffffffffffffffffffffffffffffff87165f908152609a602052604090206122039086612cb6565b5073ffffffffffffffffffffffffffffffffffffffff86165f908152609a602052604090206122329086612c8a565b505f858152609960205260409081902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff89811691821790925591518792918a16907fb333c813a7426a7a11e2b190cad52c44119421594b47f6f32ace6d8c7207b2bf906122bd9033908a908a906146fd565b60405180910390a45f33888888876040516020016122df95949392919061473c565b60405160208183030381529060405290506122fa8882612d14565b611140878683612d3f565b5f818152609760205260409020805460609190612321906146b2565b80601f016020809104026020016040519081016040528092919081815260200182805461234d906146b2565b80156123985780601f1061236f57610100808354040283529160200191612398565b820191905f5260205f20905b81548152906001019060200180831161237b57829003601f168201915b50505050509050919050565b5f610a2b825490565b60335473ffffffffffffffffffffffffffffffffffffffff163314610f35576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102f3565b6124587f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a65f611df8565b611b1381612ef8565b5f54610100900460ff166124f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016102f3565b61250385858585612fb3565b6040805160208101839052610da1917ff675e9361af1c1664c1868cfa3eb97672d6b1a513aa5b81dec34c9ee330e818d910160405160208183030381529060405261314d565b5f54610100900460ff166125df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016102f3565b610f356132ac565b5f54610100900460ff1661267d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016102f3565b60ce80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168215159081179091556040517f41f386d449eec03c1c3b75bbba9c18df70aa19779ff47f68eab4b6a66fb399d4905f90a28015611b1357611b137f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a661271d60335473ffffffffffffffffffffffffffffffffffffffff1690565b611ed7565b7f098a16c9e50e3e99b3e797305c146898d294e5aec55a47e213cb3611ccf17e73820161277b576040517f3664800a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d0a828261314d565b5f610a568373ffffffffffffffffffffffffffffffffffffffff8416613365565b610d0a827f8a1c15a8799f71b547e08e2bcb2e85257e81b0a07eee2ce6712549eef1f00970836133b1565b5f610a56838361344a565b5f828152609d60205260408120610a569083612c04565b805182511461282e576040517f3bcc897900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81515f03612868576040517f97da5f9500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b82518