@venusprotocol/governance-contracts
Version:
1,478 lines • 111 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "RiskStewardReceiver",
"sourceName": "contracts/RiskSteward/RiskStewardReceiver.sol",
"abi": [
{
"inputs": [
{
"internalType": "address",
"name": "riskOracle_",
"type": "address"
},
{
"internalType": "address",
"name": "endpoint_",
"type": "address"
},
{
"internalType": "uint32",
"name": "layerZeroLzEid_",
"type": "uint32"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"inputs": [],
"name": "ConfigNotActive",
"type": "error"
},
{
"inputs": [],
"name": "ConfigStatusUnchanged",
"type": "error"
},
{
"inputs": [],
"name": "ExecutorStatusUnchanged",
"type": "error"
},
{
"inputs": [],
"name": "InvalidDebounce",
"type": "error"
},
{
"inputs": [],
"name": "InvalidDelegate",
"type": "error"
},
{
"inputs": [],
"name": "InvalidEndpointCall",
"type": "error"
},
{
"inputs": [],
"name": "InvalidLayerZeroEid",
"type": "error"
},
{
"inputs": [],
"name": "InvalidLzSendCaller",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint16",
"name": "optionType",
"type": "uint16"
}
],
"name": "InvalidOptionType",
"type": "error"
},
{
"inputs": [],
"name": "InvalidRegisteredUpdate",
"type": "error"
},
{
"inputs": [],
"name": "InvalidTimelock",
"type": "error"
},
{
"inputs": [],
"name": "InvalidUpdateToResend",
"type": "error"
},
{
"inputs": [],
"name": "InvalidUpdateType",
"type": "error"
},
{
"inputs": [],
"name": "LzTokenUnavailable",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint32",
"name": "eid",
"type": "uint32"
}
],
"name": "NoPeer",
"type": "error"
},
{
"inputs": [],
"name": "NotAnExecutor",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "msgValue",
"type": "uint256"
}
],
"name": "NotEnoughNative",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint32",
"name": "eid",
"type": "uint32"
},
{
"internalType": "bytes32",
"name": "sender",
"type": "bytes32"
}
],
"name": "OnlyPeer",
"type": "error"
},
{
"inputs": [],
"name": "PauseStatusUnchanged",
"type": "error"
},
{
"inputs": [],
"name": "PausedError",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "RegisteredUpdateTypeExist",
"type": "error"
},
{
"inputs": [],
"name": "RenounceOwnershipNotAllowed",
"type": "error"
},
{
"inputs": [],
"name": "TransferFailed",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"internalType": "address",
"name": "calledContract",
"type": "address"
},
{
"internalType": "string",
"name": "methodSignature",
"type": "string"
}
],
"name": "Unauthorized",
"type": "error"
},
{
"inputs": [],
"name": "UnsupportedUpdateType",
"type": "error"
},
{
"inputs": [],
"name": "UpdateAlreadyResolved",
"type": "error"
},
{
"inputs": [],
"name": "UpdateIsExpired",
"type": "error"
},
{
"inputs": [],
"name": "UpdateNotFound",
"type": "error"
},
{
"inputs": [],
"name": "UpdateNotUnlocked",
"type": "error"
},
{
"inputs": [],
"name": "UpdateTooFrequent",
"type": "error"
},
{
"inputs": [],
"name": "UpdateWillExpireBeforeUnlock",
"type": "error"
},
{
"inputs": [],
"name": "ZeroAddressNotAllowed",
"type": "error"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "updateTypeHash",
"type": "bytes32"
},
{
"indexed": false,
"internalType": "string",
"name": "updateType",
"type": "string"
},
{
"indexed": false,
"internalType": "bool",
"name": "previousActive",
"type": "bool"
},
{
"indexed": false,
"internalType": "bool",
"name": "active",
"type": "bool"
}
],
"name": "ConfigActiveUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "executor",
"type": "address"
},
{
"indexed": false,
"internalType": "bool",
"name": "previousApproved",
"type": "bool"
},
{
"indexed": false,
"internalType": "bool",
"name": "approved",
"type": "bool"
}
],
"name": "ExecutorStatusUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint8",
"name": "version",
"type": "uint8"
}
],
"name": "Initialized",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "oldAccessControlManager",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "newAccessControlManager",
"type": "address"
}
],
"name": "NewAccessControlManager",
"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": [
{
"indexed": false,
"internalType": "bool",
"name": "previousPaused",
"type": "bool"
},
{
"indexed": false,
"internalType": "bool",
"name": "paused",
"type": "bool"
}
],
"name": "PauseStatusUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint32",
"name": "eid",
"type": "uint32"
},
{
"indexed": false,
"internalType": "bytes32",
"name": "peer",
"type": "bytes32"
}
],
"name": "PeerSet",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "updateTypeHash",
"type": "bytes32"
},
{
"indexed": false,
"internalType": "string",
"name": "updateType",
"type": "string"
},
{
"indexed": true,
"internalType": "address",
"name": "previousRiskSteward",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "riskSteward",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "previousDebounce",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "debounce",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "previousTimelock",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "timelock",
"type": "uint256"
},
{
"indexed": false,
"internalType": "bool",
"name": "previousActive",
"type": "bool"
},
{
"indexed": false,
"internalType": "bool",
"name": "active",
"type": "bool"
}
],
"name": "RiskParameterConfigUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "receiver",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "SweepNative",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "updateId",
"type": "uint256"
}
],
"name": "UpdateExecuted",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "updateId",
"type": "uint256"
}
],
"name": "UpdateExpired",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "updateId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "unlockTime",
"type": "uint256"
},
{
"indexed": false,
"internalType": "string",
"name": "updateType",
"type": "string"
},
{
"indexed": true,
"internalType": "address",
"name": "market",
"type": "address"
}
],
"name": "UpdateRegistered",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "updateId",
"type": "uint256"
}
],
"name": "UpdateRejected",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "updateId",
"type": "uint256"
},
{
"indexed": true,
"internalType": "uint32",
"name": "destLzEid",
"type": "uint32"
},
{
"indexed": true,
"internalType": "string",
"name": "updateType",
"type": "string"
},
{
"indexed": true,
"internalType": "address",
"name": "market",
"type": "address"
}
],
"name": "UpdateResentToDestination",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "updateId",
"type": "uint256"
},
{
"indexed": true,
"internalType": "uint32",
"name": "destLzEid",
"type": "uint32"
},
{
"indexed": true,
"internalType": "string",
"name": "updateType",
"type": "string"
},
{
"indexed": true,
"internalType": "address",
"name": "market",
"type": "address"
}
],
"name": "UpdateSentToDestination",
"type": "event"
},
{
"inputs": [],
"name": "LAYER_ZERO_EID",
"outputs": [
{
"internalType": "uint32",
"name": "",
"type": "uint32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "RISK_ORACLE",
"outputs": [
{
"internalType": "contract IRiskOracle",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "UPDATE_EXPIRATION_TIME",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "acceptOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "accessControlManager",
"outputs": [
{
"internalType": "contract IAccessControlManagerV8",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "endpoint",
"outputs": [
{
"internalType": "contract ILayerZeroEndpointV2",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "updateId",
"type": "uint256"
}
],
"name": "executeRegisteredUpdate",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "updateType",
"type": "string"
},
{
"internalType": "address",
"name": "comptroller",
"type": "address"
}
],
"name": "getExecutableUpdates",
"outputs": [
{
"internalType": "uint256[]",
"name": "executableUpdates",
"type": "uint256[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "updateType",
"type": "string"
},
{
"internalType": "address",
"name": "market",
"type": "address"
}
],
"name": "getLastProcessedUpdate",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "updateType",
"type": "string"
},
{
"internalType": "address",
"name": "market",
"type": "address"
}
],
"name": "getLastRegisteredUpdate",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "updateType",
"type": "string"
}
],
"name": "getRiskParameterConfig",
"outputs": [
{
"components": [
{
"internalType": "bool",
"name": "active",
"type": "bool"
},
{
"internalType": "uint256",
"name": "debounce",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "timelock",
"type": "uint256"
},
{
"internalType": "address",
"name": "riskSteward",
"type": "address"
}
],
"internalType": "struct IRiskStewardReceiver.RiskParamConfig",
"name": "",
"type": "tuple"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "acm_",
"type": "address"
},
{
"internalType": "address",
"name": "delegate_",
"type": "address"
}
],
"name": "initialize",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "updateId",
"type": "uint256"
}
],
"name": "isUpdateExecutable",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
},
{
"internalType": "address",
"name": "market",
"type": "address"
}
],
"name": "lastProcessedUpdate",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
},
{
"internalType": "address",
"name": "market",
"type": "address"
}
],
"name": "lastRegisteredUpdate",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint32",
"name": "dstEid",
"type": "uint32"
},
{
"components": [
{
"internalType": "string",
"name": "referenceId",
"type": "string"
},
{
"internalType": "uint256",
"name": "updateId",
"type": "uint256"
},
{
"internalType": "address",
"name": "market",
"type": "address"
},
{
"internalType": "string",
"name": "updateType",
"type": "string"
},
{
"internalType": "bytes32",
"name": "updateTypeKey",
"type": "bytes32"
},
{
"internalType": "bytes",
"name": "newValue",
"type": "bytes"
},
{
"internalType": "bytes",
"name": "previousValue",
"type": "bytes"
},
{
"internalType": "uint256",
"name": "timestamp",
"type": "uint256"
},
{
"internalType": "address",
"name": "publisher",
"type": "address"
},
{
"internalType": "uint96",
"name": "poolId",
"type": "uint96"
},
{
"internalType": "uint32",
"name": "destLzEid",
"type": "uint32"
},
{
"internalType": "bytes",
"name": "additionalData",
"type": "bytes"
}
],
"internalType": "struct RiskParameterUpdate",
"name": "update",
"type": "tuple"
},
{
"internalType": "bytes",
"name": "options",
"type": "bytes"
},
{
"components": [
{
"internalType": "uint256",
"name": "nativeFee",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "lzTokenFee",
"type": "uint256"
}
],
"internalType": "struct MessagingFee",
"name": "fee",
"type": "tuple"
},
{
"internalType": "address",
"name": "refundAddress",
"type": "address"
}
],
"name": "lzSend",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [],
"name": "oAppVersion",
"outputs": [
{
"internalType": "uint64",
"name": "senderVersion",
"type": "uint64"
},
{
"internalType": "uint64",
"name": "receiverVersion",
"type": "uint64"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "paused",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint32",
"name": "_eid",
"type": "uint32"
}
],
"name": "peers",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "pendingOwner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "updateId",
"type": "uint256"
}
],
"name": "processUpdate",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "string",
"name": "referenceId",
"type": "string"
},
{
"internalType": "uint256",
"name": "updateId",
"type": "uint256"
},
{
"internalType": "address",
"name": "market",
"type": "address"
},
{
"internalType": "string",
"name": "updateType",
"type": "string"
},
{
"internalType": "bytes32",
"name": "updateTypeKey",
"type": "bytes32"
},
{
"internalType": "bytes",
"name": "newValue",
"type": "bytes"
},
{
"internalType": "bytes",
"name": "previousValue",
"type": "bytes"
},
{
"internalType": "uint256",
"name": "timestamp",
"type": "uint256"
},
{
"internalType": "address",
"name": "publisher",
"type": "address"
},
{
"internalType": "uint96",
"name": "poolId",
"type": "uint96"
},
{
"internalType": "uint32",
"name": "destLzEid",
"type": "uint32"
},
{
"internalType": "bytes",
"name": "additionalData",
"type": "bytes"
}
],
"internalType": "struct RiskParameterUpdate",
"name": "update",
"type": "tuple"
},
{
"internalType": "bytes",
"name": "options",
"type": "bytes"
},
{
"internalType": "bool",
"name": "payInLzToken",
"type": "bool"
}
],
"name": "quote",
"outputs": [
{
"components": [
{
"internalType": "uint256",
"name": "nativeFee",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "lzTokenFee",
"type": "uint256"
}
],
"internalType": "struct MessagingFee",
"name": "fee",
"type": "tuple"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "updateId",
"type": "uint256"
}
],
"name": "rejectUpdate",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "renounceOwnership",
"outputs": [],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "updateId",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "options",
"type": "bytes"
}
],
"name": "resendRemoteUpdate",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"name": "riskParameterConfigs",
"outputs": [
{
"internalType": "bool",
"name": "active",
"type": "bool"
},
{
"internalType": "uint256",
"name": "debounce",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "timelock",
"type": "uint256"
},
{
"internalType": "address",
"name": "riskSteward",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "accessControlManager_",
"type": "address"
}
],
"name": "setAccessControlManager",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "updateType",
"type": "string"
},
{
"internalType": "bool",
"name": "active",
"type": "bool"
}
],
"name": "setConfigActive",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_delegate",
"type": "address"
}
],
"name": "setDelegate",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bool",
"name": "paused_",
"type": "bool"
}
],
"name": "setPaused",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint32",
"name": "_eid",
"type": "uint32"
},
{
"internalType": "bytes32",
"name": "_peer",
"type": "bytes32"
}
],
"name": "setPeer",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "updateType",
"type": "string"
},
{
"internalType": "address",
"name": "riskSteward",
"type": "address"
},
{
"internalType": "uint256",
"name": "debounce",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "timelock",
"type": "uint256"
}
],
"name": "setRiskParameterConfig",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "executor",
"type": "address"
},
{
"internalType": "bool",
"name": "approved",
"type": "bool"
}
],
"name": "setWhitelistedExecutor",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "sweepNative",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "updateId",
"type": "uint256"
}
],
"name": "updates",
"outputs": [
{
"internalType": "uint256",
"name": "updateId",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "unlockTime",
"type": "uint256"
},
{
"internalType": "enum IRiskStewardReceiver.UpdateStatus",
"name": "status",
"type": "uint8"
},
{
"internalType": "address",
"name": "executor",
"type": "address"
},
{
"internalType": "uint256",
"name": "executedAt",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "whitelistedExecutors",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"stateMutability": "payable",
"type": "receive"
}
],
"bytecode": "0x60e060405234801561001057600080fd5b50604051614e0b380380614e0b83398101604081905261002f916101a0565b6001600160a01b03821660805261004461009a565b61004d8361015a565b6100568261015a565b8063ffffffff1660000361007d576040516349961c7360e11b815260040160405180910390fd5b6001600160a01b0390921660c0525063ffffffff1660a0526101f0565b600054610100900460ff16156101065760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015610158576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b038116610181576040516342bcdf7f60e11b815260040160405180910390fd5b50565b80516001600160a01b038116811461019b57600080fd5b919050565b6000806000606084860312156101b557600080fd5b6101be84610184565b92506101cc60208501610184565b9150604084015163ffffffff811681146101e557600080fd5b809150509250925092565b60805160a05160c051614b986102736000396000818161060c01528181611033015281816113f301528181611d81015281816122b001528181612576015261272601526000818161048301526110d801526000818161053e01528181611a2f01528181611e6b0152818161217a01528181612ff601526130c80152614b986000f3fe6080604052600436106102895760003560e01c8063715018a611610153578063bb0b6a53116100cb578063f2fde38b1161007f578063f75875ad11610064578063f75875ad14610890578063f8ce6ac2146108b0578063fe2b3502146108d057600080fd5b8063f2fde38b14610843578063f63106e41461086357600080fd5b8063c3e10deb116100b0578063c3e10deb146107e5578063ca5eb5e114610805578063e30c39781461082557600080fd5b8063bb0b6a5314610773578063c2a23c84146107c557600080fd5b80638da5cb5b11610122578063af9e0fd311610107578063af9e0fd314610674578063b4a0bdf3146106ee578063b4c2f7271461070c57600080fd5b80638da5cb5b14610641578063ab803a761461065f57600080fd5b8063715018a6146105d057806379ba5097146105e55780637dd8f522146105fa57806385a7602f1461062e57600080fd5b80633aed7f3111610201578063595bd377116101b55780635e280f111161019a5780635e280f111461052c57806362656e631461057857806365bd691c1461059857600080fd5b8063595bd377146104f25780635c975abb1461051257600080fd5b8063485cc955116101e6578063485cc955146104515780634c21344914610471578063513602e8146104ba57600080fd5b80633aed7f3114610411578063438653fe1461043157600080fd5b80631d1c362011610258578063282071411161023d578063282071411461036357806333bde2ca146103c15780633400288b146103f157600080fd5b80631d1c362014610311578063233dd0da1461033e57600080fd5b806305687c19146102955780630e32cb86146102aa57806316c38b3c146102ca57806317442b70146102ea57600080fd5b3661029057005b600080fd5b6102a86102a3366004613cf6565b610900565b005b3480156102b657600080fd5b506102a86102c5366004613dcd565b610973565b3480156102d657600080fd5b506102a86102e5366004613df8565b610987565b3480156102f657600080fd5b50604080516001815260006020820152015b60405180910390f35b34801561031d57600080fd5b5061033161032c366004613e15565b610a5f565b6040516103089190613e8d565b34801561034a57600080fd5b506103556202a30081565b604051908152602001610308565b34801561036f57600080fd5b5061038361037e366004613eed565b610ab1565b604051610308919081511515815260208083015190820152604080830151908201526060918201516001600160a01b03169181019190915260800190565b3480156103cd57600080fd5b506103e16103dc366004613f2f565b610b44565b6040519015158152602001610308565b3480156103fd57600080fd5b506102a861040c366004613f48565b610b4f565b34801561041d57600080fd5b506102a861042c366004613f74565b610bce565b34801561043d57600080fd5b506102a861044c366004613fad565b610cb7565b34801561045d57600080fd5b506102a861046c366004613ff9565b610e16565b34801561047d57600080fd5b506104a57f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff9091168152602001610308565b3480156104c657600080fd5b506103556104d5366004614027565b60cc60209081526000928352604080842090915290825290205481565b3480156104fe57600080fd5b5061035561050d36600461404c565b610f7d565b34801561051e57600080fd5b5060c9546103e19060ff1681565b34801561053857600080fd5b506105607f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610308565b34801561058457600080fd5b506102a8610593366004613f2f565b610fc4565b3480156105a457600080fd5b506103556105b3366004614027565b60cd60209081526000928352604080842090915290825290205481565b3480156105dc57600080fd5b506102a861125b565b3480156105f157600080fd5b506102a861128d565b34801561060657600080fd5b506105607f000000000000000000000000000000000000000000000000000000000000000081565b6102a861063c366004614098565b611318565b34801561064d57600080fd5b506033546001600160a01b0316610560565b34801561066b57600080fd5b506102a8611572565b34801561068057600080fd5b506106c361068f366004613f2f565b60ca60205260009081526040902080546001820154600283015460039093015460ff9092169290916001600160a01b031684565b6040805194151585526020850193909352918301526001600160a01b03166060820152608001610308565b3480156106fa57600080fd5b506097546001600160a01b0316610560565b34801561071857600080fd5b50610762610727366004613f2f565b60cb6020526000908152604090208054600182015460028301546003909301549192909160ff82169161010090046001600160a01b03169085565b604051610308959493929190614113565b34801561077f57600080fd5b5061035561078e36600461417d565b63ffffffff1660009081527f72ab1bc1039b79dc4724ffca13de82c96834302d3c7e0d4252232d4b2dd8f900602052604090205490565b3480156107d157600080fd5b506102a86107e036600461419a565b611671565b3480156107f157600080fd5b506102a8610800366004613f2f565b611908565b34801561081157600080fd5b506102a8610820366004613dcd565b6119ef565b34801561083157600080fd5b506065546001600160a01b0316610560565b34801561084f57600080fd5b506102a861085e366004613dcd565b611a8e565b34801561086f57600080fd5b5061088361087e36600461404c565b611a9f565b6040516103089190614201565b34801561089c57600080fd5b506103556108ab36600461404c565b611cb1565b3480156108bc57600080fd5b506102a86108cb366004613f2f565b611cf8565b3480156108dc57600080fd5b506103e16108eb366004613dcd565b60ce6020526000908152604090205460ff1681565b333014610939576040517f22d1fc8000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008460405160200161094c9190614394565b604051602081830303815290604052905061096a8682868686611e38565b50505050505050565b61097b611f43565b61098481611f9f565b50565b6109c56040518060400160405280600f81526020017f73657450617573656428626f6f6c290000000000000000000000000000000000815250612094565b60c95481151560ff909116151503610a09576040517f3f855e3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60c9546040805160ff9092161515825282151560208301527f91691e0294d292cac1a26c64dd4130c61d6690edeac415bc1fb307d64d3732a1910160405180910390a160c9805460ff1916911515919091179055565b6040805180820190915260008082526020820152600084604051602001610a869190614394565b6040516020818303038152906040529050610aa8856101400151828686612164565b95945050505050565b60408051608081018252600080825260208201819052918101829052606081019190915260008383604051610ae79291906143a7565b60408051918290038220600090815260ca602090815290829020608084018352805460ff1615158452600181015491840191909152600281015491830191909152600301546001600160a01b031660608201529150505b92915050565b6000610b3e82612247565b610b57611f43565b63ffffffff821660008181527f72ab1bc1039b79dc4724ffca13de82c96834302d3c7e0d4252232d4b2dd8f900602081815260409283902085905582519384528301849052917f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b91015b60405180910390a1505050565b610bef604051806060016040528060248152602001614b0960249139612094565b610bf882612386565b6001600160a01b038216600090815260ce602052604090205460ff1681151581151503610c51576040517f8eee990d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038316600081815260ce6020908152604091829020805460ff191686151590811790915582518515158152918201527f10c0e7519c24c8e42dbd4d2405e9976e893c51df86614145b2758289f197ec3b910160405180910390a2505050565b610cf56040518060400160405280601c81526020017f736574436f6e66696741637469766528737472696e672c626f6f6c2900000000815250612094565b60008383604051610d079291906143a7565b6040805191829003909120600081815260ca60205291909120600301549091506001600160a01b0316610d66576040517f80919d7b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081815260ca602052604090205460ff1682151581151503610db5576040517f01e852dc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082815260ca602052604090819020805460ff19168515151790555182907fcba816b2fc5cd49700523a79b6e6c7dda19292fbb932cca77f7bccb1e500479290610e079088908890869089906143e2565b60405180910390a25050505050565b600054610100900460ff1615808015610e365750600054600160ff909116105b80610e505750303b158015610e50575060005460ff166001145b610ec75760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b6000805460ff191660011790558015610f0757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610f10836123c6565b610f1982612454565b8015610f7857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001610bc1565b505050565b6000808484604051610f909291906143a7565b6040805191829003909120600090815260cd60209081528282206001600160a01b0387168352905220549150509392505050565b60c95460ff1615611001576040517feced32bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f37759b9a000000000000000000000000000000000000000000000000000000008152600481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906337759b9a90602401600060405180830381865afa158015611082573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110aa9190810190614474565b6080810151600090815260ca602052604081206101408301519293509163ffffffff161580159061110c57507f000000000000000000000000000000000000000000000000000000000000000063ffffffff1683610140015163ffffffff1614155b90508061111c5761111c836124da565b611127838383612684565b60038201546001600160a01b03166000826111c7576040517f42b7cfbd0000000000000000000000000000000000000000000000000000000081526001600160a01b038316906342b7cfbd90611181908890600401614394565b602060405180830381865afa15801561119e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c291906145db565b6111ca565b60005b60408051608081018252865460ff16151581526001870154602082015260028701549181019190915260038601546001600160a01b0316606082015290915061121d90869083806112185750855b612933565b82156112435761123e85604051806020016040528060008152506000612a86565b611253565b8015611253576112538583612c98565b505050505050565b6040517f96c553eb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60655433906001600160a01b0316811461130f5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060448201527f6e6577206f776e657200000000000000000000000000000000000000000000006064820152608401610ebe565b61098481612db6565b33600090815260ce602052604090205460ff16611361576040517f341f61ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600083815260cb602052604090206005600282015460ff16600581111561138a5761138a6140e4565b146113c1576040517f9aafae6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f37759b9a000000000000000000000000000000000000000000000000000000008152600481018590526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906337759b9a90602401600060405180830381865afa158015611442573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261146a9190810190614474565b9050426202a3008260e001516114809190614627565b10156114b8576040517fc2a16f1400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114fa8185858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250349250612a86915050565b80604001516001600160a01b0316816060015160405161151a919061463a565b604051809103902082610140015163ffffffff167f315a04917a98179e57c69a0b2808641e45e218e5402d9d3c7da753ea76c70322846020015160405161156391815260200190565b60405180910390a45050505050565b61157a611f43565b4780156109845760006115956033546001600160a01b031690565b6001600160a01b03168260405160006040518083038185875af1925050503d80600081146115df576040519150601f19603f3d011682016040523d82523d6000602084013e6115e4565b606091505b505090508061161f576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6033546001600160a01b03166001600160a01b03167f0a1dd7c5bdc40ecbdefc1bfda22f1dfb98c8fc3e3940aab73ad7fba37720d0a08360405161166591815260200190565b60405180910390a25050565b611692604051806060016040528060368152602001614b2d60369139612094565b61169b83612386565b8315806116a85750604084115b156116de576040517e64280000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003611718576040517ff6ea4e0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6202a3008110611754576040517ff8d10e8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600085856040516117669291906143a7565b60405180910390209050600060ca60008381526020019081526020016000206040518060800160405290816000820160009054906101000a900460ff1615151515815260200160018201548152602001600282015481526020016003820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152505090506040518060800160405280600115158152602001858152602001848152602001866001600160a01b031681525060ca600084815260200190815260200160002060008201518160000160006101000a81548160ff021916908315150217905550602082015181600101556040820151816002015560608201518160030160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550905050846001600160a01b031681606001516001600160a01b0316837fed1dcf396500587db779d729bcafd22d1cc4827708623e27189eb6687a6962448a8a86602001518a88604001518b8a6000015160016040516118f7989796959493929190614656565b60405180910390a450505050505050565b33600090815260ce602052604090205460ff16611951576040517f341f61ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081815260cb602052604090206001600282015460ff16600581111561197a5761197a6140e4565b146119b1576040517fdefe2c2500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028101805460ff1916600317905560405182907f0a4273908b9362e571cacd5610879e3dfd7ddc7c9b3ce1d7ea7ea8b41869116490600090a25050565b6119f7611f43565b6040517fca5eb5e10000000000000000000000000000000000000000000000000000000081526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e190602401600060405180830381600087803b158015611a7357600080fd5b505af1158015611a87573d6000803e3d6000fd5b5050505050565b611a96611f43565b61098481612dbf565b606060008484604051611ab39291906143a7565b604051809103902090506000836001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa158015611afd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611b2591908101906146a0565b805190915060008167ffffffffffffffff811115611b4557611b45613a3a565b604051908082528060200260200182016040528015611b6e578160200160208202803683370190505b5090506000805b83811015611c1457600086815260cd6020526040812086518290889085908110611ba157611ba1614752565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020549050611bd581612247565b611bdf5750611c0c565b80848481518110611bf257611bf2614752565b602090810291909101015282611c0781614781565b935050505b600101611b75565b508067ffffffffffffffff811115611c2e57611c2e613a3a565b604051908082528060200260200182016040528015611c57578160200160208202803683370190505b50955060005b81811015611ca457828181518110611c7757611c77614752565b6020026020010151878281518110611c9157611c91614752565b6020908102919091010152600101611c5d565b5050505050509392505050565b6000808484604051611cc49291906143a7565b6040805191829003909120600090815260cc60209081528282206001600160a01b0387168352905220549150509392505050565b33600090815260ce602052604090205460ff16611d41576040517f341f61ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081815260cb602052604080822090517f37759b9a000000000000000000000000000000000000000000000000000000008152600481018490529091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906337759b9a90602401600060405180830381865afa158015611dd0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611df89190810190614474565b6080810151600090815260ca60205260409020909150611e19838383612e48565b6003810154611e329083906001600160a01b0316612c98565b50505050565b611e406139d0565b6000611e4f8460000151612fb1565b602085015190915015611e6957611e698460200151612ff2565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632637a450826040518060a001604052808b63ffffffff168152602001611eb98c6130ed565b81526020018a815260200189815260200160008960200151111515815250866040518463ffffffff1660e01b8152600401611ef59291906147b9565b60806040518083038185885af1158015611f13573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611f389190614880565b979650505050505050565b6033546001600160a01b03163314611f9d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ebe565b565b6001600160a01b03811661201b5760405162461bcd60e51b815260206004820152602560248201527f696e76616c696420616365737320636f6e74726f6c206d616e6167657220616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610ebe565b609780546001600160a01b038381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f66fd58e82f7b31a2a5c30e0888f3093efe4e111b00cd2b0c31fe014601293aa09101604