UNPKG

@lukso/lsp-smart-contracts

Version:

The reference smart contract implementation for the LUKSO LSP standards

617 lines 82.4 kB
{ "_format": "hh-sol-artifact-1", "contractName": "LSP6KeyManagerInit", "sourceName": "@lukso/lsp6-contracts/contracts/LSP6KeyManagerInit.sol", "abi": [ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "BatchExecuteParamsLengthMismatch", "type": "error" }, { "inputs": [], "name": "BatchExecuteRelayCallParamsLengthMismatch", "type": "error" }, { "inputs": [], "name": "CallingKeyManagerNotAllowed", "type": "error" }, { "inputs": [], "name": "DelegateCallDisallowedViaKeyManager", "type": "error" }, { "inputs": [], "name": "ERC725X_ExecuteParametersEmptyArray", "type": "error" }, { "inputs": [], "name": "ERC725X_ExecuteParametersLengthMismatch", "type": "error" }, { "inputs": [], "name": "ERC725Y_DataKeysValuesLengthMismatch", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "dataKey", "type": "bytes32" }, { "internalType": "bytes", "name": "dataValue", "type": "bytes" } ], "name": "InvalidDataValuesForDataKeys", "type": "error" }, { "inputs": [ { "internalType": "bytes4", "name": "invalidFunction", "type": "bytes4" } ], "name": "InvalidERC725Function", "type": "error" }, { "inputs": [ { "internalType": "bytes", "name": "allowedCallsValue", "type": "bytes" } ], "name": "InvalidEncodedAllowedCalls", "type": "error" }, { "inputs": [ { "internalType": "bytes", "name": "value", "type": "bytes" }, { "internalType": "string", "name": "context", "type": "string" } ], "name": "InvalidEncodedAllowedERC725YDataKeys", "type": "error" }, { "inputs": [], "name": "InvalidLSP6Target", "type": "error" }, { "inputs": [ { "internalType": "bytes", "name": "payload", "type": "bytes" } ], "name": "InvalidPayload", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "signer", "type": "address" }, { "internalType": "uint256", "name": "invalidNonce", "type": "uint256" }, { "internalType": "bytes", "name": "signature", "type": "bytes" } ], "name": "InvalidRelayNonce", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" } ], "name": "InvalidWhitelistedCall", "type": "error" }, { "inputs": [], "name": "KeyManagerCannotBeSetAsExtensionForLSP20Functions", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "totalValues", "type": "uint256" }, { "internalType": "uint256", "name": "msgValue", "type": "uint256" } ], "name": "LSP6BatchExcessiveValueSent", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "totalValues", "type": "uint256" }, { "internalType": "uint256", "name": "msgValue", "type": "uint256" } ], "name": "LSP6BatchInsufficientValueSent", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" } ], "name": "NoCallsAllowed", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" } ], "name": "NoERC725YDataKeysAllowed", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" } ], "name": "NoPermissionsSet", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "bytes4", "name": "selector", "type": "bytes4" } ], "name": "NotAllowedCall", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "bytes32", "name": "disallowedKey", "type": "bytes32" } ], "name": "NotAllowedERC725YDataKey", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "string", "name": "permission", "type": "string" } ], "name": "NotAuthorised", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "dataKey", "type": "bytes32" } ], "name": "NotRecognisedPermissionKey", "type": "error" }, { "inputs": [], "name": "RelayCallBeforeStartTime", "type": "error" }, { "inputs": [], "name": "RelayCallExpired", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "signer", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "value", "type": "uint256" }, { "indexed": true, "internalType": "bytes4", "name": "selector", "type": "bytes4" } ], "name": "PermissionsVerified", "type": "event" }, { "inputs": [], "name": "VERSION", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes", "name": "payload", "type": "bytes" } ], "name": "execute", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "values", "type": "uint256[]" }, { "internalType": "bytes[]", "name": "payloads", "type": "bytes[]" } ], "name": "executeBatch", "outputs": [ { "internalType": "bytes[]", "name": "", "type": "bytes[]" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "bytes", "name": "signature", "type": "bytes" }, { "internalType": "uint256", "name": "nonce", "type": "uint256" }, { "internalType": "uint256", "name": "validityTimestamps", "type": "uint256" }, { "internalType": "bytes", "name": "payload", "type": "bytes" } ], "name": "executeRelayCall", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "bytes[]", "name": "signatures", "type": "bytes[]" }, { "internalType": "uint256[]", "name": "nonces", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "validityTimestamps", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "values", "type": "uint256[]" }, { "internalType": "bytes[]", "name": "payloads", "type": "bytes[]" } ], "name": "executeRelayCallBatch", "outputs": [ { "internalType": "bytes[]", "name": "", "type": "bytes[]" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "uint128", "name": "channelId", "type": "uint128" } ], "name": "getNonce", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "target_", "type": "address" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "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": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "targetContract", "type": "address" }, { "internalType": "address", "name": "caller", "type": "address" }, { "internalType": "uint256", "name": "msgValue", "type": "uint256" }, { "internalType": "bytes", "name": "callData", "type": "bytes" } ], "name": "lsp20VerifyCall", "outputs": [ { "internalType": "bytes4", "name": "", "type": "bytes4" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" }, { "internalType": "bytes", "name": "", "type": "bytes" } ], "name": "lsp20VerifyCallResult", "outputs": [ { "internalType": "bytes4", "name": "", "type": "bytes4" } ], "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": "target", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" } ], "bytecode": "0x60806040523480156200001157600080fd5b506200001c62000022565b620000e3565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000e1576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b61436a80620000f36000396000f3fe6080604052600436106100c75760003560e01c8063bf0176ff11610074578063d4b839921161004e578063d4b8399214610210578063de928f1414610238578063ffa1ad741461025857600080fd5b8063bf0176ff146101bb578063c4d66de8146101ce578063d3fc45d3146101f057600080fd5b80634c8a4e74116100a55780634c8a4e741461015a578063a20856a51461016d578063b44581d91461018d57600080fd5b806301ffc9a7146100cc57806309c5eabe146101015780631626ba7e14610121575b600080fd5b3480156100d857600080fd5b506100ec6100e73660046135db565b6102a1565b60405190151581526020015b60405180910390f35b61011461010f366004613647565b610374565b6040516100f891906136d9565b34801561012d57600080fd5b5061014161013c3660046137b1565b610388565b6040516001600160e01b031990911681526020016100f8565b6101146101683660046137f8565b610411565b61018061017b36600461396a565b61042b565b6040516100f89190613a55565b34801561019957600080fd5b506101ad6101a8366004613acc565b61062d565b6040519081526020016100f8565b6101806101c9366004613b1a565b610681565b3480156101da57600080fd5b506101ee6101e9366004613b86565b61080a565b005b3480156101fc57600080fd5b5061014161020b3660046137b1565b61092c565b34801561021c57600080fd5b506002546040516001600160a01b0390911681526020016100f8565b34801561024457600080fd5b50610141610253366004613ba3565b610968565b34801561026457600080fd5b506101146040518060400160405280600681526020017f302e31352e30000000000000000000000000000000000000000000000000000081525081565b60006001600160e01b031982167f23f34c620000000000000000000000000000000000000000000000000000000014806102eb57506001600160e01b03198216630b135d3f60e11b145b8061031f57506001600160e01b031982167f0d6ecac700000000000000000000000000000000000000000000000000000000145b8061035357506001600160e01b031982167f5ac7990800000000000000000000000000000000000000000000000000000000145b8061036e57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060610381348484610ad2565b9392505050565b60008060006103978585610c05565b909250905060008160048111156103b0576103b0613c28565b146103c857506001600160e01b0319915061036e9050565b6002546103ed9062200000906103e7906001600160a01b031685610c4a565b81161490565b6103ff576001600160e01b0319610408565b630b135d3f60e11b5b95945050505050565b6060610421868686348787610d0b565b9695505050505050565b88516060908814158061043e5750878614155b806104495750858414155b806104545750838214155b1561048b576040517fb4d50d2100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008267ffffffffffffffff8111156104a6576104a66136ec565b6040519080825280602002602001820160405280156104d957816020015b60608152602001906001900390816104c45790505b5090506000805b848110156105f357348888838181106104fb576104fb613c3e565b905060200201358361050d9190613c6a565b925082111561053d57604051630c28c92b60e21b8152600481018390523460248201526044015b60405180910390fd5b6105ce8d828151811061055257610552613c3e565b60200260200101518d8d8481811061056c5761056c613c3e565b905060200201358c8c8581811061058557610585613c3e565b905060200201358b8b8681811061059e5761059e613c3e565b905060200201358a8a878181106105b7576105b7613c3e565b90506020028101906105c99190613c7d565b610d0b565b8382815181106105e0576105e0613c3e565b60209081029190910101526001016104e0565b503481101561061e5760405163528c345b60e11b815260048101829052346024820152604401610534565b509a9950505050505050505050565b6001600160a01b03821660009081526001602090815260408083206fffffffffffffffffffffffffffffffff85168452909152812054608083901b6fffffffffffffffffffffffffffffffff191617610381565b60608382146106bc576040517f55a187db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008267ffffffffffffffff8111156106d7576106d76136ec565b60405190808252806020026020018201604052801561070a57816020015b60608152602001906001900390816106f55790505b5090506000805b848110156107d3573488888381811061072c5761072c613c3e565b905060200201358361073e9190613c6a565b925082111561076957604051630c28c92b60e21b815260048101839052346024820152604401610534565b6107ae88888381811061077e5761077e613c3e565b9050602002013587878481811061079757610797613c3e565b90506020028101906107a99190613c7d565b610ad2565b8382815181106107c0576107c0613c3e565b6020908102919091010152600101610711565b50348110156107fe5760405163528c345b60e11b815260048101829052346024820152604401610534565b5090505b949350505050565b600054610100900460ff161580801561082a5750600054600160ff909116105b806108445750303b158015610844575060005460ff166001145b6108b65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610534565b6000805460ff1916600117905580156108d9576000805461ff0019166101001790555b6108e282610f0d565b8015610928576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6002546000906001600160a01b0316330361095957336000908152600360205260409020805460ff191690555b5063d3fc45d360e01b92915050565b600080631fc8da4360e21b61097d8486613cc4565b6001600160e01b03191614806109ac5750639790242160e01b6109a08486613cc4565b6001600160e01b031916145b90506001600160a01b0387163303610a6b5760006109cb888389610fec565b90506109db888860008888611059565b6109e58486613cc4565b6001600160e01b03191686886001600160a01b03167fc0a62328f6bf5e3172bb1fcb2019f54b2c523b6a48e3513a2298fbf0150b781e60405160405180910390a48180610a2f5750805b610a405763de928f0160e01b610a62565b7fde928f00000000000000000000000000000000000000000000000000000000005b92505050610421565b6001600160a01b03871660009081526003602052604090205460ff168015610aab57610aab87610aa46001600160a01b038b1682610c4a565b608061147a565b610ab9888860008888611059565b8180610a2f575080610a405763de928f0160e01b610a62565b60606004821015610afa578282604051630d886ef360e21b8152600401610534929190613cf4565b6000631fc8da4360e21b610b0e8486613cc4565b6001600160e01b0319161480610b3d5750639790242160e01b610b318486613cc4565b6001600160e01b031916145b6002549091506001600160a01b03166000610b59828433610fec565b9050610b69823360008989611059565b610b738587613cc4565b6001600160e01b03191687336001600160a01b03167fc0a62328f6bf5e3172bb1fcb2019f54b2c523b6a48e3513a2298fbf0150b781e60405160405180910390a46000610bc28389898961148a565b905081158015610bd0575083155b15610bfa57610bfa836001600160a01b03166000908152600360205260409020805460ff19169055565b979650505050505050565b6000808251604103610c3b5760208301516040840151606085015160001a610c2f87828585611542565b94509450505050610c43565b506000905060025b9250929050565b6000806001600160a01b0384166354f6127f610c8a7f4b80742de2bf82acb36300000000000000000000000000000000000000000000606087901b611606565b6040518263ffffffff1660e01b8152600401610ca891815260200190565b600060405180830381865afa158015610cc5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ced9190810190613d23565b90508051602014610d0257506000905061036e565b61080281613d91565b60606004821015610d33578282604051630d886ef360e21b8152600401610534929190613cf4565b6002546001600160a01b03166000610d4f89898989898961166f565b6001600160a01b038116600090815260016020908152604080832060808d901c84529091529020549091506fffffffffffffffffffffffffffffffff891614610dca5780888a6040517fc9bd9eb900000000000000000000000000000000000000000000000000000000815260040161053493929190613db8565b6001600160a01b038116600090815260016020908152604080832060808c901c84529091528120805491610dfd83613de0565b9190505550610e0b876116c7565b6000631fc8da4360e21b610e1f8688613cc4565b6001600160e01b0319161480610e4e5750639790242160e01b610e428688613cc4565b6001600160e01b031916145b90506000610e5d848385610fec565b9050610e6d848460018a8a611059565b610e778688613cc4565b6001600160e01b03191688846001600160a01b03167fc0a62328f6bf5e3172bb1fcb2019f54b2c523b6a48e3513a2298fbf0150b781e60405160405180910390a46000610ec6858a8a8a61148a565b905081158015610ed4575082155b15610efe57610efe856001600160a01b03166000908152600360205260409020805460ff19169055565b9b9a5050505050505050505050565b600054610100900460ff16610f8a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610534565b6001600160a01b038116610fca576040517ffc85457900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03831660009081526003602052604090205460ff16801561102a5761102582610aa46001600160a01b03871682610c4a565b610381565b82610381576001600160a01b0384166000908152600360205260409020805460ff191660011790559392505050565b600061106e6001600160a01b03871686610c4a565b9050806110b2576040517ff292052a0000000000000000000000000000000000000000000000000000000081526001600160a01b0386166004820152602401610534565b83156110c2576110c2858261177c565b60006110ce8385613cc4565b90507f80dc96f4000000000000000000000000000000000000000000000000000000006001600160e01b0319821601611136576000806111118560048189613df9565b81019061111e91906137b1565b9150915061112f89898685856117e2565b5050611471565b7f686fdbdf000000000000000000000000000000000000000000000000000000006001600160e01b0319821601611195576000806111778560048189613df9565b8101906111849190613e23565b9150915061112f898986858561185e565b7fbb3fd702000000000000000000000000000000000000000000000000000000006001600160e01b03198216016112055760008080806111d8876004818b613df9565b8101906111e59190613ed2565b93509350935093506111fc8b8b88878787876119e1565b50505050611471565b7fce7a7bae000000000000000000000000000000000000000000000000000000006001600160e01b031982160161138a576000808080611248876004818b613df9565b8101906112559190613f90565b93509350935093508251845114158061127057508151835114155b8061127d57508051825114155b156112b4576040517f3ff55f4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83516000036112ef576040517fe9ad2b5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b84518110156113805761136e8c8c8988858151811061131357611313613c3e565b602002602001015188868151811061132d5761132d613c3e565b602002602001015188878151811061134757611347613c3e565b602002602001015188888151811061136157611361613c3e565b60200260200101516119e1565b8061137881613de0565b9150506112f2565b5050505050611471565b6001600160e01b031981167ff2fde38b0000000000000000000000000000000000000000000000000000000014806113eb57506001600160e01b031981167f79ba509700000000000000000000000000000000000000000000000000000000145b8061141f57506001600160e01b031981167f715018a600000000000000000000000000000000000000000000000000000000145b156114335761142e8683611aae565b611471565b6040517f2ba8851c0000000000000000000000000000000000000000000000000000000081526001600160e01b031982166004820152602401610534565b50505050505050565b611485838383611ae3565b505050565b6060600080866001600160a01b0316865a9087876040516114ac92919061408e565b600060405180830381858888f193505050503d80600081146114ea576040519150601f19603f3d011682016040523d82523d6000602084013e6114ef565b606091505b5091509150600061153683836040518060400160405280601e81526020017f4c5350363a206661696c656420657865637574696e67207061796c6f61640000815250611b16565b98975050505050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561157957506000905060036115fd565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156115cd573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166115f6576000600192509250506115fd565b9150600090505b94509492505050565b604080517fffffffffffffffffffff00000000000000000000000000000000000000000000841660208201526000602a82018190526bffffffffffffffffffffffff198416602c8301529182910160405160208183030381529060405290508061080290613d91565b6000806019468888888888604051602001611690979695949392919061409e565b60408051601f19818403018152919052905060006116ae3083611b2f565b90506116ba818a611b62565b9998505050505050505050565b806000036116d25750565b608081901c8142821115611711576040517ede4b8a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806fffffffffffffffffffffffffffffffff1660000361173057505050565b806fffffffffffffffffffffffffffffffff16421115611485576040517f5c53a98c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62400000808216146109285760408051631ded6b7360e11b81526001600160a01b03841660048201526024810191909152601260448201527f455845435554455f52454c41595f43414c4c00000000000000000000000000006064820152608401610534565b60006117f086858585611b86565b90506203ffff19810161183f57620200008085160361180f5750611857565b61181d85856204000061147a565b61183a85846118356001600160a01b038a1683611f3d565b611fdd565b611855565b8061184a5750611857565b61185585858361147a565b505b5050505050565b8051825114611899576040517f3bcc897900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080835167ffffffffffffffff8111156118b6576118b66136ec565b6040519080825280602002602001820160405280156118df578160200160208202803683370190505b509050600080805b6119258a898984815181106118fe576118fe613c3e565b602002602001015189858151811061191857611918613c3e565b6020026020010151611b86565b91506203ffff19820161193b576001945061197e565b811561194c5761194c89898461147a565b600184828151811061196057611960613c3e565b911515602092830291909101909101528261197a81613de0565b9350505b806001019050865181106118e75784156119d55762020000808916036119a8575050505050611857565b6119b689896204000061147a565b6119d589886119ce6001600160a01b038e1683611f3d565b878761213d565b50505050505050505050565b306001600160a01b03841603611a23576040517fa431b23600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83611a365761142e878787868686612381565b6001841480611a455750600284145b15611a5e57811515611a5887878361245d565b50611471565b60038403611a745761142e8787878686866124e2565b60048403611471576040517f80d6ebae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180821614610928576000611ac46001612511565b90508281604051631ded6b7360e11b81526004016105349291906140d4565b8082168114611485576000611af782612511565b90508381604051631ded6b7360e11b81526004016105349291906140d4565b60608315611b25575081610381565b610381838361290e565b60008282604051602001611b449291906140f6565b60405160208183030381529060405280519060200120905092915050565b6000806000611b718585610c05565b91509150611b7e81612938565b509392505050565b60007f20cf245f92495cf19acab2659b39f67a000000000000000000000000000000006fffffffffffffffffffffffffffffffff19841601611bdc57600684811614611bd486858584612aa0565b915050610802565b7fb47f8bd21d4100000000000000000000000000000000000000000000000000007fffffffffffff0000000000000000000000000000000000000000000000000000841601611d59576006848116146001600160a01b031984167fb47f8bd21d407d534c9d0000000000000000000000000000000000000000000001611caa578251602014158015611c6e5750825115155b15611c90578383604051631fa4139760e01b8152600401610534929190614154565b8015611ca0575060009050610802565b611bd48685612c8a565b7fb47f8bd21d40c6c59b39000000000000000000000000000000000000000000006001600160a01b0319851601611ce757611bd486858584612cc0565b7fb47f8bd21d407993d6ef000000000000000000000000000000000000000000006001600160a01b0319851601611d2457611bd486858584612d2b565b6040517f0f7d735b00000000000000000000000000000000000000000000000000000000815260048101859052602401610534565b7f0cfc51aec37c55a4d0b1a65c6255c4bf2fbdf6277f3cc0730c45b828b6db8b47831480611db057506001600160a01b031983167f0cfc51aec37c55a4d0b100000000000000000000000000000000000000000000145b15611e0c578151601414158015611dc75750815115155b15611de9578282604051631fa4139760e01b8152600401610534929190614154565b606080851603611dfb57506000610802565b611e058584612d55565b9050610802565b7f311874bf6b2579feef6a000000000000000000000000000000000000000000006001600160a01b0319841601611f33578151601414158015611e5157508151601514155b8015611e5d5750815115155b15611e7f578282604051631fa4139760e01b8152600401610534929190614154565b606083901b6001600160e01b031981167fde928f14000000000000000000000000000000000000000000000000000000001480611ecc57506001600160e01b0319811663d3fc45d360e01b145b15611f155730611edb8461416d565b60601c03611f15576040517f4a9fa8cf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601880861603611f29575060009050610802565b611bd48685612ddb565b5062040000610802565b60606001600160a01b0383166354f6127f611f7a7f4b80742de2bf866c29110000000000000000000000000000000000000000000085851b611606565b6040518263ffffffff1660e01b8152600401611f9891815260200190565b600060405180830381865afa158015611fb5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526103819190810190613d23565b805160000361200a5760405163ed7fa50960e01b81526001600160a01b0384166004820152602401610534565b6000806000805b84518410156121125784848151811061202c5761202c613c3e565b01602001516001600160f81b03191685612047866001613c6a565b8151811061205757612057613c3e565b016020908101516040516001600160f81b031993841692810192909252919091166021820152602201604051602081830303815290604052612098906141a9565b60f01c92508215806120aa5750602083115b156120ca578460405163ae6cbd3760e01b815260040161053491906141f5565b6120d5836020614247565b6120e090600861425a565b8585016022015160001990911b9081169250905085811682036121065750505050505050565b92820160020192612011565b60405163557ae07960e01b81526001600160a01b038816600482015260248101879052604401610534565b825160000361216a5760405163ed7fa50960e01b81526001600160a01b0386166004820152602401610534565b835160008080805b87518410156122fb5787848151811061218d5761218d613c3e565b01602001516001600160f81b031916886121a8866001613c6a565b815181106121b8576121b8613c3e565b016020908101516040516001600160f81b0319938416928101929092529190911660218201526022016040516020818303038152906040526121f9906141a9565b60f01c925082158061220b5750602083115b1561222b578760405163ae6cbd3760e01b815260040161053491906141f5565b612236836020614247565b61224190600861425a565b8885016022015160001990911b9081169250905060005b858110156122ee5787818151811061227257612272613c3e565b60200260200101511561228757600101612258565b82828b838151811061229b5761229b613c3e565b602002602001015116036122e65760018882815181106122bd576122bd613c3e565b91151560209283029190910190910152600180880197879003016122e657505050505050611857565b600101612258565b5092820160020192612172565b60005b858110156123745787818151811061231857612318613c3e565b602002602001015161236c578a8a828151811061233757612337613c3e565b602090810291909101015160405163557ae07960e01b81526001600160a01b0390921660048301526024820152604401610534565b6001016122fe565b5050505050505050505050565b805182158015916101008781161491901590610400808916149084906123a5575082155b156123b7576123b7898961020061147a565b8180156123c2575083155b80156123cc575080155b156123de576123de898961080061147a565b811580156123ea575080155b156123fc576123fc898961080061147a565b831580156124075750805b156124155750505050611855565b81801561241f5750835b80156124285750825b156124365750505050611855565b8080156124405750825b1561244e5750505050611855565b6119d58a8a60008a8a8a612e61565b61246b83836201000061147a565b6101008281161481801561247d575080155b156124dc5760408051631ded6b7360e11b81526001600160a01b03861660048201526024810191909152601360448201527f53555045525f5452414e5346455256414c5545000000000000000000000000006064820152608401610534565b50505050565b6110008481161480156124f55750611855565b612502868661200061147a565b61147187876003878787612e61565b6060600019820161255557505060408051808201909152601181527f5452414e534645524f574e455253484950000000000000000000000000000000602082015290565b600319820161259757505060408051808201909152600f81527f454449545045524d495353494f4e530000000000000000000000000000000000602082015290565b60011982016125d957505060408051808201909152600d81527f414444434f4e54524f4c4c455200000000000000000000000000000000000000602082015290565b600719820161261b57505060408051808201909152600d81527f414444455854454e53494f4e5300000000000000000000000000000000000000602082015290565b600f19820161265d57505060408051808201909152601081527f4348414e4745455854454e53494f4e5300000000000000000000000000000000602082015290565b601f19820161269f57505060408051808201909152601c81527f414444554e4956455253414c524543454956455244454c454741544500000000602082015290565b603f1982016126e157505060408051808201909152601f81527f4348414e4745554e4956455253414c524543454956455244454c454741544500602082015290565b607f19820161272357505060408051808201909152600a81527f5245454e5452414e435900000000000000000000000000000000000000000000602082015290565b6203ffff19820161276757505060408051808201909152600781527f5345544441544100000000000000000000000000000000000000000000000000602082015290565b6107ff1982016127aa57505060408051808201909152600481527f43414c4c00000000000000000000000000000000000000000000000000000000602082015290565b611fff1982016127ed57505060408051808201909152600a81527f53544154494343414c4c00000000000000000000000000000000000000000000602082015290565b617fff19820161283057505060408051808201909152600c81527f44454c454741544543414c4c0000000000000000000000000000000000000000602082015290565b61ffff19820161287357505060408051808201909152600681527f4445504c4f590000000000000000000000000000000000000000000000000000602082015290565b6101ff1982016128b657505060408051808201909152600d81527f5452414e5346455256414c554500000000000000000000000000000000000000602082015290565b621fffff1982016128fa57505060408051808201909152600481527f5349474e00000000000000000000000000000000000000000000000000000000602082015290565b505060408051602081019091526000815290565b81511561291e5781518083602001fd5b8060405162461bcd60e51b815260040161053491906136d9565b600081600481111561294c5761294c613c28565b036129545750565b600181600481111561296857612968613c28565b036129b55760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610534565b60028160048111156129c9576129c9613c28565b03612a165760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610534565b6003816004811115612a2a57612a2a613c28565b03612a9d5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401610534565b50565b60007f20cf245f92495cf19acab2659b39f679e0f76aba35a7394b241ce5a0cc734f1d8401612bc3578251601014158015612adb5750825115155b15612afd578383604051631fa4139760e01b8152600401610534929190614154565b8115612b0b57506000610802565b6000612b1684614271565b60801c9050856001600160a01b03166354f6127f866040518263ffffffff1660e01b8152600401612b4991815260200190565b600060405180830381865afa158015612b66573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612b8e9190810190613d23565b612b9790614271565b60801c6fffffffffffffffffffffffffffffffff821611612bb9576004611bd4565b6002915050610802565b825115801590612bd557508251601414155b15612bf7578383604051631fa4139760e01b8152600401610534929190614154565b8115612c0557506000610802565b6040516354f6127f60e01b8152600481018590526001600160a01b038616906354f6127f90602401600060405180830381865afa158015612c4a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612c729190810190613d23565b5115612c7f576004610408565b600295945050505050565b60006001600160a01b03808316908290612ca690861683610c4a565b90508015612cb5576004610408565b506002949350505050565b6000612ccb8361303d565b612cea578260405163187e77ab60e01b815260040161053491906136d9565b8115612cf857506000610802565b6001600160a01b0380851690600090612d1390881683610c4a565b14612d1f576004610421565b60029695505050505050565b6000612d3683613133565b612cea578260405163ae6cbd3760e01b815260040161053491906142ae565b6040516354f6127f60e01b8152600481018290526000906001600160a01b038416906354f6127f90602401600060405180830381865afa158015612d9d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612dc59190810190613d23565b5115612dd2576040610381565b50602092915050565b6040516354f6127f60e01b8152600481018290526000906001600160a01b038416906354f6127f90602401600060405180830381865afa158015612e23573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612e4b9190810190613d23565b5115612e58576010610381565b50600892915050565b6000612e766001600160a01b03881687613219565b90508051600003612ebe576040517f6cb605870000000000000000000000000000000000000000000000000000000081526001600160a01b0387166004820152602401610534565b6000612ecb868585613256565b905060005b8251811015612fdb578251612ee6826022613c6a565b1115612f07578260405163187e77ab60e01b815260040161053491906136d9565b6000612f1f84612f18846002613c6a565b6020613332565b905063ffffffff196020612f3283613d91565b63ffffffff19911b1603612f7d576040517f6fd203c50000000000000000000000000000000000000000000000000000000081526001600160a01b038a166004820152602401610534565b612f87818461345a565b8015612f985750612f988188613481565b8015612fa95750612fa981886134c4565b8015612fba5750612fba81866134fc565b15612fc85750505050611855565b50612fd4602282613c6a565b9050612ed0565b508685612fe785614300565b6040517f45147bce0000000000000000000000000000000000000000000000000000000081526001600160a01b0393841660048201529290911660248301526001600160e01b0319166044820152606401610534565b6000805b8251811015613119578251613057826001613c6a565b106130655750600092915050565b600083828151811061307957613079613c3e565b01602001516001600160f81b03191684613094846001613c6a565b815181106130a4576130a4613c3e565b016020908101516040516001600160f81b0319938416928101929092529190911660218201526022016040516020818303038152906040526130e5906141a9565b60f01c9050602081146130fc575060009392505050565b613107816002613c6a565b6131119083613c6a565b915050613041565b8251810361312a5750600192915050565b50600092915050565b6000805b825181101561311957825161314d826001613c6a565b1061315b5750600092915050565b600083828151811061316f5761316f613c3e565b01602001516001600160f81b0319168461318a846001613c6a565b8151811061319a5761319a613c3e565b016020908101516040516001600160f81b0319938416928101929092529190911660218201526022016040516020818303038152906040526131db906141a9565b60f01c90508015806131ed5750602081115b156131fc575060009392505050565b613207816002613c6a565b6132119083613c6a565b915050613137565b60606001600160a01b0383166354f6127f611f7a7f4b80742de2bf393a64c70000000000000000000000000000000000000000000085851b611606565b6000821561327e577c0100000000000000000000000000000000000000000000000000000000175b81511580159060009082613290575084155b9050818061329b5750805b1561332957856132cd577c02000000000000000000000000000000000000000000000000000000009290921791613329565b600386036132fd577c04000000000000000000000000000000000000000000000000000000009290921791613329565b60048603613329577c080000000000000000000000000000000000000000000000000000000092909217915b50509392505050565b60608161334081601f613c6a565b101561338e5760405162461bcd60e51b815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610534565b6133988284613c6a565b845110156133e85760405162461bcd60e51b815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610534565b6060821580156134075760405191506000825260208201604052613451565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015613440578051835260209283019201613428565b5050858452601f01601f1916604052505b50949350505050565b60008061346684614300565b83166001600160e01b03199081169084161491505092915050565b600080602061348f85613d91565b901b60601c90506001600160a01b038114806108025750806001600160a01b0316836001600160a01b03161491505092915050565b60008060c06134d285613d91565b901b90506001600160e01b0319808216148061080257506108026001600160a01b03841682613556565b60008060e061350a85613d91565b8451911b915060041115600061351f85614300565b90506001600160e01b03198381161480610421575081801561042157506001600160e01b0319818116908416149695505050505050565b604080516001600160e01b03198316602480830191909152825180830390910181526044909101909152602080820180516001600160e01b03166301ffc9a760e01b178152825160009392849283928392918391908a617530fa92503d915060005190508280156135c8575060208210155b8015610bfa575015159695505050505050565b6000602082840312156135ed57600080fd5b81356001600160e01b03198116811461038157600080fd5b60008083601f84011261361757600080fd5b50813567ffffffffffffffff81111561362f57600080fd5b602083019150836020828501011115610c4357600080fd5b6000806020838503121561365a57600080fd5b823567ffffffffffffffff81111561367157600080fd5b61367d85828601613605565b90969095509350505050565b60005b838110156136a457818101518382015260200161368c565b50506000910152565b600081518084526136c5816020860160208601613689565b601f01601f19169290920160200192915050565b60208152600061038160208301846136ad565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561372b5761372b6136ec565b604052919050565b600067ffffffffffffffff82111561374d5761374d6136ec565b50601f01601f191660200190565b600082601f83011261376c57600080fd5b813561377f61377a82613733565b613702565b81815284602083860101111561379457600080fd5b816020850160208301376000918101602001919091529392505050565b600080604083850312156137c457600080fd5b82359150602083013567ffffffffffffffff8111156137e257600080fd5b6137ee8582860161375b565b9150509250929050565b60008060008060006080868803121561381057600080fd5b853567ffffffffffffffff8082111561382857600080fd5b61383489838a0161375b565b96506020880135955060408801359450606088013591508082111561385857600080fd5b5061386588828901613605565b969995985093965092949392505050565b600067ffffffffffffffff821115613890576138906136ec565b5060051b60200190565b600082601f8301126138ab57600080fd5b813560206138bb61377a83613876565b82815260059290921b840181019181810190868411156138da57600080fd5b8286015b8481101561391a57803567ffffffffffffffff8111156138fe5760008081fd5b61390c8986838b010161375b565b8452509183019183016138de565b509695505050505050565b60008083601f84011261393757600080fd5b50813567ffffffffffffffff81111561394f57600080fd5b6020830191508360208260051b8501011115610c4357600080fd5b600080600080600080600080600060a08a8c03121561398857600080fd5b893567ffffffffffffffff808211156139a057600080fd5b6139ac8d838e0161389a565b9a5060208c01359150808211156139c257600080fd5b6139ce8d838e01613925565b909a50985060408c01359150808211156139e757600080fd5b6139f38d838e01613925565b909850965060608c0135915080821115613a0c57600080fd5b613a188d838e01613925565b909650945060808c0135915080821115613a3157600080fd5b50613a3e8c828d01613925565b915080935050809150509295985092959850929598565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015613aaa57603f19888603018452613a988583516136ad565b94509285019290850190600101613a7c565b5092979650505050505050565b6001600160a01b0381168114612a9d57600080fd5b60008060408385031215613adf57600080fd5b8235613aea81613ab7565b915060208301356fffffffffffffffffffffffffffffffff81168114613b0f57600080fd5b809150509250929050565b60008060008060408587031215613b3057600080fd5b843567ffffffffffffffff80821115613b4857600080fd5b613b5488838901613925565b90965094506020870135915080821115613b6d57600080fd5b50613b7a87828801613925565b95989497509550505050565b600060208284031215613b9857600080fd5b813561038181613ab7565b60008060008060008060a08789031215613bbc57600080fd5b8635613bc781613ab7565b95506020870135613bd781613ab7565b94506040870135613be781613ab7565b935060608701359250608087013567ffffffffffffffff811115613c0a57600080fd5b613c1689828a01613605565b979a9699509497509295939492505050565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111561036e5761036e613c54565b6000808335601e19843603018112613c9457600080fd5b83018035915067ffffffffffffffff821115613caf57600080fd5b602001915036819003821315610c4357600080fd5b6001600160e01b03198135818116916004851015613cec5780818660040360031b1b83161692505b505092915050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b600060208284031215613d3557600080fd5b815167ffffffffffffffff811115613d4c57600080fd5b8201601f81018413613d5d57600080fd5b8051613d6b61377a82613733565b818152856020838501011115613d8057600080fd5b610408826020830160208601613689565b80516020808301519190811015613db2576000198160200360031b1b821691505b50919050565b6001600160a01b038416815282602082015260606040820152600061040860608301846136ad565b600060018201613df257613df2613c54565b5060010190565b60008085851115613e0957600080fd5b83861115613e1657600080fd5b5050820193919092039150565b60008060408385031215613e3657600080fd5b823567ffffffffffffffff80821115613e4e57600080fd5b818501915085601f830112613e6257600080fd5b81356020613e7261377a83613876565b82815260059290921b84018101918181019089841115613e9157600080fd5b948201945b83861015613eaf57853582529482019490820190613e96565b96505086013592505080821115613ec557600080fd5b506137ee8582860161389a565b60008060008060808587031215613ee857600080fd5b843593506020850135613efa81613ab7565b925060408501359150606085013567ffffffffffffffff811115613f1d57600080fd5b613f298782880161375b565b91505092959194509250565b600082601f830112613f4657600080fd5b81356020613f5661377a83613876565b82815260059290921b84018101918181019086841115613f7557600080fd5b8286015b8481101561391a5780358352918301918301613f79565b60008060008060808587031215613fa657600080fd5b843567ffffffffffffffff80821115613fbe57600080fd5b613fca88838901613f35565b9550602091508187013581811115613fe157600080fd5b8701601f81018913613ff257600080fd5b803561400061377a82613876565b81815260059190911b8201840190848101908b83111561401f57600080fd5b928501925b8284101561404657833561403781613ab7565b82529285019290850190614024565b9750505050604087013591508082111561405f57600080fd5b61406b88838901613f35565b9350606087013591508082111561408157600080fd5b50613f298782880161389a565b8183823760009101908152919050565b878152866020820152856040820152846060820152836080820152818360a08301376000910160a0019081529695505050505050565b6001600160a01b038316815260406020820152600061080260408301846136ad565b7f190000000000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff198360601b16600282015260008251614146816016850160208701613689565b919091016016019392505050565b82815260406020820152600061080260408301846136ad565b805160208201516bffffffffffffffffffffffff1980821692919060148310156141a15780818460140360031b1b83161693505b505050919050565b6000815160208301517fffff000000000000000000000000000000000000000000000000000000000000808216935060028310156141a15760029290920360031b82901b161692915050565b60408152600061420860408301846136ad565b8281036020840152601c81527f636f756c646e2774204445434f44452066726f6d2073746f726167650000000060208201526040810191505092915050565b8181038181111561036e5761036e613c54565b808202811582820484141761036e5761036e613c54565b6000815160208301516fffffffffffffffffffffffffffffffff19808216935060108310156141a15760109290920360031b82901b161692915050565b6040815260006142c160408301846136ad565b8281036020840152602081527f636f756c646e27742056414c49444154452074686520646174612076616c756560208201526040810191505092915050565b6000815160208301516001600160e01b0319808216935060048310156141a15760049290920360031b82901b16169291505056fea2646970667358221220411beccbc2281ca64a59c9f30874956ae47e7eb010ea412aaa1c692a356ebb8564736f6c63430008110033", "deployedBytecode": "0x6080604052600436106100c75760003560e01c8063bf0176ff11610074578063d4b839921161004e578063d4b8399214610210578063de928f1414610238578063ffa1ad741461025857600080fd5b8063bf0176ff146101bb578063c4d66de8146101ce578063d3fc45d3146101f057600080fd5b80634c8a4e74116100a55780634c8a4e741461015a578063a20856a51461016d578063b44581d91461018d57600080fd5b806301ffc9a7146100cc57806309c5eabe146101015780631626ba7e14610121575b600080fd5b3480156100d857600080fd5b506100ec6100e73660046135db565b6102a1565b60405190151581526020015b60405180910390f35b61011461010f366004613647565b610374565b6040516100f891906136d9565b34801561012d57600080fd5b5061014161013c3660046137b1565b610388565b6040516001600160e01b031990911681526020016100f8565b6101146101683660046137f8565b610411565b61018061017b36600461396a565b61042b565b6040516100f89190613a55565b34801561019957600080fd5b506101ad6101a8366004613acc565b61062d565b6040519081526020016100f8565b6101806101c9366004613b1a565b610681565b3480156101da57600080fd5b506101ee6101e9366004613b86565b61080a565b005b3480156101fc57600080fd5b5061014161020b3660046137b1565b61092c565b34801561021c57600080fd5b506002546040516001600160a01b0390911681526020016100f8565b34801561024457600080fd5b50610141610253366004613ba3565b610968565b34801561026457600080fd5b506101146040518060400160405280600681526020017f302e31352e30000000000000000000000000000000000000000000000000000081525081565b60006001600160e01b031982167f23f34c620000000000000000000000000000000000000000000000000000000014806102eb57506001600160e01b03198216630b135d3f60e11b145b8061031f57506001600160e01b031982167f0d6ecac700000000000000000000000000000000000000000000000000000000145b8061035357506001600160e01b031982167f5ac7990800000000000000000000000000000000000000000000000000000000145b8061036e57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060610381348484610ad2565b9392505050565b60008060006103978585610c05565b909250905060008160048111156103b0576103b0613c28565b146103c857506001600160e01b0319915061036e9050565b6002546103ed9062200000906103e7906001600160a01b031685610c4a565b81161490565b6103ff576001600160e01b0319610408565b630b135d3f60e11b5b95945050505050565b6060610421868686348787610d0b565b9695505050505050565b88516060908814158061043e5750878614155b806104495750858414155b8061045