@lukso/lsp-smart-contracts
Version:
The reference smart contract implementation for the LUKSO LSP standards
739 lines • 81 kB
JSON
{
"_format": "hh3-artifact-1",
"contractName": "UniversalProfileInitPostDeploymentModule",
"sourceName": "contracts/modules/UniversalProfileInitPostDeploymentModule.sol",
"abi": [
{
"inputs": [],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"inputs": [],
"name": "ERC725X_ContractDeploymentFailed",
"type": "error"
},
{
"inputs": [],
"name": "ERC725X_CreateOperationsRequireEmptyRecipientAddress",
"type": "error"
},
{
"inputs": [],
"name": "ERC725X_ExecuteParametersEmptyArray",
"type": "error"
},
{
"inputs": [],
"name": "ERC725X_ExecuteParametersLengthMismatch",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "balance",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "ERC725X_InsufficientBalance",
"type": "error"
},
{
"inputs": [],
"name": "ERC725X_MsgValueDisallowedInDelegateCall",
"type": "error"
},
{
"inputs": [],
"name": "ERC725X_MsgValueDisallowedInStaticCall",
"type": "error"
},
{
"inputs": [],
"name": "ERC725X_NoContractBytecodeProvided",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "operationTypeProvided",
"type": "uint256"
}
],
"name": "ERC725X_UnknownOperationType",
"type": "error"
},
{
"inputs": [],
"name": "ERC725Y_DataKeysValuesEmptyArray",
"type": "error"
},
{
"inputs": [],
"name": "ERC725Y_DataKeysValuesLengthMismatch",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "caller",
"type": "address"
}
],
"name": "LSP14CallerNotPendingOwner",
"type": "error"
},
{
"inputs": [],
"name": "LSP14CannotTransferOwnershipToSelf",
"type": "error"
},
{
"inputs": [],
"name": "LSP14MustAcceptOwnershipInSeparateTransaction",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "renounceOwnershipStart",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "renounceOwnershipEnd",
"type": "uint256"
}
],
"name": "LSP14NotInRenounceOwnershipInterval",
"type": "error"
},
{
"inputs": [
{
"internalType": "bool",
"name": "postCall",
"type": "bool"
},
{
"internalType": "bytes4",
"name": "returnedStatus",
"type": "bytes4"
}
],
"name": "LSP20CallVerificationFailed",
"type": "error"
},
{
"inputs": [
{
"internalType": "bool",
"name": "postCall",
"type": "bool"
}
],
"name": "LSP20CallingVerifierFailed",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "logicVerifier",
"type": "address"
}
],
"name": "LSP20EOACannotVerifyCall",
"type": "error"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "functionSelector",
"type": "bytes4"
}
],
"name": "NoExtensionFoundForFunctionSelector",
"type": "error"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "operationType",
"type": "uint256"
},
{
"indexed": true,
"internalType": "address",
"name": "contractAddress",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "value",
"type": "uint256"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "salt",
"type": "bytes32"
}
],
"name": "ContractCreated",
"type": "event"
},
{
"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": "uint256",
"name": "operationType",
"type": "uint256"
},
{
"indexed": true,
"internalType": "address",
"name": "target",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "value",
"type": "uint256"
},
{
"indexed": true,
"internalType": "bytes4",
"name": "selector",
"type": "bytes4"
}
],
"name": "Executed",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint8",
"name": "version",
"type": "uint8"
}
],
"name": "Initialized",
"type": "event"
},
{
"anonymous": false,
"inputs": [],
"name": "OwnershipRenounced",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "previousOwner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "OwnershipTransferStarted",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "previousOwner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "OwnershipTransferred",
"type": "event"
},
{
"anonymous": false,
"inputs": [],
"name": "RenounceOwnershipStarted",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "from",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "value",
"type": "uint256"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "typeId",
"type": "bytes32"
},
{
"indexed": false,
"internalType": "bytes",
"name": "receivedData",
"type": "bytes"
},
{
"indexed": false,
"internalType": "bytes",
"name": "returnedValue",
"type": "bytes"
}
],
"name": "UniversalReceiver",
"type": "event"
},
{
"stateMutability": "payable",
"type": "fallback"
},
{
"inputs": [],
"name": "RENOUNCE_OWNERSHIP_CONFIRMATION_DELAY",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "RENOUNCE_OWNERSHIP_CONFIRMATION_PERIOD",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "VERSION",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "acceptOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes[]",
"name": "data",
"type": "bytes[]"
}
],
"name": "batchCalls",
"outputs": [
{
"internalType": "bytes[]",
"name": "results",
"type": "bytes[]"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "operationType",
"type": "uint256"
},
{
"internalType": "address",
"name": "target",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "execute",
"outputs": [
{
"internalType": "bytes",
"name": "",
"type": "bytes"
}
],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256[]",
"name": "operationsType",
"type": "uint256[]"
},
{
"internalType": "address[]",
"name": "targets",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "values",
"type": "uint256[]"
},
{
"internalType": "bytes[]",
"name": "datas",
"type": "bytes[]"
}
],
"name": "executeBatch",
"outputs": [
{
"internalType": "bytes[]",
"name": "",
"type": "bytes[]"
}
],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "universalProfile",
"type": "address"
},
{
"internalType": "address",
"name": "keyManager",
"type": "address"
},
{
"internalType": "bytes",
"name": "setDataBatchBytes",
"type": "bytes"
}
],
"name": "executePostDeployment",
"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": "initialOwner",
"type": "address"
}
],
"name": "initialize",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "dataHash",
"type": "bytes32"
},
{
"internalType": "bytes",
"name": "signature",
"type": "bytes"
}
],
"name": "isValidSignature",
"outputs": [
{
"internalType": "bytes4",
"name": "returnedStatus",
"type": "bytes4"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "pendingOwner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "renounceOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"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[]"
},
{
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "setDataAndTransferOwnership",
"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": "bytes4",
"name": "interfaceId",
"type": "bytes4"
}
],
"name": "supportsInterface",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "pendingNewOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "typeId",
"type": "bytes32"
},
{
"internalType": "bytes",
"name": "receivedData",
"type": "bytes"
}
],
"name": "universalReceiver",
"outputs": [
{
"internalType": "bytes",
"name": "returnedValues",
"type": "bytes"
}
],
"stateMutability": "payable",
"type": "function"
},
{
"stateMutability": "payable",
"type": "receive"
}
],
"bytecode": "0x60806040523480156200001157600080fd5b506200001c6200002c565b620000266200002c565b620000ed565b600054610100900460ff1615620000995760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000eb576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b613ee780620000fd6000396000f3fe60806040526004361061016e5760003560e01c8063715018a6116100cb578063c4d66de81161007f578063ead3fbdf11610059578063ead3fbdf1461025f578063f2fde38b1461048f578063ffa1ad74146104af576101b9565b8063c4d66de81461043e578063dedff9c614610451578063e30c397814610471576101b9565b80637f23690c116100b05780637f23690c146103e05780638da5cb5b146103f3578063979024211461042b576101b9565b8063715018a6146103b657806379ba5097146103cb576101b9565b806344c028fe1161012257806354f6127f1161010757806354f6127f146103635780636963d438146103835780636bb56a14146103a3576101b9565b806344c028fe146103305780634f04d60a14610350576101b9565b80631626ba7e116101535780631626ba7e146102b757806328c4d14e146102f05780633185845214610310576101b9565b806301bfba611461025f57806301ffc9a714610287576101b9565b366101b95734156101b7576101b57f9c4705229491d365fb5434052e12a386d6771d976bea61070a8c694e8affea3d60001b604051806020016040528060008152506104f8565b505b005b60003660606004821015610247573415610232576102307f9c4705229491d365fb5434052e12a386d6771d976bea61070a8c694e8affea3d60001b84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506104f892505050565b505b50604080516020810190915260008152610254565b61025183836107ce565b90505b915050805190602001f35b34801561026b57600080fd5b5061027460c881565b6040519081526020015b60405180910390f35b34801561029357600080fd5b506102a76102a23660046132a7565b6109aa565b604051901515815260200161027e565b3480156102c357600080fd5b506102d76102d2366004613389565b610a95565b6040516001600160e01b0319909116815260200161027e565b3480156102fc57600080fd5b506101b761030b3660046133e7565b610c3a565b61032361031e36600461357f565b610d2b565b60405161027e919061372c565b61034361033e36600461373f565b610e3d565b60405161027e9190613794565b6101b761035e3660046137a7565b610f26565b34801561036f57600080fd5b5061034361037e36600461381b565b611069565b34801561038f57600080fd5b5061032361039e366004613834565b611074565b6103436103b1366004613389565b6104f8565b3480156103c257600080fd5b506101b76111d0565b3480156103d757600080fd5b506101b7611339565b6101b76103ee366004613389565b6114c5565b3480156103ff57600080fd5b506000546201000090046001600160a01b03165b6040516001600160a01b03909116815260200161027e565b6101b76104393660046138a9565b6115ae565b6101b761044c366004613903565b611760565b34801561045d57600080fd5b5061032361046c36600461391e565b611881565b34801561047d57600080fd5b506003546001600160a01b0316610413565b34801561049b57600080fd5b506101b76104aa366004613903565b61192c565b3480156104bb57600080fd5b506103436040518060400160405280600681526020017f302e31362e33000000000000000000000000000000000000000000000000000081525081565b6060341580159061052957507f9c4705229491d365fb5434052e12a386d6771d976bea61070a8c694e8affea3d8314155b15610594576105927f9c4705229491d365fb5434052e12a386d6771d976bea61070a8c694e8affea3d60001b6000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506104f892505050565b505b60006105bf7f0cfc51aec37c55a4d0b1a65c6255c4bf2fbdf6277f3cc0730c45b828b6db8b47611ade565b9050606060148251106106705760006105d783613953565b60601c90506105ed81635122dded60e11b611b80565b1561066e57604051635122dded60e11b81526001600160a01b0382169063a245bbda9061062490339034908b908b9060040161398f565b6000604051808303816000875af1158015610643573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261066b91908101906139bd565b91505b505b600061069c7f0cfc51aec37c55a4d0b10000000000000000000000000000000000000000000087611c09565b905060006106a982611ade565b90506060601482511061075a5760006106c183613953565b60601c90506106d781635122dded60e11b611b80565b1561075857604051635122dded60e11b81526001600160a01b0382169063a245bbda9061070e90339034908e908e9060040161398f565b6000604051808303816000875af115801561072d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261075591908101906139bd565b91505b505b838160405160200161076d929190613a2b565b60405160208183030381529060405295508734336001600160a01b03167f9c3ba68eb5742b8e3961aea0afc7371a71bf433c8a67a831803b64c064a178c28a8a6040516107bb929190613a2b565b60405180910390a4505050505092915050565b60606000806107e86000356001600160e01b031916611c72565b91509150346000141580156107fb575080155b15610865576108637f9c4705229491d365fb5434052e12a386d6771d976bea61070a8c694e8affea3d60001b86868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506104f892505050565b505b6000356001600160e01b03191615801561088657506001600160a01b038216155b156108a45760405180602001604052806000815250925050506109a4565b6001600160a01b0382166108f7576040517fbb370b2b0000000000000000000000000000000000000000000000000000000081526001600160e01b03196000351660048201526024015b60405180910390fd5b600080836001600160a01b031683610910576000610912565b345b888833346040516020016109299493929190613a50565b60408051601f198184030181529082905261094391613a80565b60006040518083038185875af1925050503d8060008114610980576040519150601f19603f3d011682016040523d82523d6000602084013e610985565b606091505b5091509150811561099b5793506109a492505050565b80518060208301fd5b92915050565b60006001600160e01b03198216630b135d3f60e11b14806109f457506001600160e01b031982167f24871b3d00000000000000000000000000000000000000000000000000000000145b80610a0f57506001600160e01b03198216631aed5a8560e21b145b80610a4357506001600160e01b031982167f94be599900000000000000000000000000000000000000000000000000000000145b80610a7757506001600160e01b031982167f1a0eb6a500000000000000000000000000000000000000000000000000000000145b80610a865750610a8682611d69565b806109a457506109a482611da7565b600080546201000090046001600160a01b0316803b15610bba57600080826001600160a01b0316631626ba7e60e01b8787604051602401610ad7929190613a9c565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051610b159190613a80565b600060405180830381855afa9150503d8060008114610b50576040519150601f19603f3d011682016040523d82523d6000602084013e610b55565b606091505b50915091506000828015610b6a575081516020145b8015610b9157508151630b135d3f60e11b90610b8f9084016020908101908501613ab5565b145b905080610ba6576001600160e01b0319610baf565b630b135d3f60e11b5b9450505050506109a4565b600080610bc78686611de5565b90925090506000816004811115610be057610be0613ace565b14610bf957506001600160e01b031992506109a4915050565b826001600160a01b0316826001600160a01b031614610c20576001600160e01b0319610c29565b630b135d3f60e11b5b93505050506109a4565b5092915050565b600080610c49838501856138a9565b91509150856001600160a01b03166344c028fe600430600086868b604051602401610c7693929190613ae4565b60408051601f198184030181529181526020820180516001600160e01b03167f4f04d60a000000000000000000000000000000000000000000000000000000001790525160e086901b6001600160e01b0319168152610cdb9493929190600401613b4c565b6000604051808303816000875af1158015610cfa573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d2291908101906139bd565b50505050505050565b60603415610db6576040516001600160e01b03196000351660208201527f9c4705229491d365fb5434052e12a386d6771d976bea61070a8c694e8affea3d90349033907f9c3ba68eb5742b8e3961aea0afc7371a71bf433c8a67a831803b64c064a178c29060240160408051601f1981840301815290829052610dad91613b7a565b60405180910390a45b6000546201000090046001600160a01b031633819003610de457610ddc86868686611e2a565b915050610e35565b6000610def82611fba565b90506000610dff88888888611e2a565b90508115610e3057610e308382604051602001610e1c919061372c565b604051602081830303815290604052612186565b925050505b949350505050565b60603415610ec8576040516001600160e01b03196000351660208201527f9c4705229491d365fb5434052e12a386d6771d976bea61070a8c694e8affea3d90349033907f9c3ba68eb5742b8e3961aea0afc7371a71bf433c8a67a831803b64c064a178c29060240160408051601f1981840301815290829052610ebf91613b7a565b60405180910390a45b6000546201000090046001600160a01b031633819003610eee57610ddc868686866122bc565b6000610ef982611fba565b90506000610f09888888886122bc565b90508115610e3057610e308382604051602001610e1c9190613794565b6000546201000090046001600160a01b03166001600160a01b0316336001600160a01b03161461100a5760405162461bcd60e51b815260206004820152606860248201527f556e6976657273616c50726f66696c65496e6974506f73744465706c6f796d6560448201527f6e744d6f64756c653a2073657444617461416e645472616e736665724f776e6560648201527f7273686970206f6e6c7920616c6c6f776564207468726f7567682064656c656760848201527f6174652063616c6c00000000000000000000000000000000000000000000000060a482015260c4016108ee565b60005b835181101561105a5761105284828151811061102b5761102b613ba4565b602002602001015184838151811061104557611045613ba4565b6020026020010151612412565b60010161100d565b5061106481612467565b505050565b60606109a482611ade565b60608167ffffffffffffffff81111561108f5761108f6132c4565b6040519080825280602002602001820160405280156110c257816020015b60608152602001906001900390816110ad5790505b50905060005b82811015610c3357600080308686858181106110e6576110e6613ba4565b90506020028101906110f89190613bba565b604051611106929190613c01565b600060405180830381855af49150503d8060008114611141576040519150601f19603f3d011682016040523d82523d6000602084013e611146565b606091505b5091509150816111a8578051156111605780518082602001fd5b60405162461bcd60e51b815260206004820152601960248201527f4c5350303a20626174636843616c6c732072657665727465640000000000000060448201526064016108ee565b808484815181106111bb576111bb613ba4565b602090810291909101015250506001016110c8565b6000546201000090046001600160a01b031633819003611285576000546201000090046001600160a01b03166112046124fe565b6000546201000090046001600160a01b031661128157604080516001600160a01b0384166020820152600091810191909152611281907fa4e59c931d14f7c8a7a35027f92ee40b5f2886b9fdcdb78f30bc5ecce5a2f814906060015b60408051601f198184030181529190526001600160a01b038416919061260a565b5050565b600061129082611fba565b905060006112ad6000546001600160a01b03620100009091041690565b90506112b76124fe565b6000546201000090046001600160a01b031661131757604080516001600160a01b0385166020820152600091810191909152611317907fa4e59c931d14f7c8a7a35027f92ee40b5f2886b9fdcdb78f30bc5ecce5a2f81490606001611260565b8115611064576110648360405180602001604052806000815250612186565b50565b600354600160a01b900460ff161561137d576040517f5758dd0700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546003546001600160a01b03620100009092048216929116903382146113ce576113a982611fba565b90506113b482612467565b600380546001600160a01b031916905560006002556113d6565b6113d661269e565b604080516001600160a01b03808616602083015284169181019190915261143e907fa4e59c931d14f7c8a7a35027f92ee40b5f2886b9fdcdb78f30bc5ecce5a2f814906060015b60408051601f198184030181529190526001600160a01b038616919061260a565b604080516001600160a01b0380861660208301528416918101919091526114a6907fceca317f109c43507871523e82dc2a3cc64dfa18f12da0b6db14f6e23f995538906060015b60408051601f198184030181529190526001600160a01b038516919061260a565b8015611064576110648260405180602001604052806000815250612186565b341561154e576040516001600160e01b03196000351660208201527f9c4705229491d365fb5434052e12a386d6771d976bea61070a8c694e8affea3d90349033907f9c3ba68eb5742b8e3961aea0afc7371a71bf433c8a67a831803b64c064a178c29060240160408051601f198184030181529082905261154591613b7a565b60405180910390a45b6000546201000090046001600160a01b031633819003611572576110648383612412565b600061157d82611fba565b90506115898484612412565b80156115a8576115a88260405180602001604052806000815250612186565b50505050565b3415611637576040516001600160e01b03196000351660208201527f9c4705229491d365fb5434052e12a386d6771d976bea61070a8c694e8affea3d90349033907f9c3ba68eb5742b8e3961aea0afc7371a71bf433c8a67a831803b64c064a178c29060240160408051601f198184030181529082905261162e91613b7a565b60405180910390a45b8051825114611672576040517f3bcc897900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81516000036116ad576040517f97da5f9500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546201000090046001600160a01b0316338190036116f05760005b83518110156115a8576116e884828151811061102b5761102b613ba4565b6001016116ca565b60006116fb82611fba565b905060005b84518110156117405761173885828151811061171e5761171e613ba4565b602002602001015185838151811061104557611045613ba4565b600101611700565b5080156115a8576115a88260405180602001604052806000815250612186565b600054610100900460ff16158080156117805750600054600160ff909116105b8061179a5750303b15801561179a575060005460ff166001145b61180c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016108ee565b6000805460ff19166001179055801561182f576000805461ff0019166101001790555b61183882612704565b8015611281576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b6060815167ffffffffffffffff81111561189d5761189d6132c4565b6040519080825280602002602001820160405280156118d057816020015b60608152602001906001900390816118bb5790505b50905060005b8251811015611926576119018382815181106118f4576118f4613ba4565b6020026020010151611ade565b82828151811061191357611913613ba4565b60209081029190910101526001016118d6565b50919050565b6000546201000090046001600160a01b0316338190036119fe576003805460ff60a01b1916600160a01b179055611962826127da565b816001600160a01b0316816001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a3604080516001600160a01b0380841660208301528416918101919091526119ed907fe17117c9d2665d1dbeb479ed8058bbebde3c50ac50e2e65619f60006caac692690606001611485565b6003805460ff60a01b191690555050565b6000611a0982611fba565b6003805460ff60a01b1916600160a01b1790559050611a27836127da565b826001600160a01b0316826001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a3604080516001600160a01b038085166020830152851691810191909152611ab2907fe17117c9d2665d1dbeb479ed8058bbebde3c50ac50e2e65619f60006caac69269060600161141d565b6003805460ff60a01b191690558015611064576110648260405180602001604052806000815250612186565b6000818152600160205260409020805460609190611afb90613c11565b80601f0160208091040260200160405190810160405280929190818152602001828054611b2790613c11565b8015611b745780601f10611b4957610100808354040283529160200191611b74565b820191906000526020600020905b815481529060010190602001808311611b5757829003601f168201915b50505050509050919050565b604080516001600160e01b03198316602480830191909152825180830390910181526044909101909152602080820180516001600160e01b03166301ffc9a760e01b178152825160009392849283928392918391908a617530fa92503d91506000519050828015611bf2575060208210155b8015611bfe5750600081115b979650505050505050565b604080517fffffffffffffffffffff00000000000000000000000000000000000000000000841660208201526000602a82018190526bffffffffffffffffffffffff198416602c83015291829101604051602081830303815290604052905080610e3590613c45565b60008080611caa7fcee78b4094da86011096000000000000000000000000000000000000000000006001600160e01b03198616611c09565b90506000611cb782611ade565b9050601481511015611cd0575060009485945092505050565b8051601503611d515780601481518110611cec57611cec613ba4565b01602001517fff00000000000000000000000000000000000000000000000000000000000000167f010000000000000000000000000000000000000000000000000000000000000003611d5157611d4281613953565b60601c95600195509350505050565b611d5a81613953565b60601c95600095509350505050565b60006001600160e01b031982167fa918fa6b0000000000000000000000000000000000000000000000000000000014806109a457506109a482612843565b600080611dba6301ffc9a760e01b611c72565b5090506001600160a01b038116611dd45750600092915050565b611dde8184611b80565b9392505050565b6000808251604103611e1b5760208301516040840151606085015160001a611e0f87828585612881565b94509450505050611e23565b506000905060025b9250929050565b606083518551141580611e4b575082518451141580611e4b57508151835114155b15611e82576040517f3ff55f4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8451600003611ebd576040517fe9ad2b5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000855167ffffffffffffffff811115611ed957611ed96132c4565b604051908082528060200260200182016040528015611f0c57816020015b6060815260200190600190039081611ef75790505b50905060005b8651811015611fb057611f8b878281518110611f3057611f30613ba4565b6020026020010151878381518110611f4a57611f4a613ba4565b6020026020010151878481518110611f6457611f64613ba4565b6020026020010151878581518110611f7e57611f7e613ba4565b60200260200101516122bc565b828281518110611f9d57611f9d613ba4565b6020908102919091010152600101611f12565b5095945050505050565b6000816001600160a01b03163b60000361200b576040517f0c3923010000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024016108ee565b6040517fde928f140000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063de928f149061205b9033903090829034906000903690600401613c69565b6020604051808303816000875af1925050508015612096575060408051601f3d908101601f1916820190925261209391810190613cc6565b60015b6120d5573d8080156120c4576040519150601f19603f3d011682016040523d82523d6000602084013e6120c9565b606091505b50611926600082612945565b7fffffff000000000000000000000000000000000000000000000000000000000081167fde928f00000000000000000000000000000000000000000000000000000000001461214a57604051639d6741e360e01b8152600060048201526001600160e01b0319821660248201526044016108ee565b8060031a60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916600160f81b14915050919050565b919050565b816001600160a01b031663d3fc45d3333033346000366040516020016121b196959493929190613ce3565b60405160208183030381529060405280519060200120836040518363ffffffff1660e01b81526004016121e5929190613a9c565b6020604051808303816000875af1925050508015612220575060408051601f3d908101601f1916820190925261221d91810190613cc6565b60015b61225f573d80801561224e576040519150601f19603f3d011682016040523d82523d6000602084013e612253565b606091505b50611064600182612945565b6001600160e01b031981167fd3fc45d3000000000000000000000000000000000000000000000000000000001461106457604051639d6741e360e01b8152600160048201526001600160e01b0319821660248201526044016108ee565b6060846122d5576122ce84848461298b565b9050610e35565b6001850361230f576001600160a01b0384161561230557604051631820c12560e11b815260040160405180910390fd5b6122ce8383612abc565b60028503612349576001600160a01b0384161561233f57604051631820c12560e11b815260040160405180910390fd5b6122ce8383612bd6565b60038503612393578215612389576040517f72f2bc6a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6122ce8483612cc0565b600485036123dd5782156123d3576040517f5ac8313500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6122ce8483612dc4565b6040517f7583b3bc000000000000000000000000000000000000000000000000000000008152600481018690526024016108ee565b600082815260016020526040902061242a8282613d81565b50817fece574603820d07bc9b91f2a932baadf4628aabcb8afba49776529c14a6104b28260405161245b9190613794565b60405180910390a25050565b6000546001600160a01b0382811662010000909204161461133657600080546040516001600160a01b03808516936201000090930416917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b03831662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff90911617905550565b60025443906000906125129060c890613e57565b9050600061252160c883613e57565b9050808311806125315750600254155b15612579576002839055600380546001600160a01b03191690556040517f81b7f830f1f0084db6497c486cbe6974c86488dcc4e3738eab94ab6d6b1653e790600090a1505050565b818310156125bd576040517f1b08094200000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016108ee565b6125c76000612467565b60006002819055600380546001600160a01b03191690556040517fd1f66c3d2bc1993a86be5e3d33709d98f0442381befcedd29f578b9b2506b1ce9190a1505050565b6126246001600160a01b038416631aed5a8560e21b611b80565b1561106457604051631aed5a8560e21b81526001600160a01b03841690636bb56a14906126579085908590600401613a9c565b6000604051808303816000875af1158015612676573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526115a891908101906139bd565b6003546001600160a01b031633146126e4576040517f451e45280000000000000000000000000000000000000000000000000000000081523360048201526024016108ee565b6126ed33612467565b600380546001600160a01b03191690556000600255565b600054610100900460ff1661276f5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016108ee565b61277881612e75565b6113367feafec4d89fa9619884b600005ef83ad9559033e6e941db7d7c495acdce61634760001b6040518060400160405280600481526020017f5ef83ad900000000000000000000000000000000000000000000000000000000815250612412565b306001600160a01b0382160361281c576040517fe052a6f800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b03929092169190911790556000600255565b60006001600160e01b031982167f629aa6940000000000000000000000000000000000000000000000000000000014806109a457506109a482612f6e565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156128b8575060009050600361293c565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561290c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166129355760006001925092505061293c565b9150600090505b94509492505050565b8051156129555780518082602001fd5b6040517f8c6a8ae300000000000000000000000000000000000000000000000000000000815282151560048201526024016108ee565b6060824710156129b7576040516301bf351f60e31b8152476004820152602481018490526044016108ee565b6129c082613e6a565b6001600160e01b031916846001600160a01b031660007f4810874456b8e6487bd861375cf6abd8e1c8bb5858c8ce36a86a04dabfac199e86604051612a0791815260200190565b60405180910390a4600080856001600160a01b03168585604051612a2b9190613a80565b60006040518083038185875af1925050503d8060008114612a68576040519150601f19603f3d011682016040523d82523d6000602084013e612a6d565b606091505b5091509150612ab282826040518060400160405280601681526020017f455243373235583a20556e6b6e6f776e204572726f7200000000000000000000815250612fbc565b9695505050505050565b606082471015612ae8576040516301bf351f60e31b8152476004820152602481018490526044016108ee565b8151600003612b0a5760405163b81cd8d960e01b815260040160405180910390fd5b600082516020840185f090506001600160a01b038116612b56576040517f0b07489b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000801b816001600160a01b031660017fa1fb700aaee2ae4a2ff6f91ce7eba292f89c2f5488b8ec4c5c5c8150692595c387604051612b9791815260200190565b60405180910390a46040516bffffffffffffffffffffffff19606083901b16602082015260340160405160208183030381529060405291505092915050565b60608151600003612bfa5760405163b81cd8d960e01b815260040160405180910390fd5b6000612c138360208551612c0e9190613e9e565b612fd5565b90506000612c3084600060208751612c2b9190613e9e565b61303b565b90506000612c3f868484613163565b905082816001600160a01b031660027fa1fb700aaee2ae4a2ff6f91ce7eba292f89c2f5488b8ec4c5c5c8150692595c389604051612c7f91815260200190565b60405180910390a46040516bffffffffffffffffffffffff19606083901b166020820152603401604051602081830303815290604052935050505092915050565b6060612ccb82613e6a565b6001600160e01b031916836001600160a01b031660037f4810874456b8e6487bd861375cf6abd8e1c8bb5858c8ce36a86a04dabfac199e6000604051612d1391815260200190565b60405180910390a4600080846001600160a01b031684604051612d369190613a80565b600060405180830381855afa9150503d8060008114612d71576040519150601f19603f3d011682016040523d82523d6000602084013e612d76565b606091505b5091509150612dbb82826040518060400160405280601681526020017f455243373235583a20556e6b6e6f776e204572726f7200000000000000000000815250612fbc565b95945050505050565b6060612dcf82613e6a565b6001600160e01b031916836001600160a01b031660047f4810874456b8e6487bd861375cf6abd8e1c8bb5858c8ce36a86a04dabfac199e6000604051612e1791815260200190565b60405180910390a4600080846001600160a01b031684604051612e3a9190613a80565b600060405180830381855af49150503d8060008114612d71576040519150601f19603f3d011682016040523d82523d6000602084013e612d76565b600054610100900460ff16612ee05760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016108ee565b3415612f65577f9c4705229491d365fb5434052e12a386d6771d976bea61070a8c694e8affea3d60001b34336001600160a01b03167f9c3ba68eb5742b8e3961aea0afc7371a71bf433c8a67a831803b64c064a178c2604051612f5c906040808252600090820181905260606020830181905282015260800190565b60405180910390a45b61133681612467565b60006001600160e01b031982167f7545acac0000000000000000000000000000000000000000000000000000000014806109a457506301ffc9a760e01b6001600160e01b03198316146109a4565b60608315612fcb575081611dde565b611dde8383613267565b6000612fe2826020613e57565b835110156130325760405162461bcd60e51b815260206004820152601560248201527f746f427974657333325f6f75744f66426f756e6473000000000000000000000060448201526064016108ee565b50016020015190565b60608161304981601f613e57565b10156130975760405162461bcd60e51b815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016108ee565b6130a18284613e57565b845110156130f15760405162461bcd60e51b815260206004820152601160248201527f736c6963655f6f75744f66426f756e647300000000000000000000000000000060448201526064016108ee565b606082158015613110576040519150600082526020820160405261315a565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015613149578051835260209283019201613131565b5050858452601f01601f1916604052505b50949350505050565b6000834710156131b55760405162461bcd60e51b815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e636500000060448201526064016108ee565b81516000036132065760405162461bcd60e51b815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f60448201526064016108ee565b8282516020840186f590506001600160a01b038116611dde5760405162461bcd60e51b815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f790000000000000060448201526064016108ee565b8151156132775781518083602001fd5b8060405162461bcd60e51b81526004016108ee9190613794565b6001600160e01b03198116811461133657600080fd5b6000602082840312156132b957600080fd5b8135611dde81613291565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613303576133036132c4565b604052919050565b600067ffffffffffffffff821115613325576133256132c4565b50601f01601f191660200190565b600082601f83011261334457600080fd5b81356133576133528261330b565b6132da565b81815284602083860101111561336c57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806040838503121561339c57600080fd5b82359150602083013567ffffffffffffffff8111156133ba57600080fd5b6133c685828601613333565b9150509250929050565b80356001600160a01b038116811461218157600080fd5b600080600080606085870312156133fd57600080fd5b613406856133d0565b9350613414602086016133d0565b9250604085013567ffffffffffffffff8082111561343157600080fd5b818701915087601f83011261344557600080fd5b81358181111561345457600080fd5b88602082850101111561346657600080fd5b95989497505060200194505050565b600067ffffffffffffffff82111561348f5761348f6132c4565b5060051b60200190565b600082601f8301126134aa57600080fd5b813560206134ba61335283613475565b82815260059290921b840181019181810190868411156134d957600080fd5b8286015b848110156134f457803583529183019183016134dd565b509695505050505050565b600082601f83011261351057600080fd5b8135602061352061335283613475565b82815260059290921b8401810191818101908684111561353f57600080fd5b8286015b848110156134f457803567ffffffffffffffff8111156135635760008081fd5b6135718986838b0101613333565b845250918301918301613543565b6000806000806080858703121561359557600080fd5b843567ffffffffffffffff808211156135ad57600080fd5b6135b988838901613499565b95506020915081870135818111156135d057600080fd5b8701601f810189136135e157600080fd5b80356135ef61335282613475565b81815260059190911b8201840190848101908b83111561360e57600080fd5b928501925b8284101561363357613624846133d0565b82529285019290850190613613565b9750505050604087013591508082111561364c57600080fd5b61365888838901613499565b9350606087013591508082111561366e57600080fd5b5061367b878288016134ff565b91505092959194509250565b60005b838110156136a257818101518382015260200161368a565b50506000910152565b600081518084526136c3816020860160208601613687565b601f01601f19169290920160200192915050565b600081518084526020808501808196508360051b8101915082860160005b8581101561371f57828403895261370d8483516136ab565b988501989350908401906001016136f5565b5091979650505050505050565b602081526000611dde60208301846136d7565b6000806000806080858703121561375557600080fd5b84359350613765602086016133d0565b925060408501359150606085013567ffffffffffffffff81111561378857600080fd5b61367b87828801613333565b602081526000611dde60208301846136ab565b6000806000606084860312156137bc57600080fd5b833567ffffffffffffffff808211156137d457600080fd5b6137e087838801613499565b945060208601359150808211156137f657600080fd5b50613803868287016134ff565b925050613812604085016133d0565b90509250925092565b60006020828403121561382d57600080fd5b5035919050565b6000806020838503121561384757600080fd5b823567ffffffffffffffff8082111561385f57600080fd5b818501915085601f83011261387357600080fd5b81358181111561388257600080fd5b8660208260051b850101111561389757600080fd5b60209290920196919550909350505050565b600080604083850312156138bc57600080fd5b823567ffffffffffffffff808211156138d457600080fd5b6138e086838701613499565b935060208501359150808211156138f657600080fd5b506133c6858286016134ff565b60006020828403121561391557600080fd5b611dde826133d0565b60006020828403121561393057600080fd5b813567ffffffffffffffff81111561394757600080fd5b610e3584828501613499565b805160208201516bffffffffffffffffffffffff1980821692919060148310156139875780818460140360031b1b83161693505b505050919050565b6001600160a01b0385168152836020820152826040820152608060608201526000612ab260808301846136ab565b6000602082840312156139cf57600080fd5b815167ffffffffffffffff8111156139e657600080fd5b8201601f810184136139f757600080fd5b8051613a056133528261330b565b818152856020838501011115613a1a57600080fd5b612dbb826020830160208601613687565b604081526000613a3e60408301856136ab565b8281036020840152612dbb81856136ab565b8385823760609290921b6bffffffffffffffffffffffff1916919092019081526014810191909152603401919050565b60008251613a92818460208701613687565b9190910192915050565b828152604060208201526000610e3560408301846136ab565b600060208284031215613ac757600080fd5b5051919050565b634e487b7160e01b600052602160045260246000fd5b606080825284519082018190526000906020906080840190828801845b82811015613b1d57815184529284019290840190600101613b01565b50505083810382850152613b3181876136d7565b925050506001600160a01b0383166040830152949350505050565b8481526001600160a01b0384166020820152826040820152608060608201526000612ab260808301846136ab565b604081526000613b8d60408301846136ab565b828103602093840152600081529190910192915050565b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112613bd157600080fd5b83018035915067ffffffffffffffff821115613bec57600080fd5b602001915036819003821315611e2357600080fd5b8183823760009101908152919050565b600181811c90821680613c2557607f821691505b60208210810361192657634e487b7160e01b600052602260045260246000fd5b805160208083015191908110156119265760001960209190910360031b1b16919050565b60006001600160a01b038089168352808816602084015280871660408401525084606083015260a060808301528260a0830152828460c0840137600060c0848401015260c0601f19601f8501168301019050979650505050505050565b600060208284031215613cd857600080fd5b8151611dde81613291565b60006bffffffffffffffffffffffff19808960601b168352808860601b166014840152808760601b1660288401525084603c8301528284605c8401375060009101605c0190815295945050505050565b601f82111561106457600081815260208120601f850160051c81016020861015613d5a5750805b601f850160051c820191505b81811015613d7957828155600101613d66565b505050505050565b815167ffffffffffffffff811115613d9b57613d9b6132c4565b613daf81613da98454613c11565b84613d33565b602080601f831160018114613de45760008415613dcc5750858301515b600019600386901b1c1916600185901b178555613d79565b600085815260208120601f198616915b82811015613e1357888601518255948401946001909101908401613df4565b5085821015613e315787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b808201808211156109a4576109a4613e41565b6000815160208301516001600160e01b0319808216935060048310156139875760049290920360031b82901b161692915050565b818103818111156109a4576109a4613e4156fea26469706673582212206f0508a83a880bac2a6b5835011c8c77aabd649a2fd429bc7575970613007f6464736f6c63430008110033",
"deployedBytecode": "0x60806040526004361061016e5760003560e01c8063715018a6116100cb578063c4d66de81161007f578063ead3fbdf11610059578063ead3fbdf1461025f578063f2fde38b1461048f578063ffa1ad74146104af576101b9565b8063c4d66de81461043e578063dedff9c614610451578063e30c397814610471576101b9565b80637f23690c116100b05780637f23690c146103e05780638da5cb5b146103f3578063979024211461042b576101b9565b8063715018a6146103b657806379ba5097146103cb576101b9565b806344c028fe1161012257806354f6127f1161010757806354f6127f146103635780636963d438146103835780636bb56a14146103a3576101b9565b806344c028fe146103305780634f04d60a14610350576101b9565b80631626ba7e116101535780631626ba7e146102b757806328c4d14e146102f05780633185845214610310576101b9565b806301bfba611461025f57806301ffc9a714610287576101b9565b366101b95734156101b7576101b57f9c4705229491d365fb5434052e12a386d6771d976bea61070a8c694e8affea3d60001b604051806020016040528060008152506104f8565b505b005b60003660606004821015610247573415610232576102307f9c4705229491d365fb5434052e12a386d6771d976bea61070a8c694e8affea3d60001b84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506104f892505050565b505b50604080516020810190915260008152610254565b61025183836107ce565b90505b915050805190602001f35b34801561026b57600080fd5b5061027460c881565b6040519081526020015b60405180910390f35b34801561029357600080fd5b506102a76102a23660046132a7565b6109aa565b604051901515815260200161027e565b3480156102c357600080fd5b506102d76102d2366004613389565b610a95565b6040516001600160e01b0319909116