@lukso/lsp7-contracts
Version:
Package for the LSP7 Digital Asset standard
1,230 lines • 96.4 kB
JSON
{
"_format": "hh3-artifact-1",
"contractName": "LSP7MintableInit",
"sourceName": "contracts/presets/LSP7MintableInit.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": "address",
"name": "tokenOwner",
"type": "address"
},
{
"internalType": "uint256",
"name": "authorizedAmount",
"type": "uint256"
},
{
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "LSP7AmountExceedsAuthorizedAmount",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "balance",
"type": "uint256"
},
{
"internalType": "address",
"name": "tokenOwner",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "LSP7AmountExceedsBalance",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "callIndex",
"type": "uint256"
}
],
"name": "LSP7BatchCallFailed",
"type": "error"
},
{
"inputs": [],
"name": "LSP7CannotSendWithAddressZero",
"type": "error"
},
{
"inputs": [],
"name": "LSP7CannotUseAddressZeroAsOperator",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "caller",
"type": "address"
},
{
"internalType": "address",
"name": "tokenOwner",
"type": "address"
},
{
"internalType": "address",
"name": "operator",
"type": "address"
}
],
"name": "LSP7DecreaseAllowanceNotAuthorized",
"type": "error"
},
{
"inputs": [],
"name": "LSP7DecreasedAllowanceBelowZero",
"type": "error"
},
{
"inputs": [],
"name": "LSP7InvalidTransferBatch",
"type": "error"
},
{
"inputs": [],
"name": "LSP7MintDisabled",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "tokenReceiver",
"type": "address"
}
],
"name": "LSP7NotifyTokenReceiverContractMissingLSP1Interface",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "tokenReceiver",
"type": "address"
}
],
"name": "LSP7NotifyTokenReceiverIsEOA",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "caller",
"type": "address"
},
{
"internalType": "address",
"name": "tokenOwner",
"type": "address"
},
{
"internalType": "address",
"name": "operator",
"type": "address"
}
],
"name": "LSP7RevokeOperatorNotAuthorized",
"type": "error"
},
{
"inputs": [],
"name": "LSP7TokenContractCannotHoldValue",
"type": "error"
},
{
"inputs": [],
"name": "LSP7TokenOwnerCannotBeOperator",
"type": "error"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "functionSelector",
"type": "bytes4"
}
],
"name": "NoExtensionFoundForFunctionSelector",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "operator",
"type": "address"
}
],
"name": "OperatorAllowanceCannotBeIncreasedFromZero",
"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": "uint256",
"name": "amount",
"type": "uint256"
},
{
"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": "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": "address",
"name": "operator",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "from",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "to",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"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": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "operatorNotificationData",
"type": "bytes"
}
],
"name": "authorizeOperator",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"internalType": "address",
"name": "tokenOwner",
"type": "address"
}
],
"name": "authorizedAmountFor",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"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": "decimals",
"outputs": [
{
"internalType": "uint8",
"name": "",
"type": "uint8"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"internalType": "address",
"name": "tokenOwner",
"type": "address"
},
{
"internalType": "uint256",
"name": "subtractedAmount",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "operatorNotificationData",
"type": "bytes"
}
],
"name": "decreaseAllowance",
"outputs": [],
"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": "address",
"name": "tokenOwner",
"type": "address"
}
],
"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": "address",
"name": "operator",
"type": "address"
},
{
"internalType": "uint256",
"name": "addedAmount",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "operatorNotificationData",
"type": "bytes"
}
],
"name": "increaseAllowance",
"outputs": [],
"stateMutability": "nonpayable",
"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": "bool",
"name": "isNonDivisible_",
"type": "bool"
}
],
"name": "initialize",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "isMintable",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"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": "address",
"name": "tokenOwner",
"type": "address"
},
{
"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": "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": [],
"name": "totalSupply",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"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": "uint256[]",
"name": "amount",
"type": "uint256[]"
},
{
"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": "0x6080604052348015600e575f5ffd5b5060156019565b60d3565b5f54610100900460ff161560835760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff9081161460d1575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b61440d806100e05f395ff3fe608060405260043610610252575f3560e01c80637580d92011610137578063a217fddf116100af578063d53913931161007e578063d72fc29a11610063578063d72fc29a146107b6578063dedff9c6146107d5578063f2fde38b146107f4576102dd565b8063d539139314610764578063d547741f14610797576102dd565b8063a217fddf146106e7578063a3246ad3146106fa578063b49506fd14610726578063ca15c87314610745576102dd565b80637f23690c116101065780639010d07c116100eb5780639010d07c1461069657806391d14854146106b557806397902421146106d4576102dd565b80637f23690c146106385780638da5cb5b1461064b576102dd565b80637580d920146105c7578063760d9bba146105e657806378381670146106055780637e5cd5c114610624576102dd565b806330d0dc37116101ca57806354f6127f116101995780636963d4381161017e5780636963d4381461054657806370a0823114610572578063715018a6146105b3576102dd565b806354f6127f146104fb57806365aeaa9514610527576102dd565b806330d0dc371461047e578063313ce5671461049d57806336568abe146104c357806346b45af7146104e2576102dd565b8063248a9ca3116102215780632d7667c9116102065780632d7667c9146104145780632de94807146104335780632f2ff15d1461045f576102dd565b8063248a9ca3146103ca5780632bc1da82146103f5576102dd565b806301ffc9a71461033857806304689a811461036c57806318160ddd1461038d5780631e4e0091146103ab576102dd565b366102dd57345f036102ab576040517fe5099ee30000000000000000000000000000000000000000000000000000000081526004016102a29060208082526004908201525f604082015260600190565b60405180910390fd5b6040517f388f5adc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f36606082826004811015610320576040517fe5099ee30000000000000000000000000000000000000000000000000000000081526004016102a292919061342b565b505061032c8383610813565b80519350602001915050f35b348015610343575f5ffd5b50610357610352366004613477565b6109a8565b60405190151581526020015b60405180910390f35b348015610377575f5ffd5b5061038b610386366004613532565b6109c1565b005b348015610398575f5ffd5b506099545b604051908152602001610363565b3480156103b6575f5ffd5b5061038b6103c53660046135cb565b610bd4565b3480156103d5575f5ffd5b5061039d6103e43660046135eb565b5f908152609d602052604090205490565b348015610400575f5ffd5b5061038b61040f366004613715565b610bed565b34801561041f575f5ffd5b5061038b61042e366004613933565b610ca0565b34801561043e575f5ffd5b5061045261044d366004613a16565b610da5565b6040516103639190613a2f565b34801561046a575f5ffd5b5061038b610479366004613a71565b610dd5565b348015610489575f5ffd5b5061038b610498366004613a9b565b610df6565b3480156104a8575f5ffd5b506104b1610ee3565b60405160ff9091168152602001610363565b3480156104ce575f5ffd5b5061038b6104dd366004613a71565b610efa565b3480156104ed575f5ffd5b5060cf546103579060ff1681565b348015610506575f5ffd5b5061051a6105153660046135eb565b610fd7565b6040516103639190613b52565b348015610532575f5ffd5b5061039d610541366004613b64565b610fe2565b348015610551575f5ffd5b50610565610560366004613b8c565b611079565b6040516103639190613bfd565b34801561057d575f5ffd5b5061039d61058c366004613a16565b73ffffffffffffffffffffffffffffffffffffffff165f908152609a602052604090205490565b3480156105be575f5ffd5b5061038b6111c4565b3480156105d2575f5ffd5b5061038b6105e1366004613c7e565b6111d7565b3480156105f1575f5ffd5b5061038b610600366004613caf565b61120d565b348015610610575f5ffd5b5061038b61061f366004613d16565b611242565b34801561062f575f5ffd5b5061038b61136c565b61038b610646366004613d62565b611404565b348015610656575f5ffd5b5060335473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610363565b3480156106a1575f5ffd5b506106716106b03660046135cb565b61144e565b3480156106c0575f5ffd5b506103576106cf366004613a71565b61146c565b61038b6106e2366004613da6565b611477565b3480156106f2575f5ffd5b5061039d5f81565b348015610705575f5ffd5b506107196107143660046135eb565b6114c1565b6040516103639190613e01565b348015610731575f5ffd5b5061038b610740366004613715565b6114da565b348015610750575f5ffd5b5061039d61075f3660046135eb565b611519565b34801561076f575f5ffd5b5061039d7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b3480156107a2575f5ffd5b5061038b6107b1366004613a71565b61152f565b3480156107c1575f5ffd5b506107196107d0366004613a16565b6115d3565b3480156107e0575f5ffd5b506105656107ef366004613e4e565b611603565b3480156107ff575f5ffd5b5061038b61080e366004613a16565b6116ad565b60605f6108425f357fffffffff0000000000000000000000000000000000000000000000000000000016611764565b5090507fffffffff000000000000000000000000000000000000000000000000000000005f351673ffffffffffffffffffffffffffffffffffffffff82166108db576040517fbb370b2b0000000000000000000000000000000000000000000000000000000081527fffffffff0000000000000000000000000000000000000000000000000000000090911660048201526024016102a2565b505f5f8273ffffffffffffffffffffffffffffffffffffffff16348787333460405160200161090d9493929190613e80565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261094591613ec3565b5f6040518083038185875af1925050503d805f811461097f576040519150601f19603f3d011682016040523d82523d5f602084013e610984565b606091505b509150915081156109995792506109a2915050565b80518060208301fd5b92915050565b5f6109b282611822565b806109a257506109a282611905565b5f54610100900460ff16158080156109df57505f54600160ff909116105b806109f85750303b1580156109f857505f5460ff166001145b610a84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016102a2565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610ae0575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610b5688888080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050604080516020601f8c018190048102820181019092528a815292508a91508990819084018382808284375f92019190915250899250889150879050611969565b610b5e611a40565b610b686001611ade565b8015610bca575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b5f610bde81611c19565b610be88383611c23565b505050565b5f610bf88433610fe2565b90508381610c4b576040517fcba6e97700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024016102a2565b505f610c578483613f06565b9050610c67338683600187611ca1565b5f338285604051602001610c7d93929190613f19565b6040516020818303038152906040529050610c988682611ec5565b505050505050565b8451845181148015610cb25750835181145b8015610cbe5750825181145b8015610cca5750815181145b610d00576040517f263eee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b81811015610d9c57610d94878281518110610d1f57610d1f613f56565b6020026020010151878381518110610d3957610d39613f56565b6020026020010151878481518110610d5357610d53613f56565b6020026020010151878581518110610d6d57610d6d613f56565b6020026020010151878681518110610d8757610d87613f56565b602002602001015161120d565b600101610d02565b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff81165f908152609f602052604090206060906109a290611ef0565b5f828152609d6020526040902054610dec81611c19565b610be88383611efc565b3373ffffffffffffffffffffffffffffffffffffffff84161480610e2f57503373ffffffffffffffffffffffffffffffffffffffff8516145b338486909192610e94576040517f1a525b3200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9384166004820152918316602483015290911660448201526064016102a2565b505050610ea483855f8585611ca1565b8115610edd575f835f83604051602001610ec093929190613f83565b6040516020818303038152906040529050610edb8582611ec5565b505b50505050565b6098545f9060ff16610ef55750601290565b505f90565b73ffffffffffffffffffffffffffffffffffffffff81163314610f49576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81158015610f6e575060335473ffffffffffffffffffffffffffffffffffffffff1633145b1533839091610fc7576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016102a2565b5050610fd38233611f93565b5050565b60606109a28261202a565b5f8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611041575073ffffffffffffffffffffffffffffffffffffffff81165f908152609a60205260409020546109a2565b5073ffffffffffffffffffffffffffffffffffffffff8082165f908152609c60209081526040808320938616835292905220546109a2565b60608167ffffffffffffffff81111561109457611094613602565b6040519080825280602002602001820160405280156110c757816020015b60608152602001906001900390816110b25790505b5090505f5b828110156111bd575f80308686858181106110e9576110e9613f56565b90506020028101906110fb9190613fba565b60405161110992919061401b565b5f60405180830381855af49150503d805f8114611141576040519150601f19603f3d011682016040523d82523d5f602084013e611146565b606091505b509150915081611195578051156111605780518082602001fd5b6040517fb774c284000000000000000000000000000000000000000000000000000000008152600481018490526024016102a2565b808484815181106111a8576111a8613f56565b602090810291909101015250506001016110cc565b5092915050565b6111cc6120c9565b6111d55f61214a565b565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a661120181611c19565b610edb8585858561217d565b3373ffffffffffffffffffffffffffffffffffffffff861614611235576112353386856121c5565b610edb858585858561228c565b3373ffffffffffffffffffffffffffffffffffffffff8416148061127b57503373ffffffffffffffffffffffffffffffffffffffff8516145b3384869091926112e0576040517f98ce294500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9384166004820152918316602483015290911660448201526064016102a2565b5050505f6112ee8585610fe2565b90508281101561132a576040517f0ef76c3500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82810361133b858783600187611ca1565b5f85828560405160200161135193929190613f19565b6040516020818303038152906040529050610d9c8782611ec5565b6113746120c9565b60cf5460ff166113b0576040517fe633442100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60cf80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040515f907f41f386d449eec03c1c3b75bbba9c18df70aa19779ff47f68eab4b6a66fb399d4908290a2565b61140c6120c9565b3415611444576040517ff36ba73700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fd38282612363565b5f828152609e6020526040812061146590836124c2565b9392505050565b5f61146583836124cd565b61147f6120c9565b34156114b7576040517ff36ba73700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fd382826124e4565b5f818152609e602052604090206060906109a290611ef0565b6114e8338484600185611ca1565b5f3383836040516020016114fe93929190613f19565b6040516020818303038152906040529050610edd8482611ec5565b5f818152609e602052604081206109a2906125a8565b5f828152609d602052604090205461154681611c19565b8215801561156e575060335473ffffffffffffffffffffffffffffffffffffffff8381169116145b15828490916115c7576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016102a2565b5050610be88383611f93565b73ffffffffffffffffffffffffffffffffffffffff81165f908152609b602052604090206060906109a290611ef0565b6060815167ffffffffffffffff81111561161f5761161f613602565b60405190808252806020026020018201604052801561165257816020015b606081526020019060019003908161163d5790505b5090505f5b82518110156116a75761168283828151811061167557611675613f56565b602002602001015161202a565b82828151811061169457611694613f56565b6020908102919091010152600101611657565b50919050565b6116b56120c9565b73ffffffffffffffffffffffffffffffffffffffff8116611758576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102a2565b6117618161214a565b50565b5f80806117b37fcee78b4094da86011096000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000086166125b1565b90505f6117bf8261202a565b90508051601414806117d057508051155b8190611809576040517f42bfe79f0000000000000000000000000000000000000000000000000000000081526004016102a29190613b52565b506118138161402a565b60601c95600195509350505050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806118b457507fffffffff0000000000000000000000000000000000000000000000000000000082167f5a05180f00000000000000000000000000000000000000000000000000000000145b806109a257507fffffffff0000000000000000000000000000000000000000000000000000000082167f90832245000000000000000000000000000000000000000000000000000000001492915050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167fc52d600800000000000000000000000000000000000000000000000000000000148061195a575061195a82612634565b806109a257506109a282612689565b5f54610100900460ff166119ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016102a2565b611a0b858585856126e4565b609880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905550505050565b5f54610100900460ff16611ad6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016102a2565b6111d561287e565b5f54610100900460ff16611b74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016102a2565b60cf80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168215159081179091556040517f41f386d449eec03c1c3b75bbba9c18df70aa19779ff47f68eab4b6a66fb399d4905f90a28015611761576117617f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6611c1460335473ffffffffffffffffffffffffffffffffffffffff1690565b611efc565b6117618133612937565b81611c5a576040517fd0dc904b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f828152609d6020526040808220805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b73ffffffffffffffffffffffffffffffffffffffff8416611cee576040517f6355e76600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611d53576040517fdab7504700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8086165f908152609c602090815260408083209388168352929052208390558215611e275773ffffffffffffffffffffffffffffffffffffffff85165f908152609b60205260409020611dbb9085612999565b50828573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167ff772a43bfdf4729b196e3fb54a818b91a2ca6c49d10b2e16278752f9f515c25d84604051611e1a9190613b52565b60405180910390a4610edb565b73ffffffffffffffffffffffffffffffffffffffff85165f908152609b60205260409020611e5590856129ba565b508115158573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f0ebf5762d8855cbe012d2ca42fb33a81175e17c8a8751f8859931ba453bd416784604051611eb69190613b52565b60405180910390a45050505050565b610fd3827f386072cc5a58e61263b434c722725f21031cd06e7c552cfaa06db5de8a320dbc836129db565b60605f61146583612ad4565b5f828152609e60205260408120611f139083612999565b90508015610be85773ffffffffffffffffffffffffffffffffffffffff82165f908152609f60205260409020611f499084612b2c565b50604051339073ffffffffffffffffffffffffffffffffffffffff84169085907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d905f90a4505050565b5f828152609e60205260408120611faa90836129ba565b90508015610be85773ffffffffffffffffffffffffffffffffffffffff82165f908152609f60205260409020611fe09084612b37565b50604051339073ffffffffffffffffffffffffffffffffffffffff84169085907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b905f90a4505050565b5f81815260976020526040902080546060919061204690614096565b80601f016020809104026020016040519081016040528092919081815260200182805461207290614096565b80156120bd5780601f10612094576101008083540402835291602001916120bd565b820191905f5260205f20905b8154815290600101906020018083116120a057829003601f168201915b50505050509050919050565b60335473ffffffffffffffffffffffffffffffffffffffff1633146111d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102a2565b6121747f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a65f611c23565b61176181612b42565b60cf5460ff166121b9576040517fe633442100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610edd84848484612bfd565b73ffffffffffffffffffffffffffffffffffffffff8083165f908152609c602090815260408083209387168352929052205480158061220357508082115b15612268576040517ff3a6b69100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80851660048301526024820183905285166044820152606481018390526084016102a2565b610edd838561227785856140e1565b5f60405180602001604052805f815250611ca1565b73ffffffffffffffffffffffffffffffffffffffff8516158015906122c6575073ffffffffffffffffffffffffffffffffffffffff841615155b6122fc576040517fd2d5ec3000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6123098585858585610edb565b6123168585858585612ca7565b6123238585858585610edb565b5f338686868560405160200161233d9594939291906140f4565b60405160208183030381529060405290506123588682612e60565b610c98858483612e8b565b7f2145e1d6d074577dc71ef54c3807742b41b053a9352ae6b491331509acb9750f82016123bc576040517f85c169bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fd0f59754f88971fe6bc5a6618cc9d5f1e859c58d16b22d1c7b2d3e2b246cd8aa8201612415576040517f76755b3800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f1fd9e056a24d14c4abc642fcc325992a946906d0dbc57dd70278aaf12842024d820161246e576040517f4ef6d7fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f82815260976020526040902061248582826141a4565b50817fece574603820d07bc9b91f2a932baadf4628aabcb8afba49776529c14a6104b2826040516124b69190613b52565b60405180910390a25050565b5f6114658383612fe4565b5f828152609e60205260408120611465908361300a565b805182511461251f576040517f3bcc897900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81515f03612559576040517f97da5f9500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b8251811015610be8576125a083828151811061257957612579613f56565b602002602001015183838151811061259357612593613f56565b6020026020010151612363565b60010161255b565b5f6109a2825490565b604080517fffffffffffffffffffff00000000000000000000000000000000000000000000841660208201525f602a82018190527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008416602c8301529182910160405160208183030381529060405290508061262c906142bb565b949350505050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167fa918fa6b0000000000000000000000000000000000000000000000000000000014806109a257506109a282613038565b5f806126b47f01ffc9a700000000000000000000000000000000000000000000000000000000611764565b50905073ffffffffffffffffffffffffffffffffffffffff81166126da57505f92915050565b61146581846130ce565b5f54610100900460ff1661277a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016102a2565b6127838261319a565b6127e47feafec4d89fa9619884b60000a4d96624a38f7ac2d8d9a604ecf07c12c77e480c5f1b6040518060400160405280600481526020017fa4d966240000000000000000000000000000000000000000000000000000000081525061246e565b61280e7fdeba1e292f8ba88238e10ab3c7f88bd4be4fac56cad5194b6ecceaf653468af18561246e565b6128387f2f0a68ab07768e01943a599e73362a0e17a63a72e94dd2e384d2c1d4db9327568461246e565b6040805160208101839052610edd917fe0261fa95db2eb3b5439bd033cda66d56b96f92f243a8228fd87550ed7bdfdb3910160405160208183030381529060405261246e565b5f54610100900460ff16612914576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016102a2565b6111d55f611c1460335473ffffffffffffffffffffffffffffffffffffffff1690565b61294182826124cd565b81839091610edd576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016102a2565b5f6114658373ffffffffffffffffffffffffffffffffffffffff8416613286565b5f6114658373ffffffffffffffffffffffffffffffffffffffff84166132d2565b612a1b73ffffffffffffffffffffffffffffffffffffffff84167f6bb56a14000000000000000000000000000000000000000000000000000000006130ce565b15610be8576040517f6bb56a1400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690636bb56a1490612a7490859085906004016142fd565b5f604051808303815f875af1158015612a8f573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610edd9190810190614315565b6060815f018054806020026020016040519081016040528092919081815260200182805480156120bd57602002820191905f5260205f20905b815481526020019060010190808311612b0d5750505050509050919050565b5f6114658383613286565b5f61146583836132d2565b5f612b6260335473ffffffffffffffffffffffffffffffffffffffff1690565b9050612b6d826133b5565b73ffffffffffffffffffffffffffffffffffffffff81165f908152609f60205260408120612b9a90611ef0565b90505f5b8151811015610edd575f828281518110612bba57612bba613f56565b60200260200101519050612bce8185611f93565b73ffffffffffffffffffffffffffffffffffffffff851615612bf457612bf48186611efc565b50600101612b9e565b73ffffffffffffffffffffffffffffffffffffffff8416612c4a576040517fd2d5ec3000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612c575f85858585610edb565b612c645f85858585612ca7565b612c715f85858585610edb565b5f335f868685604051602001612c8b9594939291906140f4565b6040516020818303038152906040529050610edb858483612e8b565b73ffffffffffffffffffffffffffffffffffffffff8516612cde578260995f828254612cd39190613f06565b90915550612d949050565b73ffffffffffffffffffffffffffffffffffffffff85165f908152609a602052604090205480868580831015612d66576040517f08d47949000000000000000000000000000000000000000000000000000000008152600481019390935273ffffffffffffffffffffffffffffffffffffffff909116602483015260448201526064016102a2565b50505073ffffffffffffffffffffffffffffffffffffffff86165f908152609a602052604090209084900390555b73ffffffffffffffffffffffffffffffffffffffff8416612dbd57609980548490039055612de8565b73ffffffffffffffffffffffffffffffffffffffff84165f908152609a602052604090208054840190555b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffff