{
  "address": "0xcf3e6972a8e9c53D33b642a2592938944956f138",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "endpoint_",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "guardian_",
          "type": "address"
        },
        {
          "internalType": "uint16",
          "name": "srcChainId_",
          "type": "uint16"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "InvalidProposalId",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ZeroAddressNotAllowed",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint16",
          "name": "_srcChainId",
          "type": "uint16"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "_srcAddress",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "_nonce",
          "type": "uint64"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "_payload",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "_reason",
          "type": "bytes"
        }
      ],
      "name": "MessageFailed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "oldGuardian",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newGuardian",
          "type": "address"
        }
      ],
      "name": "NewGuardian",
      "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": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Paused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        }
      ],
      "name": "ProposalCanceled",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        }
      ],
      "name": "ProposalExecuted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "eta",
          "type": "uint256"
        }
      ],
      "name": "ProposalQueued",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "proposalId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address[]",
          "name": "targets",
          "type": "address[]"
        },
        {
          "indexed": false,
          "internalType": "uint256[]",
          "name": "values",
          "type": "uint256[]"
        },
        {
          "indexed": false,
          "internalType": "string[]",
          "name": "signatures",
          "type": "string[]"
        },
        {
          "indexed": false,
          "internalType": "bytes[]",
          "name": "calldatas",
          "type": "bytes[]"
        },
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "proposalType",
          "type": "uint8"
        }
      ],
      "name": "ProposalReceived",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint16",
          "name": "srcChainId",
          "type": "uint16"
        },
        {
          "indexed": true,
          "internalType": "bytes",
          "name": "srcAddress",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "nonce",
          "type": "uint64"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "reason",
          "type": "bytes"
        }
      ],
      "name": "ReceivePayloadFailed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint16",
          "name": "_srcChainId",
          "type": "uint16"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "_srcAddress",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "_nonce",
          "type": "uint64"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "_payloadHash",
          "type": "bytes32"
        }
      ],
      "name": "RetryMessageSuccess",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "oldMaxLimit",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newMaxLimit",
          "type": "uint256"
        }
      ],
      "name": "SetMaxDailyReceiveLimit",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint16",
          "name": "_dstChainId",
          "type": "uint16"
        },
        {
          "indexed": false,
          "internalType": "uint16",
          "name": "_type",
          "type": "uint16"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_minDstGas",
          "type": "uint256"
        }
      ],
      "name": "SetMinDstGas",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "precrime",
          "type": "address"
        }
      ],
      "name": "SetPrecrime",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint16",
          "name": "oldSrcChainId",
          "type": "uint16"
        },
        {
          "indexed": true,
          "internalType": "uint16",
          "name": "newSrcChainId",
          "type": "uint16"
        }
      ],
      "name": "SetSrcChainId",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "name": "SetTimelockPendingAdmin",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint16",
          "name": "_remoteChainId",
          "type": "uint16"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "_path",
          "type": "bytes"
        }
      ],
      "name": "SetTrustedRemote",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint16",
          "name": "_remoteChainId",
          "type": "uint16"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "_remoteAddress",
          "type": "bytes"
        }
      ],
      "name": "SetTrustedRemoteAddress",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "routeType",
          "type": "uint8"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "oldTimelock",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newTimelock",
          "type": "address"
        }
      ],
      "name": "TimelockAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Unpaused",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DEFAULT_PAYLOAD_SIZE_LIMIT",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ITimelock[]",
          "name": "timelocks_",
          "type": "address[]"
        }
      ],
      "name": "addTimelocks",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "proposalId_",
          "type": "uint256"
        }
      ],
      "name": "cancel",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "proposalId_",
          "type": "uint256"
        }
      ],
      "name": "execute",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        },
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "name": "failedMessages",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_srcChainId",
          "type": "uint16"
        },
        {
          "internalType": "bytes",
          "name": "_srcAddress",
          "type": "bytes"
        }
      ],
      "name": "forceResumeReceive",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_version",
          "type": "uint16"
        },
        {
          "internalType": "uint16",
          "name": "_chainId",
          "type": "uint16"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_configType",
          "type": "uint256"
        }
      ],
      "name": "getConfig",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_remoteChainId",
          "type": "uint16"
        }
      ],
      "name": "getTrustedRemoteAddress",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "guardian",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_srcChainId",
          "type": "uint16"
        },
        {
          "internalType": "bytes",
          "name": "_srcAddress",
          "type": "bytes"
        }
      ],
      "name": "isTrustedRemote",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "last24HourCommandsReceived",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "last24HourReceiveWindowStart",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "lastProposalReceived",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "lzEndpoint",
      "outputs": [
        {
          "internalType": "contract ILayerZeroEndpoint",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_srcChainId",
          "type": "uint16"
        },
        {
          "internalType": "bytes",
          "name": "_srcAddress",
          "type": "bytes"
        },
        {
          "internalType": "uint64",
          "name": "_nonce",
          "type": "uint64"
        },
        {
          "internalType": "bytes",
          "name": "_payload",
          "type": "bytes"
        }
      ],
      "name": "lzReceive",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "maxDailyReceiveLimit",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        },
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "name": "minDstGasLookup",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_srcChainId",
          "type": "uint16"
        },
        {
          "internalType": "bytes",
          "name": "_srcAddress",
          "type": "bytes"
        },
        {
          "internalType": "uint64",
          "name": "_nonce",
          "type": "uint64"
        },
        {
          "internalType": "bytes",
          "name": "_payload",
          "type": "bytes"
        }
      ],
      "name": "nonblockingLzReceive",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "paused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "name": "payloadSizeLimitLookup",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "precrime",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "proposalTimelocks",
      "outputs": [
        {
          "internalType": "contract ITimelock",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "proposals",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "eta",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "canceled",
          "type": "bool"
        },
        {
          "internalType": "bool",
          "name": "executed",
          "type": "bool"
        },
        {
          "internalType": "uint8",
          "name": "proposalType",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "queued",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "srcChainId_",
          "type": "uint16"
        },
        {
          "internalType": "bytes",
          "name": "srcAddress_",
          "type": "bytes"
        },
        {
          "internalType": "uint64",
          "name": "nonce_",
          "type": "uint64"
        },
        {
          "internalType": "bytes",
          "name": "payload_",
          "type": "bytes"
        }
      ],
      "name": "retryMessage",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_version",
          "type": "uint16"
        },
        {
          "internalType": "uint16",
          "name": "_chainId",
          "type": "uint16"
        },
        {
          "internalType": "uint256",
          "name": "_configType",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "_config",
          "type": "bytes"
        }
      ],
      "name": "setConfig",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newGuardian",
          "type": "address"
        }
      ],
      "name": "setGuardian",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "limit_",
          "type": "uint256"
        }
      ],
      "name": "setMaxDailyReceiveLimit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_dstChainId",
          "type": "uint16"
        },
        {
          "internalType": "uint16",
          "name": "_packetType",
          "type": "uint16"
        },
        {
          "internalType": "uint256",
          "name": "_minGas",
          "type": "uint256"
        }
      ],
      "name": "setMinDstGas",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_dstChainId",
          "type": "uint16"
        },
        {
          "internalType": "uint256",
          "name": "_size",
          "type": "uint256"
        }
      ],
      "name": "setPayloadSizeLimit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_precrime",
          "type": "address"
        }
      ],
      "name": "setPrecrime",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_version",
          "type": "uint16"
        }
      ],
      "name": "setReceiveVersion",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_version",
          "type": "uint16"
        }
      ],
      "name": "setSendVersion",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "srcChainId_",
          "type": "uint16"
        }
      ],
      "name": "setSrcChainId",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "pendingAdmin_",
          "type": "address"
        },
        {
          "internalType": "uint8",
          "name": "proposalType_",
          "type": "uint8"
        }
      ],
      "name": "setTimelockPendingAdmin",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_remoteChainId",
          "type": "uint16"
        },
        {
          "internalType": "bytes",
          "name": "_path",
          "type": "bytes"
        }
      ],
      "name": "setTrustedRemote",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_remoteChainId",
          "type": "uint16"
        },
        {
          "internalType": "bytes",
          "name": "_remoteAddress",
          "type": "bytes"
        }
      ],
      "name": "setTrustedRemoteAddress",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "srcChainId",
      "outputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "proposalId_",
          "type": "uint256"
        }
      ],
      "name": "state",
      "outputs": [
        {
          "internalType": "enum OmnichainGovernanceExecutor.ProposalState",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "name": "trustedRemoteLookup",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "unpause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "transactionHash": "0x69b0ba7f281a35e04a849ca80ac6694ab06924b65440850d2d74bf0abc7f32a7",
  "receipt": {
    "to": null,
    "from": "0xA6518a5c18a4C374E6F4316AA73Ce634C785a3B6",
    "contractAddress": "0xcf3e6972a8e9c53D33b642a2592938944956f138",
    "transactionIndex": 1,
    "gasUsed": "34071216",
    "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000020001000010000000000000000000000000000000020000000000000000000800000000000000004000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000400000020000000000000000000000000000000000000000000000000000000000000000000",
    "blockHash": "0xbdc08fcd2776618d061bb21c3a1e60be7074e7d65e5118a737b4a4f46c5cc605",
    "transactionHash": "0x69b0ba7f281a35e04a849ca80ac6694ab06924b65440850d2d74bf0abc7f32a7",
    "logs": [
      {
        "transactionIndex": 1,
        "blockNumber": 54235048,
        "transactionHash": "0x69b0ba7f281a35e04a849ca80ac6694ab06924b65440850d2d74bf0abc7f32a7",
        "address": "0xcf3e6972a8e9c53D33b642a2592938944956f138",
        "topics": [
          "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0",
          "0x0000000000000000000000000000000000000000000000000000000000000000",
          "0x000000000000000000000000a6518a5c18a4c374e6f4316aa73ce634c785a3b6"
        ],
        "data": "0x",
        "logIndex": 0,
        "blockHash": "0xbdc08fcd2776618d061bb21c3a1e60be7074e7d65e5118a737b4a4f46c5cc605"
      }
    ],
    "blockNumber": 54235048,
    "cumulativeGasUsed": "34071216",
    "status": 1,
    "byzantium": true
  },
  "args": ["0x6098e96a28E02f27B1e6BD381f870F1C8Bd169d3", "0x1426A5Ae009c4443188DA8793751024E358A61C2", 10102],
  "numDeployments": 1,
  "solcInputHash": "836b1bc116f0f1cd99aeadbc34149dfb",
  "metadata": "{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"endpoint_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"guardian_\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"srcChainId_\",\"type\":\"uint16\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidProposalId\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"_srcChainId\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_srcAddress\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"_nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_payload\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_reason\",\"type\":\"bytes\"}],\"name\":\"MessageFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldGuardian\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newGuardian\",\"type\":\"address\"}],\"name\":\"NewGuardian\",\"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\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"ProposalCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"ProposalExecuted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"eta\",\"type\":\"uint256\"}],\"name\":\"ProposalQueued\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"targets\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"string[]\",\"name\":\"signatures\",\"type\":\"string[]\"},{\"indexed\":false,\"internalType\":\"bytes[]\",\"name\":\"calldatas\",\"type\":\"bytes[]\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"proposalType\",\"type\":\"uint8\"}],\"name\":\"ProposalReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint16\",\"name\":\"srcChainId\",\"type\":\"uint16\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"srcAddress\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"reason\",\"type\":\"bytes\"}],\"name\":\"ReceivePayloadFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"_srcChainId\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_srcAddress\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"_nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_payloadHash\",\"type\":\"bytes32\"}],\"name\":\"RetryMessageSuccess\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldMaxLimit\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newMaxLimit\",\"type\":\"uint256\"}],\"name\":\"SetMaxDailyReceiveLimit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"_dstChainId\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"_type\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_minDstGas\",\"type\":\"uint256\"}],\"name\":\"SetMinDstGas\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"precrime\",\"type\":\"address\"}],\"name\":\"SetPrecrime\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint16\",\"name\":\"oldSrcChainId\",\"type\":\"uint16\"},{\"indexed\":true,\"internalType\":\"uint16\",\"name\":\"newSrcChainId\",\"type\":\"uint16\"}],\"name\":\"SetSrcChainId\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"name\":\"SetTimelockPendingAdmin\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"_remoteChainId\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_path\",\"type\":\"bytes\"}],\"name\":\"SetTrustedRemote\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"_remoteChainId\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_remoteAddress\",\"type\":\"bytes\"}],\"name\":\"SetTrustedRemoteAddress\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"routeType\",\"type\":\"uint8\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldTimelock\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newTimelock\",\"type\":\"address\"}],\"name\":\"TimelockAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_PAYLOAD_SIZE_LIMIT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract ITimelock[]\",\"name\":\"timelocks_\",\"type\":\"address[]\"}],\"name\":\"addTimelocks\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"proposalId_\",\"type\":\"uint256\"}],\"name\":\"cancel\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"proposalId_\",\"type\":\"uint256\"}],\"name\":\"execute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"name\":\"failedMessages\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_srcChainId\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"_srcAddress\",\"type\":\"bytes\"}],\"name\":\"forceResumeReceive\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_version\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"_chainId\",\"type\":\"uint16\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_configType\",\"type\":\"uint256\"}],\"name\":\"getConfig\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_remoteChainId\",\"type\":\"uint16\"}],\"name\":\"getTrustedRemoteAddress\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"guardian\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_srcChainId\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"_srcAddress\",\"type\":\"bytes\"}],\"name\":\"isTrustedRemote\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"last24HourCommandsReceived\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"last24HourReceiveWindowStart\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastProposalReceived\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lzEndpoint\",\"outputs\":[{\"internalType\":\"contract ILayerZeroEndpoint\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_srcChainId\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"_srcAddress\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"_nonce\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"_payload\",\"type\":\"bytes\"}],\"name\":\"lzReceive\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxDailyReceiveLimit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"name\":\"minDstGasLookup\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_srcChainId\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"_srcAddress\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"_nonce\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"_payload\",\"type\":\"bytes\"}],\"name\":\"nonblockingLzReceive\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"name\":\"payloadSizeLimitLookup\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"precrime\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"proposalTimelocks\",\"outputs\":[{\"internalType\":\"contract ITimelock\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"proposals\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"eta\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"canceled\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"executed\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"proposalType\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"queued\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"srcChainId_\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"srcAddress_\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"nonce_\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"payload_\",\"type\":\"bytes\"}],\"name\":\"retryMessage\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_version\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"_chainId\",\"type\":\"uint16\"},{\"internalType\":\"uint256\",\"name\":\"_configType\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_config\",\"type\":\"bytes\"}],\"name\":\"setConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newGuardian\",\"type\":\"address\"}],\"name\":\"setGuardian\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"limit_\",\"type\":\"uint256\"}],\"name\":\"setMaxDailyReceiveLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_dstChainId\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"_packetType\",\"type\":\"uint16\"},{\"internalType\":\"uint256\",\"name\":\"_minGas\",\"type\":\"uint256\"}],\"name\":\"setMinDstGas\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_dstChainId\",\"type\":\"uint16\"},{\"internalType\":\"uint256\",\"name\":\"_size\",\"type\":\"uint256\"}],\"name\":\"setPayloadSizeLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_precrime\",\"type\":\"address\"}],\"name\":\"setPrecrime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_version\",\"type\":\"uint16\"}],\"name\":\"setReceiveVersion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_version\",\"type\":\"uint16\"}],\"name\":\"setSendVersion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"srcChainId_\",\"type\":\"uint16\"}],\"name\":\"setSrcChainId\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pendingAdmin_\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"proposalType_\",\"type\":\"uint8\"}],\"name\":\"setTimelockPendingAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_remoteChainId\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"_path\",\"type\":\"bytes\"}],\"name\":\"setTrustedRemote\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_remoteChainId\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"_remoteAddress\",\"type\":\"bytes\"}],\"name\":\"setTrustedRemoteAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"srcChainId\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"proposalId_\",\"type\":\"uint256\"}],\"name\":\"state\",\"outputs\":[{\"internalType\":\"enum OmnichainGovernanceExecutor.ProposalState\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"name\":\"trustedRemoteLookup\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"custom:security-contact\":\"https://github.com/VenusProtocol/governance-contracts#discussion\",\"details\":\"The owner of this contract controls LayerZero configuration. When used in production the owner will be OmnichainExecutor This implementation is non-blocking, meaning the failed messages will not block the future messages from the source. For the blocking behavior, derive the contract from LzApp.\",\"events\":{\"Paused(address)\":{\"details\":\"Emitted when the pause is triggered by `account`.\"},\"Unpaused(address)\":{\"details\":\"Emitted when the pause is lifted by `account`.\"}},\"kind\":\"dev\",\"methods\":{\"addTimelocks(address[])\":{\"custom:access\":\"Only owner\",\"custom:event\":\"Emits TimelockAdded with old and new timelock and route type\",\"params\":{\"timelocks_\":\"Array of addresses of all 3 timelocks\"}},\"cancel(uint256)\":{\"custom:access\":\"Sender must be the guardian\",\"custom:event\":\"Emits ProposalCanceled with proposal id of the canceled proposal\",\"params\":{\"proposalId_\":\"Id of proposal that is to be canceled\"}},\"execute(uint256)\":{\"custom:event\":\"Emits ProposalExecuted with proposal id of executed proposal\",\"params\":{\"proposalId_\":\"Id of proposal that is to be executed\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pause()\":{\"custom:access\":\"Only owner\"},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"retryMessage(uint16,bytes,uint64,bytes)\":{\"custom:access\":\"Only owner\",\"params\":{\"nonce_\":\"Nonce to identify failed message\",\"payload_\":\"The payload of the message to be retried\",\"srcAddress_\":\"Source address => local app address + remote app address\",\"srcChainId_\":\"Source chain Id\"}},\"setGuardian(address)\":{\"custom:access\":\"Must be call by guardian or owner\",\"custom:event\":\"Emit NewGuardian with old and new guardian address\",\"params\":{\"newGuardian\":\"The address of the new guardian\"}},\"setMaxDailyReceiveLimit(uint256)\":{\"custom:access\":\"Only Owner\",\"custom:event\":\"Emits SetMaxDailyReceiveLimit with old and new limit\",\"params\":{\"limit_\":\"Number of commands\"}},\"setSrcChainId(uint16)\":{\"custom:access\":\"Only owner\",\"custom:event\":\"Emit SetSrcChainId with old and new source id\",\"params\":{\"srcChainId_\":\"The new source chain id to be set\"}},\"setTimelockPendingAdmin(address,uint8)\":{\"custom:access\":\"Only owner\",\"custom:event\":\"Emits SetTimelockPendingAdmin with new pending admin and proposal type\",\"params\":{\"pendingAdmin_\":\"Address of new pending admin\",\"proposalType_\":\"Type of proposal\"}},\"state(uint256)\":{\"params\":{\"proposalId_\":\"The id of the proposal\"},\"returns\":{\"_0\":\"Proposal state\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"unpause()\":{\"custom:access\":\"Only owner\"}},\"title\":\"OmnichainGovernanceExecutor\",\"version\":1},\"userdoc\":{\"errors\":{\"InvalidProposalId()\":[{\"notice\":\"Thrown when proposal ID is invalid\"}],\"ZeroAddressNotAllowed()\":[{\"notice\":\"Thrown if the supplied address is a zero address where it is not allowed\"}]},\"events\":{\"NewGuardian(address,address)\":{\"notice\":\"Emitted when new guardian address is set\"},\"ProposalCanceled(uint256)\":{\"notice\":\"Emitted when proposal is canceled\"},\"ProposalExecuted(uint256)\":{\"notice\":\"Emitted when proposal executed\"},\"ProposalQueued(uint256,uint256)\":{\"notice\":\"Emitted when proposal is queued\"},\"ProposalReceived(uint256,address[],uint256[],string[],bytes[],uint8)\":{\"notice\":\"Emitted when proposal is received\"},\"ReceivePayloadFailed(uint16,bytes,uint64,bytes)\":{\"notice\":\"Emitted when proposal failed\"},\"SetMaxDailyReceiveLimit(uint256,uint256)\":{\"notice\":\"Emitted when the maximum daily limit for receiving command from Binance chain is modified\"},\"SetSrcChainId(uint16,uint16)\":{\"notice\":\"Emitted when source layerzero endpoint id is updated\"},\"SetTimelockPendingAdmin(address,uint8)\":{\"notice\":\"Emitted when pending admin of Timelock is updated\"},\"TimelockAdded(uint8,address,address)\":{\"notice\":\"Emitted when timelock added\"}},\"kind\":\"user\",\"methods\":{\"addTimelocks(address[])\":{\"notice\":\"Add timelocks to the ProposalTimelocks mapping\"},\"cancel(uint256)\":{\"notice\":\"Cancels a proposal only if sender is the guardian and proposal is not executed\"},\"execute(uint256)\":{\"notice\":\"Executes a queued proposal if eta has passed\"},\"guardian()\":{\"notice\":\"A privileged role that can cancel any proposal\"},\"last24HourCommandsReceived()\":{\"notice\":\"Total received commands within the last 24-hour window from Binance chain\"},\"last24HourReceiveWindowStart()\":{\"notice\":\"Timestamp when the last 24-hour window started from Binance chain\"},\"lastProposalReceived()\":{\"notice\":\"Last proposal count received\"},\"maxDailyReceiveLimit()\":{\"notice\":\"Maximum daily limit for receiving commands from Binance chain\"},\"pause()\":{\"notice\":\"Triggers the paused state of the controller\"},\"proposalTimelocks(uint256)\":{\"notice\":\"Mapping containing Timelock addresses for each proposal type\"},\"proposals(uint256)\":{\"notice\":\"The official record of all proposals ever proposed\"},\"queued(uint256)\":{\"notice\":\"Represents queue state of proposal\"},\"renounceOwnership()\":{\"notice\":\"Empty implementation of renounce ownership to avoid any mishappening\"},\"retryMessage(uint16,bytes,uint64,bytes)\":{\"notice\":\"Resends a previously failed message\"},\"setGuardian(address)\":{\"notice\":\"Sets the new executor guardian\"},\"setMaxDailyReceiveLimit(uint256)\":{\"notice\":\"Sets the maximum daily limit for receiving commands\"},\"setSrcChainId(uint16)\":{\"notice\":\"Update source layerzero endpoint id\"},\"setTimelockPendingAdmin(address,uint8)\":{\"notice\":\"Sets the new pending admin of the Timelock\"},\"srcChainId()\":{\"notice\":\"Stores BNB chain layerzero endpoint id\"},\"state(uint256)\":{\"notice\":\"Gets the state of a proposal\"},\"unpause()\":{\"notice\":\"Triggers the resume state of the controller\"}},\"notice\":\"Executes the proposal transactions sent from the main chain\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/Cross-chain/OmnichainGovernanceExecutor.sol\":\"OmnichainGovernanceExecutor\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[]},\"sources\":{\"@layerzerolabs/solidity-examples/contracts/libraries/BytesLib.sol\":{\"content\":\"// SPDX-License-Identifier: Unlicense\\n/*\\n * @title Solidity Bytes Arrays Utils\\n * @author Gon\\u00e7alo S\\u00e1 <goncalo.sa@consensys.net>\\n *\\n * @dev Bytes tightly packed arrays utility library for ethereum contracts written in Solidity.\\n *      The library lets you concatenate, slice and type cast bytes arrays both in memory and storage.\\n */\\npragma solidity >=0.8.0 <0.9.0;\\n\\nlibrary BytesLib {\\n    function concat(bytes memory _preBytes, bytes memory _postBytes) internal pure returns (bytes memory) {\\n        bytes memory tempBytes;\\n\\n        assembly {\\n            // Get a location of some free memory and store it in tempBytes as\\n            // Solidity does for memory variables.\\n            tempBytes := mload(0x40)\\n\\n            // Store the length of the first bytes array at the beginning of\\n            // the memory for tempBytes.\\n            let length := mload(_preBytes)\\n            mstore(tempBytes, length)\\n\\n            // Maintain a memory counter for the current write location in the\\n            // temp bytes array by adding the 32 bytes for the array length to\\n            // the starting location.\\n            let mc := add(tempBytes, 0x20)\\n            // Stop copying when the memory counter reaches the length of the\\n            // first bytes array.\\n            let end := add(mc, length)\\n\\n            for {\\n                // Initialize a copy counter to the start of the _preBytes data,\\n                // 32 bytes into its memory.\\n                let cc := add(_preBytes, 0x20)\\n            } lt(mc, end) {\\n                // Increase both counters by 32 bytes each iteration.\\n                mc := add(mc, 0x20)\\n                cc := add(cc, 0x20)\\n            } {\\n                // Write the _preBytes data into the tempBytes memory 32 bytes\\n                // at a time.\\n                mstore(mc, mload(cc))\\n            }\\n\\n            // Add the length of _postBytes to the current length of tempBytes\\n            // and store it as the new length in the first 32 bytes of the\\n            // tempBytes memory.\\n            length := mload(_postBytes)\\n            mstore(tempBytes, add(length, mload(tempBytes)))\\n\\n            // Move the memory counter back from a multiple of 0x20 to the\\n            // actual end of the _preBytes data.\\n            mc := end\\n            // Stop copying when the memory counter reaches the new combined\\n            // length of the arrays.\\n            end := add(mc, length)\\n\\n            for {\\n                let cc := add(_postBytes, 0x20)\\n            } lt(mc, end) {\\n                mc := add(mc, 0x20)\\n                cc := add(cc, 0x20)\\n            } {\\n                mstore(mc, mload(cc))\\n            }\\n\\n            // Update the free-memory pointer by padding our last write location\\n            // to 32 bytes: add 31 bytes to the end of tempBytes to move to the\\n            // next 32 byte block, then round down to the nearest multiple of\\n            // 32. If the sum of the length of the two arrays is zero then add\\n            // one before rounding down to leave a blank 32 bytes (the length block with 0).\\n            mstore(\\n                0x40,\\n                and(\\n                    add(add(end, iszero(add(length, mload(_preBytes)))), 31),\\n                    not(31) // Round down to the nearest 32 bytes.\\n                )\\n            )\\n        }\\n\\n        return tempBytes;\\n    }\\n\\n    function concatStorage(bytes storage _preBytes, bytes memory _postBytes) internal {\\n        assembly {\\n            // Read the first 32 bytes of _preBytes storage, which is the length\\n            // of the array. (We don't need to use the offset into the slot\\n            // because arrays use the entire slot.)\\n            let fslot := sload(_preBytes.slot)\\n            // Arrays of 31 bytes or less have an even value in their slot,\\n            // while longer arrays have an odd value. The actual length is\\n            // the slot divided by two for odd values, and the lowest order\\n            // byte divided by two for even values.\\n            // If the slot is even, bitwise and the slot with 255 and divide by\\n            // two to get the length. If the slot is odd, bitwise and the slot\\n            // with -1 and divide by two.\\n            let slength := div(and(fslot, sub(mul(0x100, iszero(and(fslot, 1))), 1)), 2)\\n            let mlength := mload(_postBytes)\\n            let newlength := add(slength, mlength)\\n            // slength can contain both the length and contents of the array\\n            // if length < 32 bytes so let's prepare for that\\n            // v. http://solidity.readthedocs.io/en/latest/miscellaneous.html#layout-of-state-variables-in-storage\\n            switch add(lt(slength, 32), lt(newlength, 32))\\n            case 2 {\\n                // Since the new array still fits in the slot, we just need to\\n                // update the contents of the slot.\\n                // uint256(bytes_storage) = uint256(bytes_storage) + uint256(bytes_memory) + new_length\\n                sstore(\\n                    _preBytes.slot,\\n                    // all the modifications to the slot are inside this\\n                    // next block\\n                    add(\\n                        // we can just add to the slot contents because the\\n                        // bytes we want to change are the LSBs\\n                        fslot,\\n                        add(\\n                            mul(\\n                                div(\\n                                    // load the bytes from memory\\n                                    mload(add(_postBytes, 0x20)),\\n                                    // zero all bytes to the right\\n                                    exp(0x100, sub(32, mlength))\\n                                ),\\n                                // and now shift left the number of bytes to\\n                                // leave space for the length in the slot\\n                                exp(0x100, sub(32, newlength))\\n                            ),\\n                            // increase length by the double of the memory\\n                            // bytes length\\n                            mul(mlength, 2)\\n                        )\\n                    )\\n                )\\n            }\\n            case 1 {\\n                // The stored value fits in the slot, but the combined value\\n                // will exceed it.\\n                // get the keccak hash to get the contents of the array\\n                mstore(0x0, _preBytes.slot)\\n                let sc := add(keccak256(0x0, 0x20), div(slength, 32))\\n\\n                // save new length\\n                sstore(_preBytes.slot, add(mul(newlength, 2), 1))\\n\\n                // The contents of the _postBytes array start 32 bytes into\\n                // the structure. Our first read should obtain the `submod`\\n                // bytes that can fit into the unused space in the last word\\n                // of the stored array. To get this, we read 32 bytes starting\\n                // from `submod`, so the data we read overlaps with the array\\n                // contents by `submod` bytes. Masking the lowest-order\\n                // `submod` bytes allows us to add that value directly to the\\n                // stored value.\\n\\n                let submod := sub(32, slength)\\n                let mc := add(_postBytes, submod)\\n                let end := add(_postBytes, mlength)\\n                let mask := sub(exp(0x100, submod), 1)\\n\\n                sstore(sc, add(and(fslot, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00), and(mload(mc), mask)))\\n\\n                for {\\n                    mc := add(mc, 0x20)\\n                    sc := add(sc, 1)\\n                } lt(mc, end) {\\n                    sc := add(sc, 1)\\n                    mc := add(mc, 0x20)\\n                } {\\n                    sstore(sc, mload(mc))\\n                }\\n\\n                mask := exp(0x100, sub(mc, end))\\n\\n                sstore(sc, mul(div(mload(mc), mask), mask))\\n            }\\n            default {\\n                // get the keccak hash to get the contents of the array\\n                mstore(0x0, _preBytes.slot)\\n                // Start copying to the last used word of the stored array.\\n                let sc := add(keccak256(0x0, 0x20), div(slength, 32))\\n\\n                // save new length\\n                sstore(_preBytes.slot, add(mul(newlength, 2), 1))\\n\\n                // Copy over the first `submod` bytes of the new data as in\\n                // case 1 above.\\n                let slengthmod := mod(slength, 32)\\n                let mlengthmod := mod(mlength, 32)\\n                let submod := sub(32, slengthmod)\\n                let mc := add(_postBytes, submod)\\n                let end := add(_postBytes, mlength)\\n                let mask := sub(exp(0x100, submod), 1)\\n\\n                sstore(sc, add(sload(sc), and(mload(mc), mask)))\\n\\n                for {\\n                    sc := add(sc, 1)\\n                    mc := add(mc, 0x20)\\n                } lt(mc, end) {\\n                    sc := add(sc, 1)\\n                    mc := add(mc, 0x20)\\n                } {\\n                    sstore(sc, mload(mc))\\n                }\\n\\n                mask := exp(0x100, sub(mc, end))\\n\\n                sstore(sc, mul(div(mload(mc), mask), mask))\\n            }\\n        }\\n    }\\n\\n    function slice(\\n        bytes memory _bytes,\\n        uint _start,\\n        uint _length\\n    ) internal pure returns (bytes memory) {\\n        require(_length + 31 >= _length, \\\"slice_overflow\\\");\\n        require(_bytes.length >= _start + _length, \\\"slice_outOfBounds\\\");\\n\\n        bytes memory tempBytes;\\n\\n        assembly {\\n            switch iszero(_length)\\n            case 0 {\\n                // Get a location of some free memory and store it in tempBytes as\\n                // Solidity does for memory variables.\\n                tempBytes := mload(0x40)\\n\\n                // The first word of the slice result is potentially a partial\\n                // word read from the original array. To read it, we calculate\\n                // the length of that partial word and start copying that many\\n                // bytes into the array. The first word we copy will start with\\n                // data we don't care about, but the last `lengthmod` bytes will\\n                // land at the beginning of the contents of the new array. When\\n                // we're done copying, we overwrite the full first word with\\n                // the actual length of the slice.\\n                let lengthmod := and(_length, 31)\\n\\n                // The multiplication in the next line is necessary\\n                // because when slicing multiples of 32 bytes (lengthmod == 0)\\n                // the following copy loop was copying the origin's length\\n                // and then ending prematurely not copying everything it should.\\n                let mc := add(add(tempBytes, lengthmod), mul(0x20, iszero(lengthmod)))\\n                let end := add(mc, _length)\\n\\n                for {\\n                    // The multiplication in the next line has the same exact purpose\\n                    // as the one above.\\n                    let cc := add(add(add(_bytes, lengthmod), mul(0x20, iszero(lengthmod))), _start)\\n                } lt(mc, end) {\\n                    mc := add(mc, 0x20)\\n                    cc := add(cc, 0x20)\\n                } {\\n                    mstore(mc, mload(cc))\\n                }\\n\\n                mstore(tempBytes, _length)\\n\\n                //update free-memory pointer\\n                //allocating the array padded to 32 bytes like the compiler does now\\n                mstore(0x40, and(add(mc, 31), not(31)))\\n            }\\n            //if we want a zero-length slice let's just return a zero-length array\\n            default {\\n                tempBytes := mload(0x40)\\n                //zero out the 32 bytes slice we are about to return\\n                //we need to do it because Solidity does not garbage collect\\n                mstore(tempBytes, 0)\\n\\n                mstore(0x40, add(tempBytes, 0x20))\\n            }\\n        }\\n\\n        return tempBytes;\\n    }\\n\\n    function toAddress(bytes memory _bytes, uint _start) internal pure returns (address) {\\n        require(_bytes.length >= _start + 20, \\\"toAddress_outOfBounds\\\");\\n        address tempAddress;\\n\\n        assembly {\\n            tempAddress := div(mload(add(add(_bytes, 0x20), _start)), 0x1000000000000000000000000)\\n        }\\n\\n        return tempAddress;\\n    }\\n\\n    function toUint8(bytes memory _bytes, uint _start) internal pure returns (uint8) {\\n        require(_bytes.length >= _start + 1, \\\"toUint8_outOfBounds\\\");\\n        uint8 tempUint;\\n\\n        assembly {\\n            tempUint := mload(add(add(_bytes, 0x1), _start))\\n        }\\n\\n        return tempUint;\\n    }\\n\\n    function toUint16(bytes memory _bytes, uint _start) internal pure returns (uint16) {\\n        require(_bytes.length >= _start + 2, \\\"toUint16_outOfBounds\\\");\\n        uint16 tempUint;\\n\\n        assembly {\\n            tempUint := mload(add(add(_bytes, 0x2), _start))\\n        }\\n\\n        return tempUint;\\n    }\\n\\n    function toUint32(bytes memory _bytes, uint _start) internal pure returns (uint32) {\\n        require(_bytes.length >= _start + 4, \\\"toUint32_outOfBounds\\\");\\n        uint32 tempUint;\\n\\n        assembly {\\n            tempUint := mload(add(add(_bytes, 0x4), _start))\\n        }\\n\\n        return tempUint;\\n    }\\n\\n    function toUint64(bytes memory _bytes, uint _start) internal pure returns (uint64) {\\n        require(_bytes.length >= _start + 8, \\\"toUint64_outOfBounds\\\");\\n        uint64 tempUint;\\n\\n        assembly {\\n            tempUint := mload(add(add(_bytes, 0x8), _start))\\n        }\\n\\n        return tempUint;\\n    }\\n\\n    function toUint96(bytes memory _bytes, uint _start) internal pure returns (uint96) {\\n        require(_bytes.length >= _start + 12, \\\"toUint96_outOfBounds\\\");\\n        uint96 tempUint;\\n\\n        assembly {\\n            tempUint := mload(add(add(_bytes, 0xc), _start))\\n        }\\n\\n        return tempUint;\\n    }\\n\\n    function toUint128(bytes memory _bytes, uint _start) internal pure returns (uint128) {\\n        require(_bytes.length >= _start + 16, \\\"toUint128_outOfBounds\\\");\\n        uint128 tempUint;\\n\\n        assembly {\\n            tempUint := mload(add(add(_bytes, 0x10), _start))\\n        }\\n\\n        return tempUint;\\n    }\\n\\n    function toUint256(bytes memory _bytes, uint _start) internal pure returns (uint) {\\n        require(_bytes.length >= _start + 32, \\\"toUint256_outOfBounds\\\");\\n        uint tempUint;\\n\\n        assembly {\\n            tempUint := mload(add(add(_bytes, 0x20), _start))\\n        }\\n\\n        return tempUint;\\n    }\\n\\n    function toBytes32(bytes memory _bytes, uint _start) internal pure returns (bytes32) {\\n        require(_bytes.length >= _start + 32, \\\"toBytes32_outOfBounds\\\");\\n        bytes32 tempBytes32;\\n\\n        assembly {\\n            tempBytes32 := mload(add(add(_bytes, 0x20), _start))\\n        }\\n\\n        return tempBytes32;\\n    }\\n\\n    function equal(bytes memory _preBytes, bytes memory _postBytes) internal pure returns (bool) {\\n        bool success = true;\\n\\n        assembly {\\n            let length := mload(_preBytes)\\n\\n            // if lengths don't match the arrays are not equal\\n            switch eq(length, mload(_postBytes))\\n            case 1 {\\n                // cb is a circuit breaker in the for loop since there's\\n                //  no said feature for inline assembly loops\\n                // cb = 1 - don't breaker\\n                // cb = 0 - break\\n                let cb := 1\\n\\n                let mc := add(_preBytes, 0x20)\\n                let end := add(mc, length)\\n\\n                for {\\n                    let cc := add(_postBytes, 0x20)\\n                    // the next line is the loop condition:\\n                    // while(uint256(mc < end) + cb == 2)\\n                } eq(add(lt(mc, end), cb), 2) {\\n                    mc := add(mc, 0x20)\\n                    cc := add(cc, 0x20)\\n                } {\\n                    // if any of these checks fails then arrays are not equal\\n                    if iszero(eq(mload(mc), mload(cc))) {\\n                        // unsuccess:\\n                        success := 0\\n                        cb := 0\\n                    }\\n                }\\n            }\\n            default {\\n                // unsuccess:\\n                success := 0\\n            }\\n        }\\n\\n        return success;\\n    }\\n\\n    function equalStorage(bytes storage _preBytes, bytes memory _postBytes) internal view returns (bool) {\\n        bool success = true;\\n\\n        assembly {\\n            // we know _preBytes_offset is 0\\n            let fslot := sload(_preBytes.slot)\\n            // Decode the length of the stored array like in concatStorage().\\n            let slength := div(and(fslot, sub(mul(0x100, iszero(and(fslot, 1))), 1)), 2)\\n            let mlength := mload(_postBytes)\\n\\n            // if lengths don't match the arrays are not equal\\n            switch eq(slength, mlength)\\n            case 1 {\\n                // slength can contain both the length and contents of the array\\n                // if length < 32 bytes so let's prepare for that\\n                // v. http://solidity.readthedocs.io/en/latest/miscellaneous.html#layout-of-state-variables-in-storage\\n                if iszero(iszero(slength)) {\\n                    switch lt(slength, 32)\\n                    case 1 {\\n                        // blank the last byte which is the length\\n                        fslot := mul(div(fslot, 0x100), 0x100)\\n\\n                        if iszero(eq(fslot, mload(add(_postBytes, 0x20)))) {\\n                            // unsuccess:\\n                            success := 0\\n                        }\\n                    }\\n                    default {\\n                        // cb is a circuit breaker in the for loop since there's\\n                        //  no said feature for inline assembly loops\\n                        // cb = 1 - don't breaker\\n                        // cb = 0 - break\\n                        let cb := 1\\n\\n                        // get the keccak hash to get the contents of the array\\n                        mstore(0x0, _preBytes.slot)\\n                        let sc := keccak256(0x0, 0x20)\\n\\n                        let mc := add(_postBytes, 0x20)\\n                        let end := add(mc, mlength)\\n\\n                        // the next line is the loop condition:\\n                        // while(uint256(mc < end) + cb == 2)\\n                        for {\\n\\n                        } eq(add(lt(mc, end), cb), 2) {\\n                            sc := add(sc, 1)\\n                            mc := add(mc, 0x20)\\n                        } {\\n                            if iszero(eq(sload(sc), mload(mc))) {\\n                                // unsuccess:\\n                                success := 0\\n                                cb := 0\\n                            }\\n                        }\\n                    }\\n                }\\n            }\\n            default {\\n                // unsuccess:\\n                success := 0\\n            }\\n        }\\n\\n        return success;\\n    }\\n}\\n\",\"keccak256\":\"0x7e64cccdf22a03f513d94960f2145dd801fb5ec88d971de079b5186a9f5e93c4\",\"license\":\"Unlicense\"},\"@layerzerolabs/solidity-examples/contracts/libraries/ExcessivelySafeCall.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity >=0.7.6;\\n\\nlibrary ExcessivelySafeCall {\\n    uint constant LOW_28_MASK = 0x00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff;\\n\\n    /// @notice Use when you _really_ really _really_ don't trust the called\\n    /// contract. This prevents the called contract from causing reversion of\\n    /// the caller in as many ways as we can.\\n    /// @dev The main difference between this and a solidity low-level call is\\n    /// that we limit the number of bytes that the callee can cause to be\\n    /// copied to caller memory. This prevents stupid things like malicious\\n    /// contracts returning 10,000,000 bytes causing a local OOG when copying\\n    /// to memory.\\n    /// @param _target The address to call\\n    /// @param _gas The amount of gas to forward to the remote contract\\n    /// @param _maxCopy The maximum number of bytes of returndata to copy\\n    /// to memory.\\n    /// @param _calldata The data to send to the remote contract\\n    /// @return success and returndata, as `.call()`. Returndata is capped to\\n    /// `_maxCopy` bytes.\\n    function excessivelySafeCall(\\n        address _target,\\n        uint _gas,\\n        uint16 _maxCopy,\\n        bytes memory _calldata\\n    ) internal returns (bool, bytes memory) {\\n        // set up for assembly call\\n        uint _toCopy;\\n        bool _success;\\n        bytes memory _returnData = new bytes(_maxCopy);\\n        // dispatch message to recipient\\n        // by assembly calling \\\"handle\\\" function\\n        // we call via assembly to avoid memcopying a very large returndata\\n        // returned by a malicious contract\\n        assembly {\\n            _success := call(\\n                _gas, // gas\\n                _target, // recipient\\n                0, // ether value\\n                add(_calldata, 0x20), // inloc\\n                mload(_calldata), // inlen\\n                0, // outloc\\n                0 // outlen\\n            )\\n            // limit our copy to 256 bytes\\n            _toCopy := returndatasize()\\n            if gt(_toCopy, _maxCopy) {\\n                _toCopy := _maxCopy\\n            }\\n            // Store the length of the copied bytes\\n            mstore(_returnData, _toCopy)\\n            // copy the bytes from returndata[0:_toCopy]\\n            returndatacopy(add(_returnData, 0x20), 0, _toCopy)\\n        }\\n        return (_success, _returnData);\\n    }\\n\\n    /// @notice Use when you _really_ really _really_ don't trust the called\\n    /// contract. This prevents the called contract from causing reversion of\\n    /// the caller in as many ways as we can.\\n    /// @dev The main difference between this and a solidity low-level call is\\n    /// that we limit the number of bytes that the callee can cause to be\\n    /// copied to caller memory. This prevents stupid things like malicious\\n    /// contracts returning 10,000,000 bytes causing a local OOG when copying\\n    /// to memory.\\n    /// @param _target The address to call\\n    /// @param _gas The amount of gas to forward to the remote contract\\n    /// @param _maxCopy The maximum number of bytes of returndata to copy\\n    /// to memory.\\n    /// @param _calldata The data to send to the remote contract\\n    /// @return success and returndata, as `.call()`. Returndata is capped to\\n    /// `_maxCopy` bytes.\\n    function excessivelySafeStaticCall(\\n        address _target,\\n        uint _gas,\\n        uint16 _maxCopy,\\n        bytes memory _calldata\\n    ) internal view returns (bool, bytes memory) {\\n        // set up for assembly call\\n        uint _toCopy;\\n        bool _success;\\n        bytes memory _returnData = new bytes(_maxCopy);\\n        // dispatch message to recipient\\n        // by assembly calling \\\"handle\\\" function\\n        // we call via assembly to avoid memcopying a very large returndata\\n        // returned by a malicious contract\\n        assembly {\\n            _success := staticcall(\\n                _gas, // gas\\n                _target, // recipient\\n                add(_calldata, 0x20), // inloc\\n                mload(_calldata), // inlen\\n                0, // outloc\\n                0 // outlen\\n            )\\n            // limit our copy to 256 bytes\\n            _toCopy := returndatasize()\\n            if gt(_toCopy, _maxCopy) {\\n                _toCopy := _maxCopy\\n            }\\n            // Store the length of the copied bytes\\n            mstore(_returnData, _toCopy)\\n            // copy the bytes from returndata[0:_toCopy]\\n            returndatacopy(add(_returnData, 0x20), 0, _toCopy)\\n        }\\n        return (_success, _returnData);\\n    }\\n\\n    /**\\n     * @notice Swaps function selectors in encoded contract calls\\n     * @dev Allows reuse of encoded calldata for functions with identical\\n     * argument types but different names. It simply swaps out the first 4 bytes\\n     * for the new selector. This function modifies memory in place, and should\\n     * only be used with caution.\\n     * @param _newSelector The new 4-byte selector\\n     * @param _buf The encoded contract args\\n     */\\n    function swapSelector(bytes4 _newSelector, bytes memory _buf) internal pure {\\n        require(_buf.length >= 4);\\n        uint _mask = LOW_28_MASK;\\n        assembly {\\n            // load the first word of\\n            let _word := mload(add(_buf, 0x20))\\n            // mask out the top 4 bytes\\n            // /x\\n            _word := and(_word, _mask)\\n            _word := or(_newSelector, _word)\\n            mstore(add(_buf, 0x20), _word)\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xd4e52af409b5ec80432292d86fb01906785eb78ac31da3bab4565aabcd6e3e56\",\"license\":\"MIT OR Apache-2.0\"},\"@layerzerolabs/solidity-examples/contracts/lzApp/LzApp.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport \\\"./interfaces/ILayerZeroReceiver.sol\\\";\\nimport \\\"./interfaces/ILayerZeroUserApplicationConfig.sol\\\";\\nimport \\\"./interfaces/ILayerZeroEndpoint.sol\\\";\\nimport \\\"../libraries/BytesLib.sol\\\";\\n\\n/*\\n * a generic LzReceiver implementation\\n */\\nabstract contract LzApp is Ownable, ILayerZeroReceiver, ILayerZeroUserApplicationConfig {\\n    using BytesLib for bytes;\\n\\n    // ua can not send payload larger than this by default, but it can be changed by the ua owner\\n    uint public constant DEFAULT_PAYLOAD_SIZE_LIMIT = 10000;\\n\\n    ILayerZeroEndpoint public immutable lzEndpoint;\\n    mapping(uint16 => bytes) public trustedRemoteLookup;\\n    mapping(uint16 => mapping(uint16 => uint)) public minDstGasLookup;\\n    mapping(uint16 => uint) public payloadSizeLimitLookup;\\n    address public precrime;\\n\\n    event SetPrecrime(address precrime);\\n    event SetTrustedRemote(uint16 _remoteChainId, bytes _path);\\n    event SetTrustedRemoteAddress(uint16 _remoteChainId, bytes _remoteAddress);\\n    event SetMinDstGas(uint16 _dstChainId, uint16 _type, uint _minDstGas);\\n\\n    constructor(address _endpoint) {\\n        lzEndpoint = ILayerZeroEndpoint(_endpoint);\\n    }\\n\\n    function lzReceive(\\n        uint16 _srcChainId,\\n        bytes calldata _srcAddress,\\n        uint64 _nonce,\\n        bytes calldata _payload\\n    ) public virtual override {\\n        // lzReceive must be called by the endpoint for security\\n        require(_msgSender() == address(lzEndpoint), \\\"LzApp: invalid endpoint caller\\\");\\n\\n        bytes memory trustedRemote = trustedRemoteLookup[_srcChainId];\\n        // if will still block the message pathway from (srcChainId, srcAddress). should not receive message from untrusted remote.\\n        require(\\n            _srcAddress.length == trustedRemote.length && trustedRemote.length > 0 && keccak256(_srcAddress) == keccak256(trustedRemote),\\n            \\\"LzApp: invalid source sending contract\\\"\\n        );\\n\\n        _blockingLzReceive(_srcChainId, _srcAddress, _nonce, _payload);\\n    }\\n\\n    // abstract function - the default behaviour of LayerZero is blocking. See: NonblockingLzApp if you dont need to enforce ordered messaging\\n    function _blockingLzReceive(\\n        uint16 _srcChainId,\\n        bytes memory _srcAddress,\\n        uint64 _nonce,\\n        bytes memory _payload\\n    ) internal virtual;\\n\\n    function _lzSend(\\n        uint16 _dstChainId,\\n        bytes memory _payload,\\n        address payable _refundAddress,\\n        address _zroPaymentAddress,\\n        bytes memory _adapterParams,\\n        uint _nativeFee\\n    ) internal virtual {\\n        bytes memory trustedRemote = trustedRemoteLookup[_dstChainId];\\n        require(trustedRemote.length != 0, \\\"LzApp: destination chain is not a trusted source\\\");\\n        _checkPayloadSize(_dstChainId, _payload.length);\\n        lzEndpoint.send{value: _nativeFee}(_dstChainId, trustedRemote, _payload, _refundAddress, _zroPaymentAddress, _adapterParams);\\n    }\\n\\n    function _checkGasLimit(\\n        uint16 _dstChainId,\\n        uint16 _type,\\n        bytes memory _adapterParams,\\n        uint _extraGas\\n    ) internal view virtual {\\n        uint providedGasLimit = _getGasLimit(_adapterParams);\\n        uint minGasLimit = minDstGasLookup[_dstChainId][_type];\\n        require(minGasLimit > 0, \\\"LzApp: minGasLimit not set\\\");\\n        require(providedGasLimit >= minGasLimit + _extraGas, \\\"LzApp: gas limit is too low\\\");\\n    }\\n\\n    function _getGasLimit(bytes memory _adapterParams) internal pure virtual returns (uint gasLimit) {\\n        require(_adapterParams.length >= 34, \\\"LzApp: invalid adapterParams\\\");\\n        assembly {\\n            gasLimit := mload(add(_adapterParams, 34))\\n        }\\n    }\\n\\n    function _checkPayloadSize(uint16 _dstChainId, uint _payloadSize) internal view virtual {\\n        uint payloadSizeLimit = payloadSizeLimitLookup[_dstChainId];\\n        if (payloadSizeLimit == 0) {\\n            // use default if not set\\n            payloadSizeLimit = DEFAULT_PAYLOAD_SIZE_LIMIT;\\n        }\\n        require(_payloadSize <= payloadSizeLimit, \\\"LzApp: payload size is too large\\\");\\n    }\\n\\n    //---------------------------UserApplication config----------------------------------------\\n    function getConfig(\\n        uint16 _version,\\n        uint16 _chainId,\\n        address,\\n        uint _configType\\n    ) external view returns (bytes memory) {\\n        return lzEndpoint.getConfig(_version, _chainId, address(this), _configType);\\n    }\\n\\n    // generic config for LayerZero user Application\\n    function setConfig(\\n        uint16 _version,\\n        uint16 _chainId,\\n        uint _configType,\\n        bytes calldata _config\\n    ) external override onlyOwner {\\n        lzEndpoint.setConfig(_version, _chainId, _configType, _config);\\n    }\\n\\n    function setSendVersion(uint16 _version) external override onlyOwner {\\n        lzEndpoint.setSendVersion(_version);\\n    }\\n\\n    function setReceiveVersion(uint16 _version) external override onlyOwner {\\n        lzEndpoint.setReceiveVersion(_version);\\n    }\\n\\n    function forceResumeReceive(uint16 _srcChainId, bytes calldata _srcAddress) external override onlyOwner {\\n        lzEndpoint.forceResumeReceive(_srcChainId, _srcAddress);\\n    }\\n\\n    // _path = abi.encodePacked(remoteAddress, localAddress)\\n    // this function set the trusted path for the cross-chain communication\\n    function setTrustedRemote(uint16 _remoteChainId, bytes calldata _path) external onlyOwner {\\n        trustedRemoteLookup[_remoteChainId] = _path;\\n        emit SetTrustedRemote(_remoteChainId, _path);\\n    }\\n\\n    function setTrustedRemoteAddress(uint16 _remoteChainId, bytes calldata _remoteAddress) external onlyOwner {\\n        trustedRemoteLookup[_remoteChainId] = abi.encodePacked(_remoteAddress, address(this));\\n        emit SetTrustedRemoteAddress(_remoteChainId, _remoteAddress);\\n    }\\n\\n    function getTrustedRemoteAddress(uint16 _remoteChainId) external view returns (bytes memory) {\\n        bytes memory path = trustedRemoteLookup[_remoteChainId];\\n        require(path.length != 0, \\\"LzApp: no trusted path record\\\");\\n        return path.slice(0, path.length - 20); // the last 20 bytes should be address(this)\\n    }\\n\\n    function setPrecrime(address _precrime) external onlyOwner {\\n        precrime = _precrime;\\n        emit SetPrecrime(_precrime);\\n    }\\n\\n    function setMinDstGas(\\n        uint16 _dstChainId,\\n        uint16 _packetType,\\n        uint _minGas\\n    ) external onlyOwner {\\n        minDstGasLookup[_dstChainId][_packetType] = _minGas;\\n        emit SetMinDstGas(_dstChainId, _packetType, _minGas);\\n    }\\n\\n    // if the size is 0, it means default size limit\\n    function setPayloadSizeLimit(uint16 _dstChainId, uint _size) external onlyOwner {\\n        payloadSizeLimitLookup[_dstChainId] = _size;\\n    }\\n\\n    //--------------------------- VIEW FUNCTION ----------------------------------------\\n    function isTrustedRemote(uint16 _srcChainId, bytes calldata _srcAddress) external view returns (bool) {\\n        bytes memory trustedSource = trustedRemoteLookup[_srcChainId];\\n        return keccak256(trustedSource) == keccak256(_srcAddress);\\n    }\\n}\\n\",\"keccak256\":\"0x309c994bdcf69ad63c6789694a28eb72a773e2d9db58fe572ab2b34a475972ce\",\"license\":\"MIT\"},\"@layerzerolabs/solidity-examples/contracts/lzApp/NonblockingLzApp.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./LzApp.sol\\\";\\nimport \\\"../libraries/ExcessivelySafeCall.sol\\\";\\n\\n/*\\n * the default LayerZero messaging behaviour is blocking, i.e. any failed message will block the channel\\n * this abstract class try-catch all fail messages and store locally for future retry. hence, non-blocking\\n * NOTE: if the srcAddress is not configured properly, it will still block the message pathway from (srcChainId, srcAddress)\\n */\\nabstract contract NonblockingLzApp is LzApp {\\n    using ExcessivelySafeCall for address;\\n\\n    constructor(address _endpoint) LzApp(_endpoint) {}\\n\\n    mapping(uint16 => mapping(bytes => mapping(uint64 => bytes32))) public failedMessages;\\n\\n    event MessageFailed(uint16 _srcChainId, bytes _srcAddress, uint64 _nonce, bytes _payload, bytes _reason);\\n    event RetryMessageSuccess(uint16 _srcChainId, bytes _srcAddress, uint64 _nonce, bytes32 _payloadHash);\\n\\n    // overriding the virtual function in LzReceiver\\n    function _blockingLzReceive(\\n        uint16 _srcChainId,\\n        bytes memory _srcAddress,\\n        uint64 _nonce,\\n        bytes memory _payload\\n    ) internal virtual override {\\n        (bool success, bytes memory reason) = address(this).excessivelySafeCall(\\n            gasleft(),\\n            150,\\n            abi.encodeWithSelector(this.nonblockingLzReceive.selector, _srcChainId, _srcAddress, _nonce, _payload)\\n        );\\n        if (!success) {\\n            _storeFailedMessage(_srcChainId, _srcAddress, _nonce, _payload, reason);\\n        }\\n    }\\n\\n    function _storeFailedMessage(\\n        uint16 _srcChainId,\\n        bytes memory _srcAddress,\\n        uint64 _nonce,\\n        bytes memory _payload,\\n        bytes memory _reason\\n    ) internal virtual {\\n        failedMessages[_srcChainId][_srcAddress][_nonce] = keccak256(_payload);\\n        emit MessageFailed(_srcChainId, _srcAddress, _nonce, _payload, _reason);\\n    }\\n\\n    function nonblockingLzReceive(\\n        uint16 _srcChainId,\\n        bytes calldata _srcAddress,\\n        uint64 _nonce,\\n        bytes calldata _payload\\n    ) public virtual {\\n        // only internal transaction\\n        require(_msgSender() == address(this), \\\"NonblockingLzApp: caller must be LzApp\\\");\\n        _nonblockingLzReceive(_srcChainId, _srcAddress, _nonce, _payload);\\n    }\\n\\n    //@notice override this function\\n    function _nonblockingLzReceive(\\n        uint16 _srcChainId,\\n        bytes memory _srcAddress,\\n        uint64 _nonce,\\n        bytes memory _payload\\n    ) internal virtual;\\n\\n    function retryMessage(\\n        uint16 _srcChainId,\\n        bytes calldata _srcAddress,\\n        uint64 _nonce,\\n        bytes calldata _payload\\n    ) public payable virtual {\\n        // assert there is message to retry\\n        bytes32 payloadHash = failedMessages[_srcChainId][_srcAddress][_nonce];\\n        require(payloadHash != bytes32(0), \\\"NonblockingLzApp: no stored message\\\");\\n        require(keccak256(_payload) == payloadHash, \\\"NonblockingLzApp: invalid payload\\\");\\n        // clear the stored message\\n        failedMessages[_srcChainId][_srcAddress][_nonce] = bytes32(0);\\n        // execute the message. revert if it fails again\\n        _nonblockingLzReceive(_srcChainId, _srcAddress, _nonce, _payload);\\n        emit RetryMessageSuccess(_srcChainId, _srcAddress, _nonce, payloadHash);\\n    }\\n}\\n\",\"keccak256\":\"0xf4bd9e0ecfa4eb18e7305eb66da44c8a4610c3d5afeaf6a3b44c4bf4b7169b40\",\"license\":\"MIT\"},\"@layerzerolabs/solidity-examples/contracts/lzApp/interfaces/ILayerZeroEndpoint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.5.0;\\n\\nimport \\\"./ILayerZeroUserApplicationConfig.sol\\\";\\n\\ninterface ILayerZeroEndpoint is ILayerZeroUserApplicationConfig {\\n    // @notice send a LayerZero message to the specified address at a LayerZero endpoint.\\n    // @param _dstChainId - the destination chain identifier\\n    // @param _destination - the address on destination chain (in bytes). address length/format may vary by chains\\n    // @param _payload - a custom bytes payload to send to the destination contract\\n    // @param _refundAddress - if the source transaction is cheaper than the amount of value passed, refund the additional amount to this address\\n    // @param _zroPaymentAddress - the address of the ZRO token holder who would pay for the transaction\\n    // @param _adapterParams - parameters for custom functionality. e.g. receive airdropped native gas from the relayer on destination\\n    function send(\\n        uint16 _dstChainId,\\n        bytes calldata _destination,\\n        bytes calldata _payload,\\n        address payable _refundAddress,\\n        address _zroPaymentAddress,\\n        bytes calldata _adapterParams\\n    ) external payable;\\n\\n    // @notice used by the messaging library to publish verified payload\\n    // @param _srcChainId - the source chain identifier\\n    // @param _srcAddress - the source contract (as bytes) at the source chain\\n    // @param _dstAddress - the address on destination chain\\n    // @param _nonce - the unbound message ordering nonce\\n    // @param _gasLimit - the gas limit for external contract execution\\n    // @param _payload - verified payload to send to the destination contract\\n    function receivePayload(\\n        uint16 _srcChainId,\\n        bytes calldata _srcAddress,\\n        address _dstAddress,\\n        uint64 _nonce,\\n        uint _gasLimit,\\n        bytes calldata _payload\\n    ) external;\\n\\n    // @notice get the inboundNonce of a lzApp from a source chain which could be EVM or non-EVM chain\\n    // @param _srcChainId - the source chain identifier\\n    // @param _srcAddress - the source chain contract address\\n    function getInboundNonce(uint16 _srcChainId, bytes calldata _srcAddress) external view returns (uint64);\\n\\n    // @notice get the outboundNonce from this source chain which, consequently, is always an EVM\\n    // @param _srcAddress - the source chain contract address\\n    function getOutboundNonce(uint16 _dstChainId, address _srcAddress) external view returns (uint64);\\n\\n    // @notice gets a quote in source native gas, for the amount that send() requires to pay for message delivery\\n    // @param _dstChainId - the destination chain identifier\\n    // @param _userApplication - the user app address on this EVM chain\\n    // @param _payload - the custom message to send over LayerZero\\n    // @param _payInZRO - if false, user app pays the protocol fee in native token\\n    // @param _adapterParam - parameters for the adapter service, e.g. send some dust native token to dstChain\\n    function estimateFees(\\n        uint16 _dstChainId,\\n        address _userApplication,\\n        bytes calldata _payload,\\n        bool _payInZRO,\\n        bytes calldata _adapterParam\\n    ) external view returns (uint nativeFee, uint zroFee);\\n\\n    // @notice get this Endpoint's immutable source identifier\\n    function getChainId() external view returns (uint16);\\n\\n    // @notice the interface to retry failed message on this Endpoint destination\\n    // @param _srcChainId - the source chain identifier\\n    // @param _srcAddress - the source chain contract address\\n    // @param _payload - the payload to be retried\\n    function retryPayload(\\n        uint16 _srcChainId,\\n        bytes calldata _srcAddress,\\n        bytes calldata _payload\\n    ) external;\\n\\n    // @notice query if any STORED payload (message blocking) at the endpoint.\\n    // @param _srcChainId - the source chain identifier\\n    // @param _srcAddress - the source chain contract address\\n    function hasStoredPayload(uint16 _srcChainId, bytes calldata _srcAddress) external view returns (bool);\\n\\n    // @notice query if the _libraryAddress is valid for sending msgs.\\n    // @param _userApplication - the user app address on this EVM chain\\n    function getSendLibraryAddress(address _userApplication) external view returns (address);\\n\\n    // @notice query if the _libraryAddress is valid for receiving msgs.\\n    // @param _userApplication - the user app address on this EVM chain\\n    function getReceiveLibraryAddress(address _userApplication) external view returns (address);\\n\\n    // @notice query if the non-reentrancy guard for send() is on\\n    // @return true if the guard is on. false otherwise\\n    function isSendingPayload() external view returns (bool);\\n\\n    // @notice query if the non-reentrancy guard for receive() is on\\n    // @return true if the guard is on. false otherwise\\n    function isReceivingPayload() external view returns (bool);\\n\\n    // @notice get the configuration of the LayerZero messaging library of the specified version\\n    // @param _version - messaging library version\\n    // @param _chainId - the chainId for the pending config change\\n    // @param _userApplication - the contract address of the user application\\n    // @param _configType - type of configuration. every messaging library has its own convention.\\n    function getConfig(\\n        uint16 _version,\\n        uint16 _chainId,\\n        address _userApplication,\\n        uint _configType\\n    ) external view returns (bytes memory);\\n\\n    // @notice get the send() LayerZero messaging library version\\n    // @param _userApplication - the contract address of the user application\\n    function getSendVersion(address _userApplication) external view returns (uint16);\\n\\n    // @notice get the lzReceive() LayerZero messaging library version\\n    // @param _userApplication - the contract address of the user application\\n    function getReceiveVersion(address _userApplication) external view returns (uint16);\\n}\\n\",\"keccak256\":\"0xab7fcacc672251c850f00c0abd4100df9afcc4ad70b8d331a2fd4cb07acab9f4\",\"license\":\"MIT\"},\"@layerzerolabs/solidity-examples/contracts/lzApp/interfaces/ILayerZeroReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.5.0;\\n\\ninterface ILayerZeroReceiver {\\n    // @notice LayerZero endpoint will invoke this function to deliver the message on the destination\\n    // @param _srcChainId - the source endpoint identifier\\n    // @param _srcAddress - the source sending contract address from the source chain\\n    // @param _nonce - the ordered message nonce\\n    // @param _payload - the signed payload is the UA bytes has encoded to be sent\\n    function lzReceive(\\n        uint16 _srcChainId,\\n        bytes calldata _srcAddress,\\n        uint64 _nonce,\\n        bytes calldata _payload\\n    ) external;\\n}\\n\",\"keccak256\":\"0xac1966c1229bd4dc36b6c69eeb94a537bd9aa2198d7623b9ba7f8f7dbe79bb4c\",\"license\":\"MIT\"},\"@layerzerolabs/solidity-examples/contracts/lzApp/interfaces/ILayerZeroUserApplicationConfig.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.5.0;\\n\\ninterface ILayerZeroUserApplicationConfig {\\n    // @notice set the configuration of the LayerZero messaging library of the specified version\\n    // @param _version - messaging library version\\n    // @param _chainId - the chainId for the pending config change\\n    // @param _configType - type of configuration. every messaging library has its own convention.\\n    // @param _config - configuration in the bytes. can encode arbitrary content.\\n    function setConfig(\\n        uint16 _version,\\n        uint16 _chainId,\\n        uint _configType,\\n        bytes calldata _config\\n    ) external;\\n\\n    // @notice set the send() LayerZero messaging library version to _version\\n    // @param _version - new messaging library version\\n    function setSendVersion(uint16 _version) external;\\n\\n    // @notice set the lzReceive() LayerZero messaging library version to _version\\n    // @param _version - new messaging library version\\n    function setReceiveVersion(uint16 _version) external;\\n\\n    // @notice Only when the UA needs to resume the message flow in blocking mode and clear the stored payload\\n    // @param _srcChainId - the chainId of the source chain\\n    // @param _srcAddress - the contract address of the source contract at the source chain\\n    function forceResumeReceive(uint16 _srcChainId, bytes calldata _srcAddress) external;\\n}\\n\",\"keccak256\":\"0xb4df93aeb0fb46373a4fb728ad2603edc8b9a1577eee8d801768dc115bf96498\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    constructor() {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions anymore. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby removing any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n}\\n\",\"keccak256\":\"0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673\",\"license\":\"MIT\"},\"@openzeppelin/contracts/security/Pausable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which allows children to implement an emergency stop\\n * mechanism that can be triggered by an authorized account.\\n *\\n * This module is used through inheritance. It will make available the\\n * modifiers `whenNotPaused` and `whenPaused`, which can be applied to\\n * the functions of your contract. Note that they will not be pausable by\\n * simply including this module, only once the modifiers are put in place.\\n */\\nabstract contract Pausable is Context {\\n    /**\\n     * @dev Emitted when the pause is triggered by `account`.\\n     */\\n    event Paused(address account);\\n\\n    /**\\n     * @dev Emitted when the pause is lifted by `account`.\\n     */\\n    event Unpaused(address account);\\n\\n    bool private _paused;\\n\\n    /**\\n     * @dev Initializes the contract in unpaused state.\\n     */\\n    constructor() {\\n        _paused = false;\\n    }\\n\\n    /**\\n     * @dev Modifier to make a function callable only when the contract is not paused.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must not be paused.\\n     */\\n    modifier whenNotPaused() {\\n        _requireNotPaused();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Modifier to make a function callable only when the contract is paused.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must be paused.\\n     */\\n    modifier whenPaused() {\\n        _requirePaused();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns true if the contract is paused, and false otherwise.\\n     */\\n    function paused() public view virtual returns (bool) {\\n        return _paused;\\n    }\\n\\n    /**\\n     * @dev Throws if the contract is paused.\\n     */\\n    function _requireNotPaused() internal view virtual {\\n        require(!paused(), \\\"Pausable: paused\\\");\\n    }\\n\\n    /**\\n     * @dev Throws if the contract is not paused.\\n     */\\n    function _requirePaused() internal view virtual {\\n        require(paused(), \\\"Pausable: not paused\\\");\\n    }\\n\\n    /**\\n     * @dev Triggers stopped state.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must not be paused.\\n     */\\n    function _pause() internal virtual whenNotPaused {\\n        _paused = true;\\n        emit Paused(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Returns to normal state.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must be paused.\\n     */\\n    function _unpause() internal virtual whenPaused {\\n        _paused = false;\\n        emit Unpaused(_msgSender());\\n    }\\n}\\n\",\"keccak256\":\"0x0849d93b16c9940beb286a7864ed02724b248b93e0d80ef6355af5ef15c64773\",\"license\":\"MIT\"},\"@openzeppelin/contracts/security/ReentrancyGuard.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Contract module that helps prevent reentrant calls to a function.\\n *\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\n * available, which can be applied to functions to make sure there are no nested\\n * (reentrant) calls to them.\\n *\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\n * `nonReentrant` may not call one another. This can be worked around by making\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\n * points to them.\\n *\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\n * to protect against it, check out our blog post\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\n */\\nabstract contract ReentrancyGuard {\\n    // Booleans are more expensive than uint256 or any type that takes up a full\\n    // word because each write operation emits an extra SLOAD to first read the\\n    // slot's contents, replace the bits taken up by the boolean, and then write\\n    // back. This is the compiler's defense against contract upgrades and\\n    // pointer aliasing, and it cannot be disabled.\\n\\n    // The values being non-zero value makes deployment a bit more expensive,\\n    // but in exchange the refund on every call to nonReentrant will be lower in\\n    // amount. Since refunds are capped to a percentage of the total\\n    // transaction's gas, it is best to keep them low in cases like this one, to\\n    // increase the likelihood of the full refund coming into effect.\\n    uint256 private constant _NOT_ENTERED = 1;\\n    uint256 private constant _ENTERED = 2;\\n\\n    uint256 private _status;\\n\\n    constructor() {\\n        _status = _NOT_ENTERED;\\n    }\\n\\n    /**\\n     * @dev Prevents a contract from calling itself, directly or indirectly.\\n     * Calling a `nonReentrant` function from another `nonReentrant`\\n     * function is not supported. It is possible to prevent this from happening\\n     * by making the `nonReentrant` function external, and making it call a\\n     * `private` function that does the actual work.\\n     */\\n    modifier nonReentrant() {\\n        _nonReentrantBefore();\\n        _;\\n        _nonReentrantAfter();\\n    }\\n\\n    function _nonReentrantBefore() private {\\n        // On the first call to nonReentrant, _status will be _NOT_ENTERED\\n        require(_status != _ENTERED, \\\"ReentrancyGuard: reentrant call\\\");\\n\\n        // Any calls to nonReentrant after this point will fail\\n        _status = _ENTERED;\\n    }\\n\\n    function _nonReentrantAfter() private {\\n        // By storing the original value once again, a refund is triggered (see\\n        // https://eips.ethereum.org/EIPS/eip-2200)\\n        _status = _NOT_ENTERED;\\n    }\\n}\\n\",\"keccak256\":\"0x190dd6f8d592b7e4e930feb7f4313aeb8e1c4ad3154c27ce1cf6a512fc30d8cc\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"@venusprotocol/solidity-utilities/contracts/validators.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\n/// @notice Thrown if the supplied address is a zero address where it is not allowed\\nerror ZeroAddressNotAllowed();\\n\\n/// @notice Thrown if the supplied value is 0 where it is not allowed\\nerror ZeroValueNotAllowed();\\n\\n/// @notice Checks if the provided address is nonzero, reverts otherwise\\n/// @param address_ Address to check\\n/// @custom:error ZeroAddressNotAllowed is thrown if the provided address is a zero address\\nfunction ensureNonzeroAddress(address address_) pure {\\n    if (address_ == address(0)) {\\n        revert ZeroAddressNotAllowed();\\n    }\\n}\\n\\n/// @notice Checks if the provided value is nonzero, reverts otherwise\\n/// @param value_ Value to check\\n/// @custom:error ZeroValueNotAllowed is thrown if the provided value is 0\\nfunction ensureNonzeroValue(uint256 value_) pure {\\n    if (value_ == 0) {\\n        revert ZeroValueNotAllowed();\\n    }\\n}\\n\",\"keccak256\":\"0xdb88e14d50dd21889ca3329d755673d022c47e8da005b6a545c7f69c2c4b7b86\",\"license\":\"BSD-3-Clause\"},\"contracts/Cross-chain/BaseOmnichainControllerDest.sol\":{\"content\":\"//  SPDX-License-Identifier: BSD-3-Clause\\n\\npragma solidity 0.8.25;\\n\\nimport { NonblockingLzApp } from \\\"@layerzerolabs/solidity-examples/contracts/lzApp/NonblockingLzApp.sol\\\";\\nimport { Pausable } from \\\"@openzeppelin/contracts/security/Pausable.sol\\\";\\nimport { ensureNonzeroAddress } from \\\"@venusprotocol/solidity-utilities/contracts/validators.sol\\\";\\n\\n/**\\n * @title BaseOmnichainControllerDest\\n * @author Venus\\n * @dev This contract is the base for the Omnichain controller destination contract\\n * It provides functionality related to daily command limits and pausability\\n * @custom:security-contact https://github.com/VenusProtocol/governance-contracts#discussion\\n */\\n\\nabstract contract BaseOmnichainControllerDest is NonblockingLzApp, Pausable {\\n    /**\\n     * @notice Maximum daily limit for receiving commands from Binance chain\\n     */\\n    uint256 public maxDailyReceiveLimit;\\n\\n    /**\\n     * @notice Total received commands within the last 24-hour window from Binance chain\\n     */\\n    uint256 public last24HourCommandsReceived;\\n\\n    /**\\n     * @notice Timestamp when the last 24-hour window started from Binance chain\\n     */\\n    uint256 public last24HourReceiveWindowStart;\\n\\n    /**\\n     * @notice Emitted when the maximum daily limit for receiving command from Binance chain is modified\\n     */\\n    event SetMaxDailyReceiveLimit(uint256 oldMaxLimit, uint256 newMaxLimit);\\n\\n    constructor(address endpoint_) NonblockingLzApp(endpoint_) {\\n        ensureNonzeroAddress(endpoint_);\\n    }\\n\\n    /**\\n     * @notice Sets the maximum daily limit for receiving commands\\n     * @param limit_ Number of commands\\n     * @custom:access Only Owner\\n     * @custom:event Emits SetMaxDailyReceiveLimit with old and new limit\\n     */\\n    function setMaxDailyReceiveLimit(uint256 limit_) external onlyOwner {\\n        emit SetMaxDailyReceiveLimit(maxDailyReceiveLimit, limit_);\\n        maxDailyReceiveLimit = limit_;\\n    }\\n\\n    /**\\n     * @notice Triggers the paused state of the controller\\n     * @custom:access Only owner\\n     */\\n    function pause() external onlyOwner {\\n        _pause();\\n    }\\n\\n    /**\\n     * @notice Triggers the resume state of the controller\\n     * @custom:access Only owner\\n     */\\n    function unpause() external onlyOwner {\\n        _unpause();\\n    }\\n\\n    /**\\n     * @notice Empty implementation of renounce ownership to avoid any mishappening\\n     */\\n    function renounceOwnership() public override {}\\n\\n    /**\\n     * @notice Check eligibility to receive commands\\n     * @param noOfCommands_ Number of commands to be received\\n     */\\n    function _isEligibleToReceive(uint256 noOfCommands_) internal {\\n        uint256 currentBlockTimestamp = block.timestamp;\\n\\n        // Load values for the 24-hour window checks for receiving\\n        uint256 receivedInWindow = last24HourCommandsReceived;\\n\\n        // Check if the time window has changed (more than 24 hours have passed)\\n        if (currentBlockTimestamp - last24HourReceiveWindowStart > 1 days) {\\n            receivedInWindow = noOfCommands_;\\n            last24HourReceiveWindowStart = currentBlockTimestamp;\\n        } else {\\n            receivedInWindow += noOfCommands_;\\n        }\\n\\n        // Revert if the received amount exceeds the daily limit\\n        require(receivedInWindow <= maxDailyReceiveLimit, \\\"Daily Transaction Limit Exceeded\\\");\\n\\n        // Update the received amount for the 24-hour window\\n        last24HourCommandsReceived = receivedInWindow;\\n    }\\n}\\n\",\"keccak256\":\"0x5ccc63f55acd7c37e6e3ce36d034f82173bc8daf257cb859e08238b860cf3723\",\"license\":\"BSD-3-Clause\"},\"contracts/Cross-chain/OmnichainGovernanceExecutor.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.25;\\n\\nimport { ReentrancyGuard } from \\\"@openzeppelin/contracts/security/ReentrancyGuard.sol\\\";\\nimport { BytesLib } from \\\"@layerzerolabs/solidity-examples/contracts/libraries/BytesLib.sol\\\";\\nimport { ExcessivelySafeCall } from \\\"@layerzerolabs/solidity-examples/contracts/libraries/ExcessivelySafeCall.sol\\\";\\nimport { ensureNonzeroAddress } from \\\"@venusprotocol/solidity-utilities/contracts/validators.sol\\\";\\nimport { BaseOmnichainControllerDest } from \\\"./BaseOmnichainControllerDest.sol\\\";\\nimport { ITimelock } from \\\"./interfaces/ITimelock.sol\\\";\\n\\n/**\\n * @title OmnichainGovernanceExecutor\\n * @notice Executes the proposal transactions sent from the main chain\\n * @dev The owner of this contract controls LayerZero configuration. When used in production the owner will be OmnichainExecutor\\n * This implementation is non-blocking, meaning the failed messages will not block the future messages from the source.\\n * For the blocking behavior, derive the contract from LzApp.\\n * @custom:security-contact https://github.com/VenusProtocol/governance-contracts#discussion\\n */\\ncontract OmnichainGovernanceExecutor is ReentrancyGuard, BaseOmnichainControllerDest {\\n    using BytesLib for bytes;\\n    using ExcessivelySafeCall for address;\\n\\n    enum ProposalType {\\n        NORMAL,\\n        FASTTRACK,\\n        CRITICAL\\n    }\\n\\n    struct Proposal {\\n        /** Unique id for looking up a proposal */\\n        uint256 id;\\n        /** The timestamp that the proposal will be available for execution, set once the vote succeeds */\\n        uint256 eta;\\n        /** The ordered list of target addresses for calls to be made */\\n        address[] targets;\\n        /** The ordered list of values (i.e. msg.value) to be passed to the calls to be made */\\n        uint256[] values;\\n        /** The ordered list of function signatures to be called */\\n        string[] signatures;\\n        /** The ordered list of calldata to be passed to each call */\\n        bytes[] calldatas;\\n        /** Flag marking whether the proposal has been canceled */\\n        bool canceled;\\n        /** Flag marking whether the proposal has been executed */\\n        bool executed;\\n        /** The type of the proposal */\\n        uint8 proposalType;\\n    }\\n    /*\\n     * @notice Possible states that a proposal may be in\\n     */\\n    enum ProposalState {\\n        Canceled,\\n        Queued,\\n        Executed\\n    }\\n\\n    /**\\n     * @notice A privileged role that can cancel any proposal\\n     */\\n    address public guardian;\\n\\n    /**\\n     * @notice Stores BNB chain layerzero endpoint id\\n     */\\n    uint16 public srcChainId;\\n\\n    /**\\n     * @notice Last proposal count received\\n     */\\n    uint256 public lastProposalReceived;\\n\\n    /**\\n     * @notice The official record of all proposals ever proposed\\n     */\\n    mapping(uint256 => Proposal) public proposals;\\n\\n    /**\\n     * @notice Mapping containing Timelock addresses for each proposal type\\n     */\\n    mapping(uint256 => ITimelock) public proposalTimelocks;\\n\\n    /**\\n     * @notice Represents queue state of proposal\\n     */\\n    mapping(uint256 => bool) public queued;\\n\\n    /**\\n     * @notice Emitted when proposal is received\\n     */\\n    event ProposalReceived(\\n        uint256 indexed proposalId,\\n        address[] targets,\\n        uint256[] values,\\n        string[] signatures,\\n        bytes[] calldatas,\\n        uint8 proposalType\\n    );\\n\\n    /**\\n     * @notice Emitted when proposal is queued\\n     */\\n    event ProposalQueued(uint256 indexed id, uint256 eta);\\n\\n    /**\\n     * Emitted when proposal executed\\n     */\\n    event ProposalExecuted(uint256 indexed id);\\n\\n    /**\\n     * @notice Emitted when proposal failed\\n     */\\n    event ReceivePayloadFailed(uint16 indexed srcChainId, bytes indexed srcAddress, uint64 nonce, bytes reason);\\n\\n    /**\\n     * @notice Emitted when proposal is canceled\\n     */\\n    event ProposalCanceled(uint256 indexed id);\\n\\n    /**\\n     * @notice Emitted when timelock added\\n     */\\n    event TimelockAdded(uint8 routeType, address indexed oldTimelock, address indexed newTimelock);\\n\\n    /**\\n     * @notice Emitted when source layerzero endpoint id is updated\\n     */\\n    event SetSrcChainId(uint16 indexed oldSrcChainId, uint16 indexed newSrcChainId);\\n\\n    /**\\n     * @notice Emitted when new guardian address is set\\n     */\\n    event NewGuardian(address indexed oldGuardian, address indexed newGuardian);\\n\\n    /**\\n     * @notice Emitted when pending admin of Timelock is updated\\n     */\\n    event SetTimelockPendingAdmin(address, uint8);\\n\\n    /**\\n     * @notice Thrown when proposal ID is invalid\\n     */\\n    error InvalidProposalId();\\n\\n    constructor(address endpoint_, address guardian_, uint16 srcChainId_) BaseOmnichainControllerDest(endpoint_) {\\n        ensureNonzeroAddress(guardian_);\\n        guardian = guardian_;\\n        srcChainId = srcChainId_;\\n    }\\n\\n    /**\\n     * @notice Update source layerzero endpoint id\\n     * @param srcChainId_ The new source chain id to be set\\n     * @custom:event Emit SetSrcChainId with old and new source id\\n     * @custom:access Only owner\\n     */\\n    function setSrcChainId(uint16 srcChainId_) external onlyOwner {\\n        emit SetSrcChainId(srcChainId, srcChainId_);\\n        srcChainId = srcChainId_;\\n    }\\n\\n    /**\\n     * @notice Sets the new executor guardian\\n     * @param newGuardian The address of the new guardian\\n     * @custom:access Must be call by guardian or owner\\n     * @custom:event Emit NewGuardian with old and new guardian address\\n     */\\n    function setGuardian(address newGuardian) external {\\n        require(\\n            msg.sender == guardian || msg.sender == owner(),\\n            \\\"OmnichainGovernanceExecutor::setGuardian: owner or guardian only\\\"\\n        );\\n        ensureNonzeroAddress(newGuardian);\\n        emit NewGuardian(guardian, newGuardian);\\n        guardian = newGuardian;\\n    }\\n\\n    /**\\n     * @notice Add timelocks to the ProposalTimelocks mapping\\n     * @param timelocks_ Array of addresses of all 3 timelocks\\n     * @custom:access Only owner\\n     * @custom:event Emits TimelockAdded with old and new timelock and route type\\n     */\\n    function addTimelocks(ITimelock[] memory timelocks_) external onlyOwner {\\n        uint8 length = uint8(type(ProposalType).max) + 1;\\n        require(\\n            timelocks_.length == length,\\n            \\\"OmnichainGovernanceExecutor::addTimelocks:number of timelocks should match the number of governance routes\\\"\\n        );\\n        for (uint8 i; i < length; ++i) {\\n            ensureNonzeroAddress(address(timelocks_[i]));\\n            emit TimelockAdded(i, address(proposalTimelocks[i]), address(timelocks_[i]));\\n            proposalTimelocks[i] = timelocks_[i];\\n        }\\n    }\\n\\n    /**\\n     * @notice Executes a queued proposal if eta has passed\\n     * @param proposalId_ Id of proposal that is to be executed\\n     * @custom:event Emits ProposalExecuted with proposal id of executed proposal\\n     */\\n    function execute(uint256 proposalId_) external nonReentrant {\\n        require(\\n            state(proposalId_) == ProposalState.Queued,\\n            \\\"OmnichainGovernanceExecutor::execute: proposal can only be executed if it is queued\\\"\\n        );\\n\\n        Proposal storage proposal = proposals[proposalId_];\\n        proposal.executed = true;\\n        ITimelock timelock = proposalTimelocks[proposal.proposalType];\\n        uint256 eta = proposal.eta;\\n        uint256 length = proposal.targets.length;\\n\\n        emit ProposalExecuted(proposalId_);\\n\\n        for (uint256 i; i < length; ++i) {\\n            timelock.executeTransaction(\\n                proposal.targets[i],\\n                proposal.values[i],\\n                proposal.signatures[i],\\n                proposal.calldatas[i],\\n                eta\\n            );\\n        }\\n        delete queued[proposalId_];\\n    }\\n\\n    /**\\n     * @notice Cancels a proposal only if sender is the guardian and proposal is not executed\\n     * @param proposalId_ Id of proposal that is to be canceled\\n     * @custom:access Sender must be the guardian\\n     * @custom:event Emits ProposalCanceled with proposal id of the canceled proposal\\n     */\\n    function cancel(uint256 proposalId_) external {\\n        require(\\n            state(proposalId_) == ProposalState.Queued,\\n            \\\"OmnichainGovernanceExecutor::cancel: proposal should be queued and not executed\\\"\\n        );\\n        Proposal storage proposal = proposals[proposalId_];\\n        require(msg.sender == guardian, \\\"OmnichainGovernanceExecutor::cancel: sender must be guardian\\\");\\n\\n        proposal.canceled = true;\\n        ITimelock timelock = proposalTimelocks[proposal.proposalType];\\n        uint256 eta = proposal.eta;\\n        uint256 length = proposal.targets.length;\\n\\n        emit ProposalCanceled(proposalId_);\\n\\n        for (uint256 i; i < length; ++i) {\\n            timelock.cancelTransaction(\\n                proposal.targets[i],\\n                proposal.values[i],\\n                proposal.signatures[i],\\n                proposal.calldatas[i],\\n                eta\\n            );\\n        }\\n        delete queued[proposalId_];\\n    }\\n\\n    /**\\n     * @notice Sets the new pending admin of the Timelock\\n     * @param pendingAdmin_ Address of new pending admin\\n     * @param proposalType_ Type of proposal\\n     * @custom:access Only owner\\n     * @custom:event Emits SetTimelockPendingAdmin with new pending admin and proposal type\\n     */\\n    function setTimelockPendingAdmin(address pendingAdmin_, uint8 proposalType_) external onlyOwner {\\n        uint8 proposalTypeLength = uint8(type(ProposalType).max) + 1;\\n        require(\\n            proposalType_ < proposalTypeLength,\\n            \\\"OmnichainGovernanceExecutor::setTimelockPendingAdmin: invalid proposal type\\\"\\n        );\\n\\n        proposalTimelocks[proposalType_].setPendingAdmin(pendingAdmin_);\\n        emit SetTimelockPendingAdmin(pendingAdmin_, proposalType_);\\n    }\\n\\n    /**\\n     * @notice Resends a previously failed message\\n     * @param srcChainId_ Source chain Id\\n     * @param srcAddress_ Source address => local app address + remote app address\\n     * @param nonce_ Nonce to identify failed message\\n     * @param payload_ The payload of the message to be retried\\n     * @custom:access Only owner\\n     */\\n    function retryMessage(\\n        uint16 srcChainId_,\\n        bytes calldata srcAddress_,\\n        uint64 nonce_,\\n        bytes calldata payload_\\n    ) public payable override onlyOwner nonReentrant {\\n        require(\\n            keccak256(trustedRemoteLookup[srcChainId_]) == keccak256(srcAddress_),\\n            \\\"OmnichainGovernanceExecutor::retryMessage: not a trusted remote\\\"\\n        );\\n        super.retryMessage(srcChainId_, srcAddress_, nonce_, payload_);\\n    }\\n\\n    /**\\n     * @notice Gets the state of a proposal\\n     * @param proposalId_ The id of the proposal\\n     * @return Proposal state\\n     */\\n    function state(uint256 proposalId_) public view returns (ProposalState) {\\n        Proposal storage proposal = proposals[proposalId_];\\n        if (proposal.canceled) {\\n            return ProposalState.Canceled;\\n        } else if (proposal.executed) {\\n            return ProposalState.Executed;\\n        } else if (queued[proposalId_]) {\\n            // queued only when proposal is received\\n            return ProposalState.Queued;\\n        } else {\\n            revert InvalidProposalId();\\n        }\\n    }\\n\\n    /**\\n     * @notice Process blocking LayerZero receive request\\n     * @param srcChainId_ Source chain Id\\n     * @param srcAddress_ Source address from which payload is received\\n     * @param nonce_ Nonce associated with the payload to prevent replay attacks\\n     * @param payload_ Encoded payload containing proposal information\\n     * @custom:event Emit ReceivePayloadFailed if call fails\\n     */\\n    function _blockingLzReceive(\\n        uint16 srcChainId_,\\n        bytes memory srcAddress_,\\n        uint64 nonce_,\\n        bytes memory payload_\\n    ) internal virtual override {\\n        require(srcChainId_ == srcChainId, \\\"OmnichainGovernanceExecutor::_blockingLzReceive: invalid source chain id\\\");\\n        bytes32 hashedPayload = keccak256(payload_);\\n        bytes memory callData = abi.encodeCall(this.nonblockingLzReceive, (srcChainId_, srcAddress_, nonce_, payload_));\\n\\n        (bool success, bytes memory reason) = address(this).excessivelySafeCall(gasleft() - 30000, 150, callData);\\n        // try-catch all errors/exceptions\\n        if (!success) {\\n            failedMessages[srcChainId_][srcAddress_][nonce_] = hashedPayload;\\n            emit ReceivePayloadFailed(srcChainId_, srcAddress_, nonce_, reason); // Retrieve payload from the src side tx if needed to clear\\n        }\\n    }\\n\\n    /**\\n     * @notice Process non blocking LayerZero receive request\\n     * @param payload_ Encoded payload containing proposal information\\n     * @custom:event Emit ProposalReceived\\n     */\\n    function _nonblockingLzReceive(\\n        uint16,\\n        bytes memory,\\n        uint64,\\n        bytes memory payload_\\n    ) internal virtual override whenNotPaused {\\n        (bytes memory payload, uint256 pId) = abi.decode(payload_, (bytes, uint256));\\n        (\\n            address[] memory targets,\\n            uint256[] memory values,\\n            string[] memory signatures,\\n            bytes[] memory calldatas,\\n            uint8 pType\\n        ) = abi.decode(payload, (address[], uint256[], string[], bytes[], uint8));\\n        require(proposals[pId].id == 0, \\\"OmnichainGovernanceExecutor::_nonblockingLzReceive: duplicate proposal\\\");\\n        require(\\n            targets.length == values.length &&\\n                targets.length == signatures.length &&\\n                targets.length == calldatas.length,\\n            \\\"OmnichainGovernanceExecutor::_nonblockingLzReceive: proposal function information arity mismatch\\\"\\n        );\\n        require(\\n            pType < uint8(type(ProposalType).max) + 1,\\n            \\\"OmnichainGovernanceExecutor::_nonblockingLzReceive: invalid proposal type\\\"\\n        );\\n        _isEligibleToReceive(targets.length);\\n\\n        Proposal memory newProposal = Proposal({\\n            id: pId,\\n            eta: 0,\\n            targets: targets,\\n            values: values,\\n            signatures: signatures,\\n            calldatas: calldatas,\\n            canceled: false,\\n            executed: false,\\n            proposalType: pType\\n        });\\n\\n        proposals[pId] = newProposal;\\n        lastProposalReceived = pId;\\n\\n        emit ProposalReceived(newProposal.id, targets, values, signatures, calldatas, pType);\\n        _queue(pId);\\n    }\\n\\n    /**\\n     * @notice Queue proposal for execution\\n     * @param proposalId_ Proposal to be queued\\n     * @custom:event Emit ProposalQueued with proposal id and eta\\n     */\\n    function _queue(uint256 proposalId_) internal {\\n        Proposal storage proposal = proposals[proposalId_];\\n        uint256 eta = block.timestamp + proposalTimelocks[proposal.proposalType].delay();\\n\\n        proposal.eta = eta;\\n        queued[proposalId_] = true;\\n        uint8 proposalType = proposal.proposalType;\\n        uint256 length = proposal.targets.length;\\n        emit ProposalQueued(proposalId_, eta);\\n\\n        for (uint256 i; i < length; ++i) {\\n            _queueOrRevertInternal(\\n                proposal.targets[i],\\n                proposal.values[i],\\n                proposal.signatures[i],\\n                proposal.calldatas[i],\\n                eta,\\n                proposalType\\n            );\\n        }\\n    }\\n\\n    /**\\n     * @notice Check for unique proposal\\n     * @param target_ Address of the contract with the method to be called\\n     * @param value_ Native token amount sent with the transaction\\n     * @param signature_ Signature of the function to be called\\n     * @param data_ Arguments to be passed to the function when called\\n     * @param eta_ Timestamp after which the transaction can be executed\\n     * @param proposalType_ Type of proposal\\n     */\\n    function _queueOrRevertInternal(\\n        address target_,\\n        uint256 value_,\\n        string memory signature_,\\n        bytes memory data_,\\n        uint256 eta_,\\n        uint8 proposalType_\\n    ) internal {\\n        require(\\n            !proposalTimelocks[proposalType_].queuedTransactions(\\n                keccak256(abi.encode(target_, value_, signature_, data_, eta_))\\n            ),\\n            \\\"OmnichainGovernanceExecutor::queueOrRevertInternal: identical proposal action already queued at eta\\\"\\n        );\\n\\n        proposalTimelocks[proposalType_].queueTransaction(target_, value_, signature_, data_, eta_);\\n    }\\n}\\n\",\"keccak256\":\"0x6b3858ea6ac8248a7189910ed6f8af22cfa2299bcec8d015940ddae3406b3adb\",\"license\":\"MIT\"},\"contracts/Cross-chain/interfaces/ITimelock.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\n/**\\n * @title ITimelock\\n * @author Venus\\n * @dev Interface for Timelock contract\\n * @custom:security-contact https://github.com/VenusProtocol/governance-contracts#discussion\\n */\\ninterface ITimelock {\\n    /**\\n     * @notice Delay period for the transaction queue\\n     */\\n    function delay() external view returns (uint256);\\n\\n    /**\\n     * @notice Required period to execute a proposal transaction\\n     */\\n    function GRACE_PERIOD() external view returns (uint256);\\n\\n    /**\\n     * @notice Method for accepting a proposed admin\\n     */\\n    function acceptAdmin() external;\\n\\n    /**\\n     * @notice Method to propose a new admin authorized to call timelock functions. This should be the Governor Contract.\\n     */\\n    function setPendingAdmin(address pendingAdmin) external;\\n\\n    /**\\n     * @notice Show mapping of queued transactions\\n     * @param hash Transaction hash\\n     */\\n    function queuedTransactions(bytes32 hash) external view returns (bool);\\n\\n    /**\\n     * @notice Called for each action when queuing a proposal\\n     * @param target Address of the contract with the method to be called\\n     * @param value Native token amount sent with the transaction\\n     * @param signature signature of the function to be called\\n     * @param data Arguments to be passed to the function when called\\n     * @param eta Timestamp after which the transaction can be executed\\n     * @return Hash of the queued transaction\\n     */\\n    function queueTransaction(\\n        address target,\\n        uint256 value,\\n        string calldata signature,\\n        bytes calldata data,\\n        uint256 eta\\n    ) external returns (bytes32);\\n\\n    /**\\n     * @notice Called to cancel a queued transaction\\n     * @param target Address of the contract with the method to be called\\n     * @param value Native token amount sent with the transaction\\n     * @param signature signature of the function to be called\\n     * @param data Arguments to be passed to the function when called\\n     * @param eta Timestamp after which the transaction can be executed\\n     */\\n    function cancelTransaction(\\n        address target,\\n        uint256 value,\\n        string calldata signature,\\n        bytes calldata data,\\n        uint256 eta\\n    ) external;\\n\\n    /**\\n     * @notice Called to execute a queued transaction\\n     * @param target Address of the contract with the method to be called\\n     * @param value Native token amount sent with the transaction\\n     * @param signature signature of the function to be called\\n     * @param data Arguments to be passed to the function when called\\n     * @param eta Timestamp after which the transaction can be executed\\n     * @return Result of function call\\n     */\\n    function executeTransaction(\\n        address target,\\n        uint256 value,\\n        string calldata signature,\\n        bytes calldata data,\\n        uint256 eta\\n    ) external payable returns (bytes memory);\\n}\\n\",\"keccak256\":\"0x7e05998e5b36a78e6b7933e446c0e0a634ba7fdaae1eb8ba6d4affe12f3a2712\",\"license\":\"BSD-3-Clause\"}},\"version\":1}",
  "bytecode": "0x60a060405234801561001057600080fd5b50604051614aa5380380614aa583398101604081905261002f91610136565b60016000558280806100403361009e565b6001600160a01b0316608052506007805460ff19169055610060816100f0565b5061006a826100f0565b600b805461ffff909216600160a01b026001600160b01b03199092166001600160a01b039093169290921717905550610184565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038116610117576040516342bcdf7f60e11b815260040160405180910390fd5b50565b80516001600160a01b038116811461013157600080fd5b919050565b60008060006060848603121561014b57600080fd5b6101548461011a565b92506101626020850161011a565b9150604084015161ffff8116811461017957600080fd5b809150509250925092565b6080516148dc6101c960003960008181610804015281816109d501528181610c6101528181610d2f01528181611232015281816118c70152611f7901526148dc6000f3fe6080604052600436106102f15760003560e01c8063876919e81161018f578063c4461834116100e1578063ed66039b1161008a578063f4fcfcca11610064578063f4fcfcca14610972578063f5ecbdbc14610992578063fe0d94c1146109b257600080fd5b8063ed66039b146108ef578063ee9799ee1461090f578063f2fde38b1461095257600080fd5b8063d1deba1f116100bb578063d1deba1f1461089c578063df2a5b3b146108af578063eb8d72b7146108cf57600080fd5b8063c446183414610846578063c8b42e5b1461085c578063cbed8b9c1461087c57600080fd5b8063950c8a7411610143578063a6c3d1651161011d578063a6c3d165146107d2578063b353aaa7146107f2578063baf3292d1461082657600080fd5b8063950c8a74146107555780639f0c3101146107825780639f38369a146107b257600080fd5b80638cfd8f5c116101745780638cfd8f5c146106d25780638da5cb5b1461070a5780639493ffad1461073557600080fd5b8063876919e81461069c5780638a0dac4a146106b257600080fd5b806342d65a8d116102485780635c975abb116101fc578063715018a6116101d6578063715018a61461064e5780637533d7881461065a5780638456cb591461068757600080fd5b80635c975abb1461060057806366ad5c8a1461061857806370f6ad9a1461063857600080fd5b8063452a93201161022d578063452a93201461051957806349d126051461056b5780635b8c41e6146105b157600080fd5b806342d65a8d146104e35780634406baaf1461050357600080fd5b806310ddb137116102aa5780633f1f4fa4116102845780633f1f4fa4146104815780633f4ba83a146104ae57806340e58ee5146104c357600080fd5b806310ddb137146104045780633d8b38f6146104245780633e4f49e61461045457600080fd5b80630435bb56116102db5780630435bb56146103a057806307e0db17146103c45780630df37483146103e457600080fd5b80621d3567146102f6578063013cf08b14610318575b600080fd5b34801561030257600080fd5b506103166103113660046137db565b6109d2565b005b34801561032457600080fd5b5061036a61033336600461386f565b600d6020526000908152604090208054600182015460069092015490919060ff808216916101008104821691620100009091041685565b60408051958652602086019490945291151592840192909252901515606083015260ff16608082015260a0015b60405180910390f35b3480156103ac57600080fd5b506103b660085481565b604051908152602001610397565b3480156103d057600080fd5b506103166103df366004613888565b610c27565b3480156103f057600080fd5b506103166103ff3660046138a3565b610cd6565b34801561041057600080fd5b5061031661041f366004613888565b610cf5565b34801561043057600080fd5b5061044461043f3660046138cd565b610d73565b6040519015158152602001610397565b34801561046057600080fd5b5061047461046f36600461386f565b610e40565b604051610397919061394f565b34801561048d57600080fd5b506103b661049c366004613888565b60046020526000908152604090205481565b3480156104ba57600080fd5b50610316610ed7565b3480156104cf57600080fd5b506103166104de36600461386f565b610ee9565b3480156104ef57600080fd5b506103166104fe3660046138cd565b6111ed565b34801561050f57600080fd5b506103b6600c5481565b34801561052557600080fd5b50600b546105469073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610397565b34801561057757600080fd5b50600b5461059e9074010000000000000000000000000000000000000000900461ffff1681565b60405161ffff9091168152602001610397565b3480156105bd57600080fd5b506103b66105cc366004613a18565b6006602090815260009384526040808520845180860184018051928152908401958401959095209452929052825290205481565b34801561060c57600080fd5b5060075460ff16610444565b34801561062457600080fd5b506103166106333660046137db565b611299565b34801561064457600080fd5b506103b660095481565b34801561031657600080fd5b34801561066657600080fd5b5061067a610675366004613888565b61138c565b6040516103979190613b09565b34801561069357600080fd5b50610316611426565b3480156106a857600080fd5b506103b6600a5481565b3480156106be57600080fd5b506103166106cd366004613b3e565b611436565b3480156106de57600080fd5b506103b66106ed366004613b5b565b600360209081526000928352604080842090915290825290205481565b34801561071657600080fd5b5060015473ffffffffffffffffffffffffffffffffffffffff16610546565b34801561074157600080fd5b5061031661075036600461386f565b61157e565b34801561076157600080fd5b506005546105469073ffffffffffffffffffffffffffffffffffffffff1681565b34801561078e57600080fd5b5061044461079d36600461386f565b600f6020526000908152604090205460ff1681565b3480156107be57600080fd5b5061067a6107cd366004613888565b6115c7565b3480156107de57600080fd5b506103166107ed3660046138cd565b6116d6565b3480156107fe57600080fd5b506105467f000000000000000000000000000000000000000000000000000000000000000081565b34801561083257600080fd5b50610316610841366004613b3e565b61175f565b34801561085257600080fd5b506103b661271081565b34801561086857600080fd5b50610316610877366004613888565b6117e0565b34801561088857600080fd5b50610316610897366004613b8e565b611882565b6103166108aa3660046137db565b61193d565b3480156108bb57600080fd5b506103166108ca366004613bfd565b611a19565b3480156108db57600080fd5b506103166108ea3660046138cd565b611a83565b3480156108fb57600080fd5b5061031661090a366004613c5d565b611add565b34801561091b57600080fd5b5061054661092a36600461386f565b600e6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b34801561095e57600080fd5b5061031661096d366004613b3e565b611cf4565b34801561097e57600080fd5b5061031661098d366004613d06565b611d91565b34801561099e57600080fd5b5061067a6109ad366004613d3f565b611f2f565b3480156109be57600080fd5b506103166109cd36600461386f565b612006565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610a5c5760405162461bcd60e51b815260206004820152601e60248201527f4c7a4170703a20696e76616c696420656e64706f696e742063616c6c6572000060448201526064015b60405180910390fd5b61ffff861660009081526002602052604081208054610a7a90613d8c565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa690613d8c565b8015610af35780601f10610ac857610100808354040283529160200191610af3565b820191906000526020600020905b815481529060010190602001808311610ad657829003601f168201915b50505050509050805186869050148015610b0e575060008151115b8015610b36575080516020820120604051610b2c9088908890613dd9565b6040518091039020145b610ba85760405162461bcd60e51b815260206004820152602660248201527f4c7a4170703a20696e76616c696420736f757263652073656e64696e6720636f60448201527f6e747261637400000000000000000000000000000000000000000000000000006064820152608401610a53565b610c1e8787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8a018190048102820181019092528881528a9350915088908890819084018382808284376000920191909152506122bf92505050565b50505050505050565b610c2f6124b9565b6040517f07e0db1700000000000000000000000000000000000000000000000000000000815261ffff821660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906307e0db17906024015b600060405180830381600087803b158015610cbb57600080fd5b505af1158015610ccf573d6000803e3d6000fd5b5050505050565b610cde6124b9565b61ffff909116600090815260046020526040902055565b610cfd6124b9565b6040517f10ddb13700000000000000000000000000000000000000000000000000000000815261ffff821660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906310ddb13790602401610ca1565b61ffff831660009081526002602052604081208054829190610d9490613d8c565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc090613d8c565b8015610e0d5780601f10610de257610100808354040283529160200191610e0d565b820191906000526020600020905b815481529060010190602001808311610df057829003601f168201915b505050505090508383604051610e24929190613dd9565b60405180910390208180519060200120149150505b9392505050565b6000818152600d60205260408120600681015460ff1615610e645750600092915050565b6006810154610100900460ff1615610e7f5750600292915050565b6000838152600f602052604090205460ff1615610e9f5750600192915050565b6040517f0992f7ad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50919050565b610edf6124b9565b610ee7612520565b565b6001610ef482610e40565b6002811115610f0557610f05613920565b14610f9e5760405162461bcd60e51b815260206004820152604f60248201527f4f6d6e69636861696e476f7665726e616e63654578656375746f723a3a63616e60448201527f63656c3a2070726f706f73616c2073686f756c6420626520717565756564206160648201527f6e64206e6f742065786563757465640000000000000000000000000000000000608482015260a401610a53565b6000818152600d60205260409020600b5473ffffffffffffffffffffffffffffffffffffffff1633146110395760405162461bcd60e51b815260206004820152603c60248201527f4f6d6e69636861696e476f7665726e616e63654578656375746f723a3a63616e60448201527f63656c3a2073656e646572206d75737420626520677561726469616e000000006064820152608401610a53565b60068101805460ff19166001908117918290556201000090910460ff166000908152600e602052604080822054928401546002850154915173ffffffffffffffffffffffffffffffffffffffff90941693909286917f789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c9190a260005b818110156111d0578373ffffffffffffffffffffffffffffffffffffffff1663591fcdfe8660020183815481106110ee576110ee613de9565b60009182526020909120015460038801805473ffffffffffffffffffffffffffffffffffffffff909216918590811061112957611129613de9565b906000526020600020015488600401858154811061114957611149613de9565b9060005260206000200189600501868154811061116857611168613de9565b90600052602060002001886040518663ffffffff1660e01b8152600401611193959493929190613e95565b600060405180830381600087803b1580156111ad57600080fd5b505af11580156111c1573d6000803e3d6000fd5b505050508060010190506110b5565b50505060009283525050600f60205260409020805460ff19169055565b6111f56124b9565b6040517f42d65a8d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906342d65a8d9061126b90869086908690600401613f1a565b600060405180830381600087803b15801561128557600080fd5b505af1158015610c1e573d6000803e3d6000fd5b33301461130e5760405162461bcd60e51b815260206004820152602660248201527f4e6f6e626c6f636b696e674c7a4170703a2063616c6c6572206d75737420626560448201527f204c7a41707000000000000000000000000000000000000000000000000000006064820152608401610a53565b6113848686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f89018190048102820181019092528781528993509150879087908190840183828082843760009201919091525061257f92505050565b505050505050565b600260205260009081526040902080546113a590613d8c565b80601f01602080910402602001604051908101604052809291908181526020018280546113d190613d8c565b801561141e5780601f106113f35761010080835404028352916020019161141e565b820191906000526020600020905b81548152906001019060200180831161140157829003601f168201915b505050505081565b61142e6124b9565b610ee76129b1565b600b5473ffffffffffffffffffffffffffffffffffffffff16331480611473575060015473ffffffffffffffffffffffffffffffffffffffff1633145b6114e7576040805162461bcd60e51b81526020600482015260248101919091527f4f6d6e69636861696e476f7665726e616e63654578656375746f723a3a73657460448201527f477561726469616e3a206f776e6572206f7220677561726469616e206f6e6c796064820152608401610a53565b6114f0816129ee565b600b5460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f08fdaf06427a2010e5958f4329b566993472d14ce81d3f16ce7f2a2660da98e390600090a3600b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6115866124b9565b60085460408051918252602082018390527f0a653bb1a57e62cfd43f0dc557c7223e8b58896238b5f9b300ef646d37b82d1b910160405180910390a1600855565b61ffff81166000908152600260205260408120805460609291906115ea90613d8c565b80601f016020809104026020016040519081016040528092919081815260200182805461161690613d8c565b80156116635780601f1061163857610100808354040283529160200191611663565b820191906000526020600020905b81548152906001019060200180831161164657829003601f168201915b5050505050905080516000036116bb5760405162461bcd60e51b815260206004820152601d60248201527f4c7a4170703a206e6f20747275737465642070617468207265636f72640000006044820152606401610a53565b610e396000601483516116ce9190613f67565b839190612a3b565b6116de6124b9565b8181306040516020016116f393929190613f80565b60408051601f1981840301815291815261ffff851660009081526002602052209061171e9082614001565b507f8c0400cfe2d1199b1a725c78960bcc2a344d869b80590d0f2bd005db15a572ce83838360405161175293929190613f1a565b60405180910390a1505050565b6117676124b9565b600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f5db758e995a17ec1ad84bdef7e8c3293a0bd6179bcce400dff5d4c3d87db726b9060200160405180910390a150565b6117e86124b9565b600b5460405161ffff8084169274010000000000000000000000000000000000000000900416907fb17c58d5977290696b6eea77c81c725f3dc83e426252bd9ece6287c1b8d0e96890600090a3600b805461ffff90921674010000000000000000000000000000000000000000027fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff909216919091179055565b61188a6124b9565b6040517fcbed8b9c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063cbed8b9c9061190490889088908890889088906004016140fd565b600060405180830381600087803b15801561191e57600080fd5b505af1158015611932573d6000803e3d6000fd5b505050505050505050565b6119456124b9565b61194d612b63565b848460405161195d929190613dd9565b6040805191829003822061ffff891660009081526002602052919091209091611986919061412b565b604051809103902014611a015760405162461bcd60e51b815260206004820152603f60248201527f4f6d6e69636861696e476f7665726e616e63654578656375746f723a3a72657460448201527f72794d6573736167653a206e6f74206120747275737465642072656d6f7465006064820152608401610a53565b611a0f868686868686612bbc565b6113846001600055565b611a216124b9565b61ffff83811660008181526003602090815260408083209487168084529482529182902085905581519283528201929092529081018290527f9d5c7c0b934da8fefa9c7760c98383778a12dfbfc0c3b3106518f43fb9508ac090606001611752565b611a8b6124b9565b61ffff83166000908152600260205260409020611aa98284836141a1565b507ffa41487ad5d6728f0b19276fa1eddc16558578f5109fc39d2dc33c3230470dab83838360405161175293929190613f1a565b611ae56124b9565b6000611af36002600161429d565b90508060ff16825114611bba5760405162461bcd60e51b815260206004820152606a60248201527f4f6d6e69636861696e476f7665726e616e63654578656375746f723a3a61646460448201527f54696d656c6f636b733a6e756d626572206f662074696d656c6f636b7320736860648201527f6f756c64206d6174636820746865206e756d626572206f6620676f7665726e6160848201527f6e636520726f757465730000000000000000000000000000000000000000000060a482015260c401610a53565b60005b8160ff168160ff161015611cef57611bf0838260ff1681518110611be357611be3613de9565b60200260200101516129ee565b828160ff1681518110611c0557611c05613de9565b60209081029190910181015160ff83166000818152600e845260409081902054905191825273ffffffffffffffffffffffffffffffffffffffff928316939216917ffc45ae51ac4893a3f843d030fbfd4037c0c196109c9e667645b8f144c83c16ea910160405180910390a3828160ff1681518110611c8657611c86613de9565b60209081029190910181015160ff83166000908152600e909252604090912080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091179055600101611bbd565b505050565b611cfc6124b9565b73ffffffffffffffffffffffffffffffffffffffff8116611d855760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610a53565b611d8e81612e0a565b50565b611d996124b9565b6000611da76002600161429d565b90508060ff168260ff1610611e4a5760405162461bcd60e51b815260206004820152604b60248201527f4f6d6e69636861696e476f7665726e616e63654578656375746f723a3a73657460448201527f54696d656c6f636b50656e64696e6741646d696e3a20696e76616c696420707260648201527f6f706f73616c2074797065000000000000000000000000000000000000000000608482015260a401610a53565b60ff82166000908152600e6020526040908190205490517f4dd18bf500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015290911690634dd18bf590602401600060405180830381600087803b158015611ec857600080fd5b505af1158015611edc573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8716815260ff861660208201527f6ac0b2c896b49975f12891f83c573bdf05490fe6b707cbaa2ba84c36094cbaec9350019050611752565b6040517ff5ecbdbc00000000000000000000000000000000000000000000000000000000815261ffff808616600483015284166024820152306044820152606481018290526060907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063f5ecbdbc90608401600060405180830381865afa158015611fd5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611ffd9190810190614306565b95945050505050565b61200e612b63565b600161201982610e40565b600281111561202a5761202a613920565b146120c35760405162461bcd60e51b815260206004820152605360248201527f4f6d6e69636861696e476f7665726e616e63654578656375746f723a3a65786560448201527f637574653a2070726f706f73616c2063616e206f6e6c7920626520657865637560648201527f7465642069662069742069732071756575656400000000000000000000000000608482015260a401610a53565b6000818152600d602090815260408083206006810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179081905562010000900460ff168452600e90925280832054600183015460028401549251939473ffffffffffffffffffffffffffffffffffffffff9092169390929186917f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f9190a260005b81811015612299578373ffffffffffffffffffffffffffffffffffffffff16630825f38f8660020183815481106121a4576121a4613de9565b60009182526020909120015460038801805473ffffffffffffffffffffffffffffffffffffffff90921691859081106121df576121df613de9565b90600052602060002001548860040185815481106121ff576121ff613de9565b9060005260206000200189600501868154811061221e5761221e613de9565b90600052602060002001886040518663ffffffff1660e01b8152600401612249959493929190613e95565b6000604051808303816000875af1158015612268573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526122909190810190614306565b5060010161216b565b5050506000838152600f60205260409020805460ff1916905550611d8e90506001600055565b600b5461ffff85811674010000000000000000000000000000000000000000909204161461237b5760405162461bcd60e51b815260206004820152604860248201527f4f6d6e69636861696e476f7665726e616e63654578656375746f723a3a5f626c60448201527f6f636b696e674c7a526563656976653a20696e76616c696420736f757263652060648201527f636861696e206964000000000000000000000000000000000000000000000000608482015260a401610a53565b8051602082012060405160009030906366ad5c8a906123a4908990899089908990602401614343565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090506000806124066175305a6123fc9190613f67565b3090609686612e81565b91509150816124af5761ffff8816600090815260066020526040908190209051859190612434908a90614382565b90815260408051918290036020908101832067ffffffffffffffff8b16600090815291522091909155612468908890614382565b60405180910390208861ffff167f41d73ce7be31a588d59fe9013cdcfe583bc0aab25093d042b64cade0df73065688846040516124a692919061439e565b60405180910390a35b5050505050505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610ee75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a53565b612528612f0c565b6007805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b612587612f5e565b6000808280602001905181019061259e91906143c1565b915091506000806000806000868060200190518101906125be9190614592565b60008b8152600d602052604090205494995092975090955093509150156126735760405162461bcd60e51b815260206004820152604660248201527f4f6d6e69636861696e476f7665726e616e63654578656375746f723a3a5f6e6f60448201527f6e626c6f636b696e674c7a526563656976653a206475706c696361746520707260648201527f6f706f73616c0000000000000000000000000000000000000000000000000000608482015260a401610a53565b83518551148015612685575082518551145b8015612692575081518551145b61272a5760405162461bcd60e51b815260206004820152606060248201527f4f6d6e69636861696e476f7665726e616e63654578656375746f723a3a5f6e6f60448201527f6e626c6f636b696e674c7a526563656976653a2070726f706f73616c2066756e60648201527f6374696f6e20696e666f726d6174696f6e206172697479206d69736d61746368608482015260a401610a53565b6127366002600161429d565b60ff168160ff16106127d65760405162461bcd60e51b815260206004820152604960248201527f4f6d6e69636861696e476f7665726e616e63654578656375746f723a3a5f6e6f60448201527f6e626c6f636b696e674c7a526563656976653a20696e76616c69642070726f7060648201527f6f73616c20747970650000000000000000000000000000000000000000000000608482015260a401610a53565b6127e08551612fb1565b6040805161012081018252878152600060208083018281528385018a8152606085018a90526080850189905260a0850188905260c0850184905260e0850184905260ff87166101008601528b8452600d835294909220835181559151600183015592518051929384936128599260028501920190613571565b50606082015180516128759160038401916020909101906135fb565b5060808201518051612891916004840191602090910190613636565b5060a082015180516128ad916005840191602090910190613688565b5060c08201516006909101805460e08401516101009485015160ff1662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff9115159095027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909216919091179290921791909116919091179055600c87905580516040517fc37d19c9a6a9a568b5071658f9b5082ff8f142df3cf090385c5621ab1193806590612992908990899089908990899061470b565b60405180910390a26129a387613041565b505050505050505050505050565b6129b9612f5e565b6007805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586125553390565b73ffffffffffffffffffffffffffffffffffffffff8116611d8e576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081612a4981601f6147d5565b1015612a975760405162461bcd60e51b815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610a53565b612aa182846147d5565b84511015612af15760405162461bcd60e51b815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610a53565b606082158015612b105760405191506000825260208201604052612b5a565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015612b49578051835260209283019201612b31565b5050858452601f01601f1916604052505b50949350505050565b600260005403612bb55760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610a53565b6002600055565b61ffff86166000908152600660205260408082209051612bdf9088908890613dd9565b908152604080516020928190038301902067ffffffffffffffff871660009081529252902054905080612c7a5760405162461bcd60e51b815260206004820152602360248201527f4e6f6e626c6f636b696e674c7a4170703a206e6f2073746f726564206d65737360448201527f61676500000000000000000000000000000000000000000000000000000000006064820152608401610a53565b808383604051612c8b929190613dd9565b604051809103902014612d065760405162461bcd60e51b815260206004820152602160248201527f4e6f6e626c6f636b696e674c7a4170703a20696e76616c6964207061796c6f6160448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610a53565b61ffff87166000908152600660205260408082209051612d299089908990613dd9565b908152604080516020928190038301812067ffffffffffffffff8916600090815290845282902093909355601f88018290048202830182019052868252612dc2918991899089908190840183828082843760009201919091525050604080516020601f8a018190048102820181019092528881528a93509150889088908190840183828082843760009201919091525061257f92505050565b7fc264d91f3adc5588250e1551f547752ca0cfa8f6b530d243b9f9f4cab10ea8e58787878785604051612df99594939291906147e8565b60405180910390a150505050505050565b6001805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000606060008060008661ffff1667ffffffffffffffff811115612ea757612ea7613990565b6040519080825280601f01601f191660200182016040528015612ed1576020820181803683370190505b50905060008087516020890160008d8df191503d925086831115612ef3578692505b828152826000602083013e909890975095505050505050565b60075460ff16610ee75760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610a53565b60075460ff1615610ee75760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610a53565b600954600a544291906201518090612fc99084613f67565b1115612fdb5750600a81905581612fe8565b612fe583826147d5565b90505b60085481111561303a5760405162461bcd60e51b815260206004820181905260248201527f4461696c79205472616e73616374696f6e204c696d69742045786365656465646044820152606401610a53565b6009555050565b6000818152600d60209081526040808320600681015462010000900460ff168452600e83528184205482517f6a42b8f8000000000000000000000000000000000000000000000000000000008152925191949373ffffffffffffffffffffffffffffffffffffffff90911692636a42b8f892600480830193928290030181865afa1580156130d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130f79190614824565b61310190426147d5565b60018084018290556000858152600f602052604090819020805460ff191690921790915560068401546002850154915192935062010000900460ff169185907f9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda28929061316f9086815260200190565b60405180910390a260005b818110156113845761333785600201828154811061319a5761319a613de9565b60009182526020909120015460038701805473ffffffffffffffffffffffffffffffffffffffff90921691849081106131d5576131d5613de9565b90600052602060002001548760040184815481106131f5576131f5613de9565b90600052602060002001805461320a90613d8c565b80601f016020809104026020016040519081016040528092919081815260200182805461323690613d8c565b80156132835780601f1061325857610100808354040283529160200191613283565b820191906000526020600020905b81548152906001019060200180831161326657829003601f168201915b505050505088600501858154811061329d5761329d613de9565b9060005260206000200180546132b290613d8c565b80601f01602080910402602001604051908101604052809291908181526020018280546132de90613d8c565b801561332b5780601f106133005761010080835404028352916020019161332b565b820191906000526020600020905b81548152906001019060200180831161330e57829003601f168201915b5050505050888861333f565b60010161317a565b60ff81166000908152600e602090815260409182902054915173ffffffffffffffffffffffffffffffffffffffff9092169163f2b065379161338b918a918a918a918a918a910161483d565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004016133bf91815260200190565b602060405180830381865afa1580156133dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134009190614884565b156134bf5760405162461bcd60e51b815260206004820152606360248201527f4f6d6e69636861696e476f7665726e616e63654578656375746f723a3a71756560448201527f75654f72526576657274496e7465726e616c3a206964656e746963616c20707260648201527f6f706f73616c20616374696f6e20616c7265616479207175657565642061742060848201527f657461000000000000000000000000000000000000000000000000000000000060a482015260c401610a53565b60ff81166000908152600e6020526040908190205490517f3a66f90100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690633a66f9019061352e908990899089908990899060040161483d565b6020604051808303816000875af115801561354d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1e9190614824565b8280548282559060005260206000209081019282156135eb579160200282015b828111156135eb57825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909116178255602090920191600190910190613591565b506135f79291506136da565b5090565b8280548282559060005260206000209081019282156135eb579160200282015b828111156135eb57825182559160200191906001019061361b565b82805482825590600052602060002090810192821561367c579160200282015b8281111561367c578251829061366c9082614001565b5091602001919060010190613656565b506135f79291506136ef565b8280548282559060005260206000209081019282156136ce579160200282015b828111156136ce57825182906136be9082614001565b50916020019190600101906136a8565b506135f792915061370c565b5b808211156135f757600081556001016136db565b808211156135f75760006137038282613729565b506001016136ef565b808211156135f75760006137208282613729565b5060010161370c565b50805461373590613d8c565b6000825580601f10613745575050565b601f016020900490600052602060002090810190611d8e91906136da565b803561ffff8116811461377557600080fd5b919050565b60008083601f84011261378c57600080fd5b50813567ffffffffffffffff8111156137a457600080fd5b6020830191508360208285010111156137bc57600080fd5b9250929050565b803567ffffffffffffffff8116811461377557600080fd5b600080600080600080608087890312156137f457600080fd5b6137fd87613763565b9550602087013567ffffffffffffffff8082111561381a57600080fd5b6138268a838b0161377a565b909750955085915061383a60408a016137c3565b9450606089013591508082111561385057600080fd5b5061385d89828a0161377a565b979a9699509497509295939492505050565b60006020828403121561388157600080fd5b5035919050565b60006020828403121561389a57600080fd5b610e3982613763565b600080604083850312156138b657600080fd5b6138bf83613763565b946020939093013593505050565b6000806000604084860312156138e257600080fd5b6138eb84613763565b9250602084013567ffffffffffffffff81111561390757600080fd5b6139138682870161377a565b9497909650939450505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016003831061398a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156139e8576139e8613990565b604052919050565b600067ffffffffffffffff821115613a0a57613a0a613990565b50601f01601f191660200190565b600080600060608486031215613a2d57600080fd5b613a3684613763565b9250602084013567ffffffffffffffff811115613a5257600080fd5b8401601f81018613613a6357600080fd5b8035613a76613a71826139f0565b6139bf565b818152876020838501011115613a8b57600080fd5b81602084016020830137600060208383010152809450505050613ab0604085016137c3565b90509250925092565b60005b83811015613ad4578181015183820152602001613abc565b50506000910152565b60008151808452613af5816020860160208601613ab9565b601f01601f19169290920160200192915050565b602081526000610e396020830184613add565b73ffffffffffffffffffffffffffffffffffffffff81168114611d8e57600080fd5b600060208284031215613b5057600080fd5b8135610e3981613b1c565b60008060408385031215613b6e57600080fd5b613b7783613763565b9150613b8560208401613763565b90509250929050565b600080600080600060808688031215613ba657600080fd5b613baf86613763565b9450613bbd60208701613763565b935060408601359250606086013567ffffffffffffffff811115613be057600080fd5b613bec8882890161377a565b969995985093965092949392505050565b600080600060608486031215613c1257600080fd5b613c1b84613763565b9250613c2960208501613763565b9150604084013590509250925092565b600067ffffffffffffffff821115613c5357613c53613990565b5060051b60200190565b60006020808385031215613c7057600080fd5b823567ffffffffffffffff811115613c8757600080fd5b8301601f81018513613c9857600080fd5b8035613ca6613a7182613c39565b81815260059190911b82018301908381019087831115613cc557600080fd5b928401925b82841015613cec578335613cdd81613b1c565b82529284019290840190613cca565b979650505050505050565b60ff81168114611d8e57600080fd5b60008060408385031215613d1957600080fd5b8235613d2481613b1c565b91506020830135613d3481613cf7565b809150509250929050565b60008060008060808587031215613d5557600080fd5b613d5e85613763565b9350613d6c60208601613763565b92506040850135613d7c81613b1c565b9396929550929360600135925050565b600181811c90821680613da057607f821691505b602082108103610ed1577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008154613e2581613d8c565b808552602060018381168015613e425760018114613e5c57613e8a565b60ff198516838901528284151560051b8901019550613e8a565b866000528260002060005b85811015613e825781548a8201860152908301908401613e67565b890184019650505b505050505092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000613eca60a0830186613e18565b8281036060840152613edc8186613e18565b9150508260808301529695505050505050565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b61ffff84168152604060208201526000611ffd604083018486613eef565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115613f7a57613f7a613f38565b92915050565b8284823760609190911b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169101908152601401919050565b601f821115611cef576000816000526020600020601f850160051c81016020861015613fe25750805b601f850160051c820191505b8181101561138457828155600101613fee565b815167ffffffffffffffff81111561401b5761401b613990565b61402f816140298454613d8c565b84613fb9565b602080601f831160018114614082576000841561404c5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555611384565b600085815260208120601f198616915b828110156140b157888601518255948401946001909101908401614092565b50858210156140ed57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600061ffff808816835280871660208401525084604083015260806060830152613cec608083018486613eef565b600080835461413981613d8c565b60018281168015614151576001811461416657614195565b60ff1984168752821515830287019450614195565b8760005260208060002060005b8581101561418c5781548a820152908401908201614173565b50505082870194505b50929695505050505050565b67ffffffffffffffff8311156141b9576141b9613990565b6141cd836141c78354613d8c565b83613fb9565b6000601f84116001811461421f57600085156141e95750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355610ccf565b600083815260209020601f19861690835b828110156142505786850135825560209485019460019092019101614230565b508682101561428b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b60ff8181168382160190811115613f7a57613f7a613f38565b60006142c4613a71846139f0565b90508281528383830111156142d857600080fd5b610e39836020830184613ab9565b600082601f8301126142f757600080fd5b610e39838351602085016142b6565b60006020828403121561431857600080fd5b815167ffffffffffffffff81111561432f57600080fd5b61433b848285016142e6565b949350505050565b61ffff851681526080602082015260006143606080830186613add565b67ffffffffffffffff851660408401528281036060840152613cec8185613add565b60008251614394818460208701613ab9565b9190910192915050565b67ffffffffffffffff8316815260406020820152600061433b6040830184613add565b600080604083850312156143d457600080fd5b825167ffffffffffffffff8111156143eb57600080fd5b6143f7858286016142e6565b925050602083015190509250929050565b600082601f83011261441957600080fd5b81516020614429613a7183613c39565b8083825260208201915060208460051b87010193508684111561444b57600080fd5b602086015b848110156144675780518352918301918301614450565b509695505050505050565b600082601f83011261448357600080fd5b81516020614493613a7183613c39565b82815260059290921b840181019181810190868411156144b257600080fd5b8286015b8481101561446757805167ffffffffffffffff8111156144d65760008081fd5b8701603f810189136144e85760008081fd5b6144f98986830151604084016142b6565b8452509183019183016144b6565b600082601f83011261451857600080fd5b81516020614528613a7183613c39565b82815260059290921b8401810191818101908684111561454757600080fd5b8286015b8481101561446757805167ffffffffffffffff81111561456b5760008081fd5b6145798986838b01016142e6565b84525091830191830161454b565b805161377581613cf7565b600080600080600060a086880312156145aa57600080fd5b855167ffffffffffffffff808211156145c257600080fd5b818801915088601f8301126145d657600080fd5b815160206145e6613a7183613c39565b82815260059290921b8401810191818101908c84111561460557600080fd5b948201945b8386101561462c57855161461d81613b1c565b8252948201949082019061460a565b918b015191995090935050508082111561464557600080fd5b61465189838a01614408565b9550604088015191508082111561466757600080fd5b61467389838a01614472565b9450606088015191508082111561468957600080fd5b5061469688828901614507565b9250506146a560808701614587565b90509295509295909350565b60008282518085526020808601955060208260051b8401016020860160005b848110156146fe57601f198684030189526146ec838351613add565b988401989250908301906001016146d0565b5090979650505050505050565b60a0808252865190820181905260009060209060c0840190828a01845b8281101561475a57815173ffffffffffffffffffffffffffffffffffffffff1684529284019290840190600101614728565b5050508381038285015287518082528883019183019060005b8181101561478f57835183529284019291840191600101614773565b505084810360408601526147a381896146b1565b9250505082810360608401526147b981866146b1565b9150506147cb608083018460ff169052565b9695505050505050565b80820180821115613f7a57613f7a613f38565b61ffff86168152608060208201526000614806608083018688613eef565b67ffffffffffffffff94909416604083015250606001529392505050565b60006020828403121561483657600080fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a06040820152600061487260a0830186613add565b8281036060840152613edc8186613add565b60006020828403121561489657600080fd5b81518015158114610e3957600080fdfea26469706673582212206e9b4e0e8423ddd67a12f6b1a136938a978661714c282ede340b91a73060ecf464736f6c63430008190033",
  "deployedBytecode": "0x6080604052600436106102f15760003560e01c8063876919e81161018f578063c4461834116100e1578063ed66039b1161008a578063f4fcfcca11610064578063f4fcfcca14610972578063f5ecbdbc14610992578063fe0d94c1146109b257600080fd5b8063ed66039b146108ef578063ee9799ee1461090f578063f2fde38b1461095257600080fd5b8063d1deba1f116100bb578063d1deba1f1461089c578063df2a5b3b146108af578063eb8d72b7146108cf57600080fd5b8063c446183414610846578063c8b42e5b1461085c578063cbed8b9c1461087c57600080fd5b8063950c8a7411610143578063a6c3d1651161011d578063a6c3d165146107d2578063b353aaa7146107f2578063baf3292d1461082657600080fd5b8063950c8a74146107555780639f0c3101146107825780639f38369a146107b257600080fd5b80638cfd8f5c116101745780638cfd8f5c146106d25780638da5cb5b1461070a5780639493ffad1461073557600080fd5b8063876919e81461069c5780638a0dac4a146106b257600080fd5b806342d65a8d116102485780635c975abb116101fc578063715018a6116101d6578063715018a61461064e5780637533d7881461065a5780638456cb591461068757600080fd5b80635c975abb1461060057806366ad5c8a1461061857806370f6ad9a1461063857600080fd5b8063452a93201161022d578063452a93201461051957806349d126051461056b5780635b8c41e6146105b157600080fd5b806342d65a8d146104e35780634406baaf1461050357600080fd5b806310ddb137116102aa5780633f1f4fa4116102845780633f1f4fa4146104815780633f4ba83a146104ae57806340e58ee5146104c357600080fd5b806310ddb137146104045780633d8b38f6146104245780633e4f49e61461045457600080fd5b80630435bb56116102db5780630435bb56146103a057806307e0db17146103c45780630df37483146103e457600080fd5b80621d3567146102f6578063013cf08b14610318575b600080fd5b34801561030257600080fd5b506103166103113660046137db565b6109d2565b005b34801561032457600080fd5b5061036a61033336600461386f565b600d6020526000908152604090208054600182015460069092015490919060ff808216916101008104821691620100009091041685565b60408051958652602086019490945291151592840192909252901515606083015260ff16608082015260a0015b60405180910390f35b3480156103ac57600080fd5b506103b660085481565b604051908152602001610397565b3480156103d057600080fd5b506103166103df366004613888565b610c27565b3480156103f057600080fd5b506103166103ff3660046138a3565b610cd6565b34801561041057600080fd5b5061031661041f366004613888565b610cf5565b34801561043057600080fd5b5061044461043f3660046138cd565b610d73565b6040519015158152602001610397565b34801561046057600080fd5b5061047461046f36600461386f565b610e40565b604051610397919061394f565b34801561048d57600080fd5b506103b661049c366004613888565b60046020526000908152604090205481565b3480156104ba57600080fd5b50610316610ed7565b3480156104cf57600080fd5b506103166104de36600461386f565b610ee9565b3480156104ef57600080fd5b506103166104fe3660046138cd565b6111ed565b34801561050f57600080fd5b506103b6600c5481565b34801561052557600080fd5b50600b546105469073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610397565b34801561057757600080fd5b50600b5461059e9074010000000000000000000000000000000000000000900461ffff1681565b60405161ffff9091168152602001610397565b3480156105bd57600080fd5b506103b66105cc366004613a18565b6006602090815260009384526040808520845180860184018051928152908401958401959095209452929052825290205481565b34801561060c57600080fd5b5060075460ff16610444565b34801561062457600080fd5b506103166106333660046137db565b611299565b34801561064457600080fd5b506103b660095481565b34801561031657600080fd5b34801561066657600080fd5b5061067a610675366004613888565b61138c565b6040516103979190613b09565b34801561069357600080fd5b50610316611426565b3480156106a857600080fd5b506103b6600a5481565b3480156106be57600080fd5b506103166106cd366004613b3e565b611436565b3480156106de57600080fd5b506103b66106ed366004613b5b565b600360209081526000928352604080842090915290825290205481565b34801561071657600080fd5b5060015473ffffffffffffffffffffffffffffffffffffffff16610546565b34801561074157600080fd5b5061031661075036600461386f565b61157e565b34801561076157600080fd5b506005546105469073ffffffffffffffffffffffffffffffffffffffff1681565b34801561078e57600080fd5b5061044461079d36600461386f565b600f6020526000908152604090205460ff1681565b3480156107be57600080fd5b5061067a6107cd366004613888565b6115c7565b3480156107de57600080fd5b506103166107ed3660046138cd565b6116d6565b3480156107fe57600080fd5b506105467f000000000000000000000000000000000000000000000000000000000000000081565b34801561083257600080fd5b50610316610841366004613b3e565b61175f565b34801561085257600080fd5b506103b661271081565b34801561086857600080fd5b50610316610877366004613888565b6117e0565b34801561088857600080fd5b50610316610897366004613b8e565b611882565b6103166108aa3660046137db565b61193d565b3480156108bb57600080fd5b506103166108ca366004613bfd565b611a19565b3480156108db57600080fd5b506103166108ea3660046138cd565b611a83565b3480156108fb57600080fd5b5061031661090a366004613c5d565b611add565b34801561091b57600080fd5b5061054661092a36600461386f565b600e6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b34801561095e57600080fd5b5061031661096d366004613b3e565b611cf4565b34801561097e57600080fd5b5061031661098d366004613d06565b611d91565b34801561099e57600080fd5b5061067a6109ad366004613d3f565b611f2f565b3480156109be57600080fd5b506103166109cd36600461386f565b612006565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610a5c5760405162461bcd60e51b815260206004820152601e60248201527f4c7a4170703a20696e76616c696420656e64706f696e742063616c6c6572000060448201526064015b60405180910390fd5b61ffff861660009081526002602052604081208054610a7a90613d8c565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa690613d8c565b8015610af35780601f10610ac857610100808354040283529160200191610af3565b820191906000526020600020905b815481529060010190602001808311610ad657829003601f168201915b50505050509050805186869050148015610b0e575060008151115b8015610b36575080516020820120604051610b2c9088908890613dd9565b6040518091039020145b610ba85760405162461bcd60e51b815260206004820152602660248201527f4c7a4170703a20696e76616c696420736f757263652073656e64696e6720636f60448201527f6e747261637400000000000000000000000000000000000000000000000000006064820152608401610a53565b610c1e8787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8a018190048102820181019092528881528a9350915088908890819084018382808284376000920191909152506122bf92505050565b50505050505050565b610c2f6124b9565b6040517f07e0db1700000000000000000000000000000000000000000000000000000000815261ffff821660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906307e0db17906024015b600060405180830381600087803b158015610cbb57600080fd5b505af1158015610ccf573d6000803e3d6000fd5b5050505050565b610cde6124b9565b61ffff909116600090815260046020526040902055565b610cfd6124b9565b6040517f10ddb13700000000000000000000000000000000000000000000000000000000815261ffff821660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906310ddb13790602401610ca1565b61ffff831660009081526002602052604081208054829190610d9490613d8c565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc090613d8c565b8015610e0d5780601f10610de257610100808354040283529160200191610e0d565b820191906000526020600020905b815481529060010190602001808311610df057829003601f168201915b505050505090508383604051610e24929190613dd9565b60405180910390208180519060200120149150505b9392505050565b6000818152600d60205260408120600681015460ff1615610e645750600092915050565b6006810154610100900460ff1615610e7f5750600292915050565b6000838152600f602052604090205460ff1615610e9f5750600192915050565b6040517f0992f7ad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50919050565b610edf6124b9565b610ee7612520565b565b6001610ef482610e40565b6002811115610f0557610f05613920565b14610f9e5760405162461bcd60e51b815260206004820152604f60248201527f4f6d6e69636861696e476f7665726e616e63654578656375746f723a3a63616e60448201527f63656c3a2070726f706f73616c2073686f756c6420626520717565756564206160648201527f6e64206e6f742065786563757465640000000000000000000000000000000000608482015260a401610a53565b6000818152600d60205260409020600b5473ffffffffffffffffffffffffffffffffffffffff1633146110395760405162461bcd60e51b815260206004820152603c60248201527f4f6d6e69636861696e476f7665726e616e63654578656375746f723a3a63616e60448201527f63656c3a2073656e646572206d75737420626520677561726469616e000000006064820152608401610a53565b60068101805460ff19166001908117918290556201000090910460ff166000908152600e602052604080822054928401546002850154915173ffffffffffffffffffffffffffffffffffffffff90941693909286917f789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c9190a260005b818110156111d0578373ffffffffffffffffffffffffffffffffffffffff1663591fcdfe8660020183815481106110ee576110ee613de9565b60009182526020909120015460038801805473ffffffffffffffffffffffffffffffffffffffff909216918590811061112957611129613de9565b906000526020600020015488600401858154811061114957611149613de9565b9060005260206000200189600501868154811061116857611168613de9565b90600052602060002001886040518663ffffffff1660e01b8152600401611193959493929190613e95565b600060405180830381600087803b1580156111ad57600080fd5b505af11580156111c1573d6000803e3d6000fd5b505050508060010190506110b5565b50505060009283525050600f60205260409020805460ff19169055565b6111f56124b9565b6040517f42d65a8d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906342d65a8d9061126b90869086908690600401613f1a565b600060405180830381600087803b15801561128557600080fd5b505af1158015610c1e573d6000803e3d6000fd5b33301461130e5760405162461bcd60e51b815260206004820152602660248201527f4e6f6e626c6f636b696e674c7a4170703a2063616c6c6572206d75737420626560448201527f204c7a41707000000000000000000000000000000000000000000000000000006064820152608401610a53565b6113848686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f89018190048102820181019092528781528993509150879087908190840183828082843760009201919091525061257f92505050565b505050505050565b600260205260009081526040902080546113a590613d8c565b80601f01602080910402602001604051908101604052809291908181526020018280546113d190613d8c565b801561141e5780601f106113f35761010080835404028352916020019161141e565b820191906000526020600020905b81548152906001019060200180831161140157829003601f168201915b505050505081565b61142e6124b9565b610ee76129b1565b600b5473ffffffffffffffffffffffffffffffffffffffff16331480611473575060015473ffffffffffffffffffffffffffffffffffffffff1633145b6114e7576040805162461bcd60e51b81526020600482015260248101919091527f4f6d6e69636861696e476f7665726e616e63654578656375746f723a3a73657460448201527f477561726469616e3a206f776e6572206f7220677561726469616e206f6e6c796064820152608401610a53565b6114f0816129ee565b600b5460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f08fdaf06427a2010e5958f4329b566993472d14ce81d3f16ce7f2a2660da98e390600090a3600b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6115866124b9565b60085460408051918252602082018390527f0a653bb1a57e62cfd43f0dc557c7223e8b58896238b5f9b300ef646d37b82d1b910160405180910390a1600855565b61ffff81166000908152600260205260408120805460609291906115ea90613d8c565b80601f016020809104026020016040519081016040528092919081815260200182805461161690613d8c565b80156116635780601f1061163857610100808354040283529160200191611663565b820191906000526020600020905b81548152906001019060200180831161164657829003601f168201915b5050505050905080516000036116bb5760405162461bcd60e51b815260206004820152601d60248201527f4c7a4170703a206e6f20747275737465642070617468207265636f72640000006044820152606401610a53565b610e396000601483516116ce9190613f67565b839190612a3b565b6116de6124b9565b8181306040516020016116f393929190613f80565b60408051601f1981840301815291815261ffff851660009081526002602052209061171e9082614001565b507f8c0400cfe2d1199b1a725c78960bcc2a344d869b80590d0f2bd005db15a572ce83838360405161175293929190613f1a565b60405180910390a1505050565b6117676124b9565b600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f5db758e995a17ec1ad84bdef7e8c3293a0bd6179bcce400dff5d4c3d87db726b9060200160405180910390a150565b6117e86124b9565b600b5460405161ffff8084169274010000000000000000000000000000000000000000900416907fb17c58d5977290696b6eea77c81c725f3dc83e426252bd9ece6287c1b8d0e96890600090a3600b805461ffff90921674010000000000000000000000000000000000000000027fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff909216919091179055565b61188a6124b9565b6040517fcbed8b9c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063cbed8b9c9061190490889088908890889088906004016140fd565b600060405180830381600087803b15801561191e57600080fd5b505af1158015611932573d6000803e3d6000fd5b505050505050505050565b6119456124b9565b61194d612b63565b848460405161195d929190613dd9565b6040805191829003822061ffff891660009081526002602052919091209091611986919061412b565b604051809103902014611a015760405162461bcd60e51b815260206004820152603f60248201527f4f6d6e69636861696e476f7665726e616e63654578656375746f723a3a72657460448201527f72794d6573736167653a206e6f74206120747275737465642072656d6f7465006064820152608401610a53565b611a0f868686868686612bbc565b6113846001600055565b611a216124b9565b61ffff83811660008181526003602090815260408083209487168084529482529182902085905581519283528201929092529081018290527f9d5c7c0b934da8fefa9c7760c98383778a12dfbfc0c3b3106518f43fb9508ac090606001611752565b611a8b6124b9565b61ffff83166000908152600260205260409020611aa98284836141a1565b507ffa41487ad5d6728f0b19276fa1eddc16558578f5109fc39d2dc33c3230470dab83838360405161175293929190613f1a565b611ae56124b9565b6000611af36002600161429d565b90508060ff16825114611bba5760405162461bcd60e51b815260206004820152606a60248201527f4f6d6e69636861696e476f7665726e616e63654578656375746f723a3a61646460448201527f54696d656c6f636b733a6e756d626572206f662074696d656c6f636b7320736860648201527f6f756c64206d6174636820746865206e756d626572206f6620676f7665726e6160848201527f6e636520726f757465730000000000000000000000000000000000000000000060a482015260c401610a53565b60005b8160ff168160ff161015611cef57611bf0838260ff1681518110611be357611be3613de9565b60200260200101516129ee565b828160ff1681518110611c0557611c05613de9565b60209081029190910181015160ff83166000818152600e845260409081902054905191825273ffffffffffffffffffffffffffffffffffffffff928316939216917ffc45ae51ac4893a3f843d030fbfd4037c0c196109c9e667645b8f144c83c16ea910160405180910390a3828160ff1681518110611c8657611c86613de9565b60209081029190910181015160ff83166000908152600e909252604090912080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091179055600101611bbd565b505050565b611cfc6124b9565b73ffffffffffffffffffffffffffffffffffffffff8116611d855760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610a53565b611d8e81612e0a565b50565b611d996124b9565b6000611da76002600161429d565b90508060ff168260ff1610611e4a5760405162461bcd60e51b815260206004820152604b60248201527f4f6d6e69636861696e476f7665726e616e63654578656375746f723a3a73657460448201527f54696d656c6f636b50656e64696e6741646d696e3a20696e76616c696420707260648201527f6f706f73616c2074797065000000000000000000000000000000000000000000608482015260a401610a53565b60ff82166000908152600e6020526040908190205490517f4dd18bf500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015290911690634dd18bf590602401600060405180830381600087803b158015611ec857600080fd5b505af1158015611edc573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8716815260ff861660208201527f6ac0b2c896b49975f12891f83c573bdf05490fe6b707cbaa2ba84c36094cbaec9350019050611752565b6040517ff5ecbdbc00000000000000000000000000000000000000000000000000000000815261ffff808616600483015284166024820152306044820152606481018290526060907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063f5ecbdbc90608401600060405180830381865afa158015611fd5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611ffd9190810190614306565b95945050505050565b61200e612b63565b600161201982610e40565b600281111561202a5761202a613920565b146120c35760405162461bcd60e51b815260206004820152605360248201527f4f6d6e69636861696e476f7665726e616e63654578656375746f723a3a65786560448201527f637574653a2070726f706f73616c2063616e206f6e6c7920626520657865637560648201527f7465642069662069742069732071756575656400000000000000000000000000608482015260a401610a53565b6000818152600d602090815260408083206006810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179081905562010000900460ff168452600e90925280832054600183015460028401549251939473ffffffffffffffffffffffffffffffffffffffff9092169390929186917f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f9190a260005b81811015612299578373ffffffffffffffffffffffffffffffffffffffff16630825f38f8660020183815481106121a4576121a4613de9565b60009182526020909120015460038801805473ffffffffffffffffffffffffffffffffffffffff90921691859081106121df576121df613de9565b90600052602060002001548860040185815481106121ff576121ff613de9565b9060005260206000200189600501868154811061221e5761221e613de9565b90600052602060002001886040518663ffffffff1660e01b8152600401612249959493929190613e95565b6000604051808303816000875af1158015612268573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526122909190810190614306565b5060010161216b565b5050506000838152600f60205260409020805460ff1916905550611d8e90506001600055565b600b5461ffff85811674010000000000000000000000000000000000000000909204161461237b5760405162461bcd60e51b815260206004820152604860248201527f4f6d6e69636861696e476f7665726e616e63654578656375746f723a3a5f626c60448201527f6f636b696e674c7a526563656976653a20696e76616c696420736f757263652060648201527f636861696e206964000000000000000000000000000000000000000000000000608482015260a401610a53565b8051602082012060405160009030906366ad5c8a906123a4908990899089908990602401614343565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090506000806124066175305a6123fc9190613f67565b3090609686612e81565b91509150816124af5761ffff8816600090815260066020526040908190209051859190612434908a90614382565b90815260408051918290036020908101832067ffffffffffffffff8b16600090815291522091909155612468908890614382565b60405180910390208861ffff167f41d73ce7be31a588d59fe9013cdcfe583bc0aab25093d042b64cade0df73065688846040516124a692919061439e565b60405180910390a35b5050505050505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610ee75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a53565b612528612f0c565b6007805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b612587612f5e565b6000808280602001905181019061259e91906143c1565b915091506000806000806000868060200190518101906125be9190614592565b60008b8152600d602052604090205494995092975090955093509150156126735760405162461bcd60e51b815260206004820152604660248201527f4f6d6e69636861696e476f7665726e616e63654578656375746f723a3a5f6e6f60448201527f6e626c6f636b696e674c7a526563656976653a206475706c696361746520707260648201527f6f706f73616c0000000000000000000000000000000000000000000000000000608482015260a401610a53565b83518551148015612685575082518551145b8015612692575081518551145b61272a5760405162461bcd60e51b815260206004820152606060248201527f4f6d6e69636861696e476f7665726e616e63654578656375746f723a3a5f6e6f60448201527f6e626c6f636b696e674c7a526563656976653a2070726f706f73616c2066756e60648201527f6374696f6e20696e666f726d6174696f6e206172697479206d69736d61746368608482015260a401610a53565b6127366002600161429d565b60ff168160ff16106127d65760405162461bcd60e51b815260206004820152604960248201527f4f6d6e69636861696e476f7665726e616e63654578656375746f723a3a5f6e6f60448201527f6e626c6f636b696e674c7a526563656976653a20696e76616c69642070726f7060648201527f6f73616c20747970650000000000000000000000000000000000000000000000608482015260a401610a53565b6127e08551612fb1565b6040805161012081018252878152600060208083018281528385018a8152606085018a90526080850189905260a0850188905260c0850184905260e0850184905260ff87166101008601528b8452600d835294909220835181559151600183015592518051929384936128599260028501920190613571565b50606082015180516128759160038401916020909101906135fb565b5060808201518051612891916004840191602090910190613636565b5060a082015180516128ad916005840191602090910190613688565b5060c08201516006909101805460e08401516101009485015160ff1662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff9115159095027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909216919091179290921791909116919091179055600c87905580516040517fc37d19c9a6a9a568b5071658f9b5082ff8f142df3cf090385c5621ab1193806590612992908990899089908990899061470b565b60405180910390a26129a387613041565b505050505050505050505050565b6129b9612f5e565b6007805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586125553390565b73ffffffffffffffffffffffffffffffffffffffff8116611d8e576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081612a4981601f6147d5565b1015612a975760405162461bcd60e51b815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610a53565b612aa182846147d5565b84511015612af15760405162461bcd60e51b815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610a53565b606082158015612b105760405191506000825260208201604052612b5a565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015612b49578051835260209283019201612b31565b5050858452601f01601f1916604052505b50949350505050565b600260005403612bb55760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610a53565b6002600055565b61ffff86166000908152600660205260408082209051612bdf9088908890613dd9565b908152604080516020928190038301902067ffffffffffffffff871660009081529252902054905080612c7a5760405162461bcd60e51b815260206004820152602360248201527f4e6f6e626c6f636b696e674c7a4170703a206e6f2073746f726564206d65737360448201527f61676500000000000000000000000000000000000000000000000000000000006064820152608401610a53565b808383604051612c8b929190613dd9565b604051809103902014612d065760405162461bcd60e51b815260206004820152602160248201527f4e6f6e626c6f636b696e674c7a4170703a20696e76616c6964207061796c6f6160448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610a53565b61ffff87166000908152600660205260408082209051612d299089908990613dd9565b908152604080516020928190038301812067ffffffffffffffff8916600090815290845282902093909355601f88018290048202830182019052868252612dc2918991899089908190840183828082843760009201919091525050604080516020601f8a018190048102820181019092528881528a93509150889088908190840183828082843760009201919091525061257f92505050565b7fc264d91f3adc5588250e1551f547752ca0cfa8f6b530d243b9f9f4cab10ea8e58787878785604051612df99594939291906147e8565b60405180910390a150505050505050565b6001805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000606060008060008661ffff1667ffffffffffffffff811115612ea757612ea7613990565b6040519080825280601f01601f191660200182016040528015612ed1576020820181803683370190505b50905060008087516020890160008d8df191503d925086831115612ef3578692505b828152826000602083013e909890975095505050505050565b60075460ff16610ee75760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610a53565b60075460ff1615610ee75760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610a53565b600954600a544291906201518090612fc99084613f67565b1115612fdb5750600a81905581612fe8565b612fe583826147d5565b90505b60085481111561303a5760405162461bcd60e51b815260206004820181905260248201527f4461696c79205472616e73616374696f6e204c696d69742045786365656465646044820152606401610a53565b6009555050565b6000818152600d60209081526040808320600681015462010000900460ff168452600e83528184205482517f6a42b8f8000000000000000000000000000000000000000000000000000000008152925191949373ffffffffffffffffffffffffffffffffffffffff90911692636a42b8f892600480830193928290030181865afa1580156130d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130f79190614824565b61310190426147d5565b60018084018290556000858152600f602052604090819020805460ff191690921790915560068401546002850154915192935062010000900460ff169185907f9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda28929061316f9086815260200190565b60405180910390a260005b818110156113845761333785600201828154811061319a5761319a613de9565b60009182526020909120015460038701805473ffffffffffffffffffffffffffffffffffffffff90921691849081106131d5576131d5613de9565b90600052602060002001548760040184815481106131f5576131f5613de9565b90600052602060002001805461320a90613d8c565b80601f016020809104026020016040519081016040528092919081815260200182805461323690613d8c565b80156132835780601f1061325857610100808354040283529160200191613283565b820191906000526020600020905b81548152906001019060200180831161326657829003601f168201915b505050505088600501858154811061329d5761329d613de9565b9060005260206000200180546132b290613d8c565b80601f01602080910402602001604051908101604052809291908181526020018280546132de90613d8c565b801561332b5780601f106133005761010080835404028352916020019161332b565b820191906000526020600020905b81548152906001019060200180831161330e57829003601f168201915b5050505050888861333f565b60010161317a565b60ff81166000908152600e602090815260409182902054915173ffffffffffffffffffffffffffffffffffffffff9092169163f2b065379161338b918a918a918a918a918a910161483d565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004016133bf91815260200190565b602060405180830381865afa1580156133dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134009190614884565b156134bf5760405162461bcd60e51b815260206004820152606360248201527f4f6d6e69636861696e476f7665726e616e63654578656375746f723a3a71756560448201527f75654f72526576657274496e7465726e616c3a206964656e746963616c20707260648201527f6f706f73616c20616374696f6e20616c7265616479207175657565642061742060848201527f657461000000000000000000000000000000000000000000000000000000000060a482015260c401610a53565b60ff81166000908152600e6020526040908190205490517f3a66f90100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690633a66f9019061352e908990899089908990899060040161483d565b6020604051808303816000875af115801561354d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1e9190614824565b8280548282559060005260206000209081019282156135eb579160200282015b828111156135eb57825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909116178255602090920191600190910190613591565b506135f79291506136da565b5090565b8280548282559060005260206000209081019282156135eb579160200282015b828111156135eb57825182559160200191906001019061361b565b82805482825590600052602060002090810192821561367c579160200282015b8281111561367c578251829061366c9082614001565b5091602001919060010190613656565b506135f79291506136ef565b8280548282559060005260206000209081019282156136ce579160200282015b828111156136ce57825182906136be9082614001565b50916020019190600101906136a8565b506135f792915061370c565b5b808211156135f757600081556001016136db565b808211156135f75760006137038282613729565b506001016136ef565b808211156135f75760006137208282613729565b5060010161370c565b50805461373590613d8c565b6000825580601f10613745575050565b601f016020900490600052602060002090810190611d8e91906136da565b803561ffff8116811461377557600080fd5b919050565b60008083601f84011261378c57600080fd5b50813567ffffffffffffffff8111156137a457600080fd5b6020830191508360208285010111156137bc57600080fd5b9250929050565b803567ffffffffffffffff8116811461377557600080fd5b600080600080600080608087890312156137f457600080fd5b6137fd87613763565b9550602087013567ffffffffffffffff8082111561381a57600080fd5b6138268a838b0161377a565b909750955085915061383a60408a016137c3565b9450606089013591508082111561385057600080fd5b5061385d89828a0161377a565b979a9699509497509295939492505050565b60006020828403121561388157600080fd5b5035919050565b60006020828403121561389a57600080fd5b610e3982613763565b600080604083850312156138b657600080fd5b6138bf83613763565b946020939093013593505050565b6000806000604084860312156138e257600080fd5b6138eb84613763565b9250602084013567ffffffffffffffff81111561390757600080fd5b6139138682870161377a565b9497909650939450505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016003831061398a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156139e8576139e8613990565b604052919050565b600067ffffffffffffffff821115613a0a57613a0a613990565b50601f01601f191660200190565b600080600060608486031215613a2d57600080fd5b613a3684613763565b9250602084013567ffffffffffffffff811115613a5257600080fd5b8401601f81018613613a6357600080fd5b8035613a76613a71826139f0565b6139bf565b818152876020838501011115613a8b57600080fd5b81602084016020830137600060208383010152809450505050613ab0604085016137c3565b90509250925092565b60005b83811015613ad4578181015183820152602001613abc565b50506000910152565b60008151808452613af5816020860160208601613ab9565b601f01601f19169290920160200192915050565b602081526000610e396020830184613add565b73ffffffffffffffffffffffffffffffffffffffff81168114611d8e57600080fd5b600060208284031215613b5057600080fd5b8135610e3981613b1c565b60008060408385031215613b6e57600080fd5b613b7783613763565b9150613b8560208401613763565b90509250929050565b600080600080600060808688031215613ba657600080fd5b613baf86613763565b9450613bbd60208701613763565b935060408601359250606086013567ffffffffffffffff811115613be057600080fd5b613bec8882890161377a565b969995985093965092949392505050565b600080600060608486031215613c1257600080fd5b613c1b84613763565b9250613c2960208501613763565b9150604084013590509250925092565b600067ffffffffffffffff821115613c5357613c53613990565b5060051b60200190565b60006020808385031215613c7057600080fd5b823567ffffffffffffffff811115613c8757600080fd5b8301601f81018513613c9857600080fd5b8035613ca6613a7182613c39565b81815260059190911b82018301908381019087831115613cc557600080fd5b928401925b82841015613cec578335613cdd81613b1c565b82529284019290840190613cca565b979650505050505050565b60ff81168114611d8e57600080fd5b60008060408385031215613d1957600080fd5b8235613d2481613b1c565b91506020830135613d3481613cf7565b809150509250929050565b60008060008060808587031215613d5557600080fd5b613d5e85613763565b9350613d6c60208601613763565b92506040850135613d7c81613b1c565b9396929550929360600135925050565b600181811c90821680613da057607f821691505b602082108103610ed1577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008154613e2581613d8c565b808552602060018381168015613e425760018114613e5c57613e8a565b60ff198516838901528284151560051b8901019550613e8a565b866000528260002060005b85811015613e825781548a8201860152908301908401613e67565b890184019650505b505050505092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000613eca60a0830186613e18565b8281036060840152613edc8186613e18565b9150508260808301529695505050505050565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b61ffff84168152604060208201526000611ffd604083018486613eef565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115613f7a57613f7a613f38565b92915050565b8284823760609190911b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169101908152601401919050565b601f821115611cef576000816000526020600020601f850160051c81016020861015613fe25750805b601f850160051c820191505b8181101561138457828155600101613fee565b815167ffffffffffffffff81111561401b5761401b613990565b61402f816140298454613d8c565b84613fb9565b602080601f831160018114614082576000841561404c5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555611384565b600085815260208120601f198616915b828110156140b157888601518255948401946001909101908401614092565b50858210156140ed57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600061ffff808816835280871660208401525084604083015260806060830152613cec608083018486613eef565b600080835461413981613d8c565b60018281168015614151576001811461416657614195565b60ff1984168752821515830287019450614195565b8760005260208060002060005b8581101561418c5781548a820152908401908201614173565b50505082870194505b50929695505050505050565b67ffffffffffffffff8311156141b9576141b9613990565b6141cd836141c78354613d8c565b83613fb9565b6000601f84116001811461421f57600085156141e95750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355610ccf565b600083815260209020601f19861690835b828110156142505786850135825560209485019460019092019101614230565b508682101561428b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b60ff8181168382160190811115613f7a57613f7a613f38565b60006142c4613a71846139f0565b90508281528383830111156142d857600080fd5b610e39836020830184613ab9565b600082601f8301126142f757600080fd5b610e39838351602085016142b6565b60006020828403121561431857600080fd5b815167ffffffffffffffff81111561432f57600080fd5b61433b848285016142e6565b949350505050565b61ffff851681526080602082015260006143606080830186613add565b67ffffffffffffffff851660408401528281036060840152613cec8185613add565b60008251614394818460208701613ab9565b9190910192915050565b67ffffffffffffffff8316815260406020820152600061433b6040830184613add565b600080604083850312156143d457600080fd5b825167ffffffffffffffff8111156143eb57600080fd5b6143f7858286016142e6565b925050602083015190509250929050565b600082601f83011261441957600080fd5b81516020614429613a7183613c39565b8083825260208201915060208460051b87010193508684111561444b57600080fd5b602086015b848110156144675780518352918301918301614450565b509695505050505050565b600082601f83011261448357600080fd5b81516020614493613a7183613c39565b82815260059290921b840181019181810190868411156144b257600080fd5b8286015b8481101561446757805167ffffffffffffffff8111156144d65760008081fd5b8701603f810189136144e85760008081fd5b6144f98986830151604084016142b6565b8452509183019183016144b6565b600082601f83011261451857600080fd5b81516020614528613a7183613c39565b82815260059290921b8401810191818101908684111561454757600080fd5b8286015b8481101561446757805167ffffffffffffffff81111561456b5760008081fd5b6145798986838b01016142e6565b84525091830191830161454b565b805161377581613cf7565b600080600080600060a086880312156145aa57600080fd5b855167ffffffffffffffff808211156145c257600080fd5b818801915088601f8301126145d657600080fd5b815160206145e6613a7183613c39565b82815260059290921b8401810191818101908c84111561460557600080fd5b948201945b8386101561462c57855161461d81613b1c565b8252948201949082019061460a565b918b015191995090935050508082111561464557600080fd5b61465189838a01614408565b9550604088015191508082111561466757600080fd5b61467389838a01614472565b9450606088015191508082111561468957600080fd5b5061469688828901614507565b9250506146a560808701614587565b90509295509295909350565b60008282518085526020808601955060208260051b8401016020860160005b848110156146fe57601f198684030189526146ec838351613add565b988401989250908301906001016146d0565b5090979650505050505050565b60a0808252865190820181905260009060209060c0840190828a01845b8281101561475a57815173ffffffffffffffffffffffffffffffffffffffff1684529284019290840190600101614728565b5050508381038285015287518082528883019183019060005b8181101561478f57835183529284019291840191600101614773565b505084810360408601526147a381896146b1565b9250505082810360608401526147b981866146b1565b9150506147cb608083018460ff169052565b9695505050505050565b80820180821115613f7a57613f7a613f38565b61ffff86168152608060208201526000614806608083018688613eef565b67ffffffffffffffff94909416604083015250606001529392505050565b60006020828403121561483657600080fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a06040820152600061487260a0830186613add565b8281036060840152613edc8186613add565b60006020828403121561489657600080fd5b81518015158114610e3957600080fdfea26469706673582212206e9b4e0e8423ddd67a12f6b1a136938a978661714c282ede340b91a73060ecf464736f6c63430008190033",
  "devdoc": {
    "custom:security-contact": "https://github.com/VenusProtocol/governance-contracts#discussion",
    "details": "The owner of this contract controls LayerZero configuration. When used in production the owner will be OmnichainExecutor This implementation is non-blocking, meaning the failed messages will not block the future messages from the source. For the blocking behavior, derive the contract from LzApp.",
    "events": {
      "Paused(address)": {
        "details": "Emitted when the pause is triggered by `account`."
      },
      "Unpaused(address)": {
        "details": "Emitted when the pause is lifted by `account`."
      }
    },
    "kind": "dev",
    "methods": {
      "addTimelocks(address[])": {
        "custom:access": "Only owner",
        "custom:event": "Emits TimelockAdded with old and new timelock and route type",
        "params": {
          "timelocks_": "Array of addresses of all 3 timelocks"
        }
      },
      "cancel(uint256)": {
        "custom:access": "Sender must be the guardian",
        "custom:event": "Emits ProposalCanceled with proposal id of the canceled proposal",
        "params": {
          "proposalId_": "Id of proposal that is to be canceled"
        }
      },
      "execute(uint256)": {
        "custom:event": "Emits ProposalExecuted with proposal id of executed proposal",
        "params": {
          "proposalId_": "Id of proposal that is to be executed"
        }
      },
      "owner()": {
        "details": "Returns the address of the current owner."
      },
      "pause()": {
        "custom:access": "Only owner"
      },
      "paused()": {
        "details": "Returns true if the contract is paused, and false otherwise."
      },
      "retryMessage(uint16,bytes,uint64,bytes)": {
        "custom:access": "Only owner",
        "params": {
          "nonce_": "Nonce to identify failed message",
          "payload_": "The payload of the message to be retried",
          "srcAddress_": "Source address => local app address + remote app address",
          "srcChainId_": "Source chain Id"
        }
      },
      "setGuardian(address)": {
        "custom:access": "Must be call by guardian or owner",
        "custom:event": "Emit NewGuardian with old and new guardian address",
        "params": {
          "newGuardian": "The address of the new guardian"
        }
      },
      "setMaxDailyReceiveLimit(uint256)": {
        "custom:access": "Only Owner",
        "custom:event": "Emits SetMaxDailyReceiveLimit with old and new limit",
        "params": {
          "limit_": "Number of commands"
        }
      },
      "setSrcChainId(uint16)": {
        "custom:access": "Only owner",
        "custom:event": "Emit SetSrcChainId with old and new source id",
        "params": {
          "srcChainId_": "The new source chain id to be set"
        }
      },
      "setTimelockPendingAdmin(address,uint8)": {
        "custom:access": "Only owner",
        "custom:event": "Emits SetTimelockPendingAdmin with new pending admin and proposal type",
        "params": {
          "pendingAdmin_": "Address of new pending admin",
          "proposalType_": "Type of proposal"
        }
      },
      "state(uint256)": {
        "params": {
          "proposalId_": "The id of the proposal"
        },
        "returns": {
          "_0": "Proposal state"
        }
      },
      "transferOwnership(address)": {
        "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
      },
      "unpause()": {
        "custom:access": "Only owner"
      }
    },
    "title": "OmnichainGovernanceExecutor",
    "version": 1
  },
  "userdoc": {
    "errors": {
      "InvalidProposalId()": [
        {
          "notice": "Thrown when proposal ID is invalid"
        }
      ],
      "ZeroAddressNotAllowed()": [
        {
          "notice": "Thrown if the supplied address is a zero address where it is not allowed"
        }
      ]
    },
    "events": {
      "NewGuardian(address,address)": {
        "notice": "Emitted when new guardian address is set"
      },
      "ProposalCanceled(uint256)": {
        "notice": "Emitted when proposal is canceled"
      },
      "ProposalExecuted(uint256)": {
        "notice": "Emitted when proposal executed"
      },
      "ProposalQueued(uint256,uint256)": {
        "notice": "Emitted when proposal is queued"
      },
      "ProposalReceived(uint256,address[],uint256[],string[],bytes[],uint8)": {
        "notice": "Emitted when proposal is received"
      },
      "ReceivePayloadFailed(uint16,bytes,uint64,bytes)": {
        "notice": "Emitted when proposal failed"
      },
      "SetMaxDailyReceiveLimit(uint256,uint256)": {
        "notice": "Emitted when the maximum daily limit for receiving command from Binance chain is modified"
      },
      "SetSrcChainId(uint16,uint16)": {
        "notice": "Emitted when source layerzero endpoint id is updated"
      },
      "SetTimelockPendingAdmin(address,uint8)": {
        "notice": "Emitted when pending admin of Timelock is updated"
      },
      "TimelockAdded(uint8,address,address)": {
        "notice": "Emitted when timelock added"
      }
    },
    "kind": "user",
    "methods": {
      "addTimelocks(address[])": {
        "notice": "Add timelocks to the ProposalTimelocks mapping"
      },
      "cancel(uint256)": {
        "notice": "Cancels a proposal only if sender is the guardian and proposal is not executed"
      },
      "execute(uint256)": {
        "notice": "Executes a queued proposal if eta has passed"
      },
      "guardian()": {
        "notice": "A privileged role that can cancel any proposal"
      },
      "last24HourCommandsReceived()": {
        "notice": "Total received commands within the last 24-hour window from Binance chain"
      },
      "last24HourReceiveWindowStart()": {
        "notice": "Timestamp when the last 24-hour window started from Binance chain"
      },
      "lastProposalReceived()": {
        "notice": "Last proposal count received"
      },
      "maxDailyReceiveLimit()": {
        "notice": "Maximum daily limit for receiving commands from Binance chain"
      },
      "pause()": {
        "notice": "Triggers the paused state of the controller"
      },
      "proposalTimelocks(uint256)": {
        "notice": "Mapping containing Timelock addresses for each proposal type"
      },
      "proposals(uint256)": {
        "notice": "The official record of all proposals ever proposed"
      },
      "queued(uint256)": {
        "notice": "Represents queue state of proposal"
      },
      "renounceOwnership()": {
        "notice": "Empty implementation of renounce ownership to avoid any mishappening"
      },
      "retryMessage(uint16,bytes,uint64,bytes)": {
        "notice": "Resends a previously failed message"
      },
      "setGuardian(address)": {
        "notice": "Sets the new executor guardian"
      },
      "setMaxDailyReceiveLimit(uint256)": {
        "notice": "Sets the maximum daily limit for receiving commands"
      },
      "setSrcChainId(uint16)": {
        "notice": "Update source layerzero endpoint id"
      },
      "setTimelockPendingAdmin(address,uint8)": {
        "notice": "Sets the new pending admin of the Timelock"
      },
      "srcChainId()": {
        "notice": "Stores BNB chain layerzero endpoint id"
      },
      "state(uint256)": {
        "notice": "Gets the state of a proposal"
      },
      "unpause()": {
        "notice": "Triggers the resume state of the controller"
      }
    },
    "notice": "Executes the proposal transactions sent from the main chain",
    "version": 1
  },
  "storageLayout": {
    "storage": [
      {
        "astId": 3983,
        "contract": "contracts/Cross-chain/OmnichainGovernanceExecutor.sol:OmnichainGovernanceExecutor",
        "label": "_status",
        "offset": 0,
        "slot": "0",
        "type": "t_uint256"
      },
      {
        "astId": 3759,
        "contract": "contracts/Cross-chain/OmnichainGovernanceExecutor.sol:OmnichainGovernanceExecutor",
        "label": "_owner",
        "offset": 0,
        "slot": "1",
        "type": "t_address"
      },
      {
        "astId": 455,
        "contract": "contracts/Cross-chain/OmnichainGovernanceExecutor.sol:OmnichainGovernanceExecutor",
        "label": "trustedRemoteLookup",
        "offset": 0,
        "slot": "2",
        "type": "t_mapping(t_uint16,t_bytes_storage)"
      },
      {
        "astId": 461,
        "contract": "contracts/Cross-chain/OmnichainGovernanceExecutor.sol:OmnichainGovernanceExecutor",
        "label": "minDstGasLookup",
        "offset": 0,
        "slot": "3",
        "type": "t_mapping(t_uint16,t_mapping(t_uint16,t_uint256))"
      },
      {
        "astId": 465,
        "contract": "contracts/Cross-chain/OmnichainGovernanceExecutor.sol:OmnichainGovernanceExecutor",
        "label": "payloadSizeLimitLookup",
        "offset": 0,
        "slot": "4",
        "type": "t_mapping(t_uint16,t_uint256)"
      },
      {
        "astId": 467,
        "contract": "contracts/Cross-chain/OmnichainGovernanceExecutor.sol:OmnichainGovernanceExecutor",
        "label": "precrime",
        "offset": 0,
        "slot": "5",
        "type": "t_address"
      },
      {
        "astId": 997,
        "contract": "contracts/Cross-chain/OmnichainGovernanceExecutor.sol:OmnichainGovernanceExecutor",
        "label": "failedMessages",
        "offset": 0,
        "slot": "6",
        "type": "t_mapping(t_uint16,t_mapping(t_bytes_memory_ptr,t_mapping(t_uint64,t_bytes32)))"
      },
      {
        "astId": 3882,
        "contract": "contracts/Cross-chain/OmnichainGovernanceExecutor.sol:OmnichainGovernanceExecutor",
        "label": "_paused",
        "offset": 0,
        "slot": "7",
        "type": "t_bool"
      },
      {
        "astId": 4105,
        "contract": "contracts/Cross-chain/OmnichainGovernanceExecutor.sol:OmnichainGovernanceExecutor",
        "label": "maxDailyReceiveLimit",
        "offset": 0,
        "slot": "8",
        "type": "t_uint256"
      },
      {
        "astId": 4108,
        "contract": "contracts/Cross-chain/OmnichainGovernanceExecutor.sol:OmnichainGovernanceExecutor",
        "label": "last24HourCommandsReceived",
        "offset": 0,
        "slot": "9",
        "type": "t_uint256"
      },
      {
        "astId": 4111,
        "contract": "contracts/Cross-chain/OmnichainGovernanceExecutor.sol:OmnichainGovernanceExecutor",
        "label": "last24HourReceiveWindowStart",
        "offset": 0,
        "slot": "10",
        "type": "t_uint256"
      },
      {
        "astId": 4859,
        "contract": "contracts/Cross-chain/OmnichainGovernanceExecutor.sol:OmnichainGovernanceExecutor",
        "label": "guardian",
        "offset": 0,
        "slot": "11",
        "type": "t_address"
      },
      {
        "astId": 4862,
        "contract": "contracts/Cross-chain/OmnichainGovernanceExecutor.sol:OmnichainGovernanceExecutor",
        "label": "srcChainId",
        "offset": 20,
        "slot": "11",
        "type": "t_uint16"
      },
      {
        "astId": 4865,
        "contract": "contracts/Cross-chain/OmnichainGovernanceExecutor.sol:OmnichainGovernanceExecutor",
        "label": "lastProposalReceived",
        "offset": 0,
        "slot": "12",
        "type": "t_uint256"
      },
      {
        "astId": 4871,
        "contract": "contracts/Cross-chain/OmnichainGovernanceExecutor.sol:OmnichainGovernanceExecutor",
        "label": "proposals",
        "offset": 0,
        "slot": "13",
        "type": "t_mapping(t_uint256,t_struct(Proposal)4852_storage)"
      },
      {
        "astId": 4877,
        "contract": "contracts/Cross-chain/OmnichainGovernanceExecutor.sol:OmnichainGovernanceExecutor",
        "label": "proposalTimelocks",
        "offset": 0,
        "slot": "14",
        "type": "t_mapping(t_uint256,t_contract(ITimelock)6619)"
      },
      {
        "astId": 4882,
        "contract": "contracts/Cross-chain/OmnichainGovernanceExecutor.sol:OmnichainGovernanceExecutor",
        "label": "queued",
        "offset": 0,
        "slot": "15",
        "type": "t_mapping(t_uint256,t_bool)"
      }
    ],
    "types": {
      "t_address": {
        "encoding": "inplace",
        "label": "address",
        "numberOfBytes": "20"
      },
      "t_array(t_address)dyn_storage": {
        "base": "t_address",
        "encoding": "dynamic_array",
        "label": "address[]",
        "numberOfBytes": "32"
      },
      "t_array(t_bytes_storage)dyn_storage": {
        "base": "t_bytes_storage",
        "encoding": "dynamic_array",
        "label": "bytes[]",
        "numberOfBytes": "32"
      },
      "t_array(t_string_storage)dyn_storage": {
        "base": "t_string_storage",
        "encoding": "dynamic_array",
        "label": "string[]",
        "numberOfBytes": "32"
      },
      "t_array(t_uint256)dyn_storage": {
        "base": "t_uint256",
        "encoding": "dynamic_array",
        "label": "uint256[]",
        "numberOfBytes": "32"
      },
      "t_bool": {
        "encoding": "inplace",
        "label": "bool",
        "numberOfBytes": "1"
      },
      "t_bytes32": {
        "encoding": "inplace",
        "label": "bytes32",
        "numberOfBytes": "32"
      },
      "t_bytes_memory_ptr": {
        "encoding": "bytes",
        "label": "bytes",
        "numberOfBytes": "32"
      },
      "t_bytes_storage": {
        "encoding": "bytes",
        "label": "bytes",
        "numberOfBytes": "32"
      },
      "t_contract(ITimelock)6619": {
        "encoding": "inplace",
        "label": "contract ITimelock",
        "numberOfBytes": "20"
      },
      "t_mapping(t_bytes_memory_ptr,t_mapping(t_uint64,t_bytes32))": {
        "encoding": "mapping",
        "key": "t_bytes_memory_ptr",
        "label": "mapping(bytes => mapping(uint64 => bytes32))",
        "numberOfBytes": "32",
        "value": "t_mapping(t_uint64,t_bytes32)"
      },
      "t_mapping(t_uint16,t_bytes_storage)": {
        "encoding": "mapping",
        "key": "t_uint16",
        "label": "mapping(uint16 => bytes)",
        "numberOfBytes": "32",
        "value": "t_bytes_storage"
      },
      "t_mapping(t_uint16,t_mapping(t_bytes_memory_ptr,t_mapping(t_uint64,t_bytes32)))": {
        "encoding": "mapping",
        "key": "t_uint16",
        "label": "mapping(uint16 => mapping(bytes => mapping(uint64 => bytes32)))",
        "numberOfBytes": "32",
        "value": "t_mapping(t_bytes_memory_ptr,t_mapping(t_uint64,t_bytes32))"
      },
      "t_mapping(t_uint16,t_mapping(t_uint16,t_uint256))": {
        "encoding": "mapping",
        "key": "t_uint16",
        "label": "mapping(uint16 => mapping(uint16 => uint256))",
        "numberOfBytes": "32",
        "value": "t_mapping(t_uint16,t_uint256)"
      },
      "t_mapping(t_uint16,t_uint256)": {
        "encoding": "mapping",
        "key": "t_uint16",
        "label": "mapping(uint16 => uint256)",
        "numberOfBytes": "32",
        "value": "t_uint256"
      },
      "t_mapping(t_uint256,t_bool)": {
        "encoding": "mapping",
        "key": "t_uint256",
        "label": "mapping(uint256 => bool)",
        "numberOfBytes": "32",
        "value": "t_bool"
      },
      "t_mapping(t_uint256,t_contract(ITimelock)6619)": {
        "encoding": "mapping",
        "key": "t_uint256",
        "label": "mapping(uint256 => contract ITimelock)",
        "numberOfBytes": "32",
        "value": "t_contract(ITimelock)6619"
      },
      "t_mapping(t_uint256,t_struct(Proposal)4852_storage)": {
        "encoding": "mapping",
        "key": "t_uint256",
        "label": "mapping(uint256 => struct OmnichainGovernanceExecutor.Proposal)",
        "numberOfBytes": "32",
        "value": "t_struct(Proposal)4852_storage"
      },
      "t_mapping(t_uint64,t_bytes32)": {
        "encoding": "mapping",
        "key": "t_uint64",
        "label": "mapping(uint64 => bytes32)",
        "numberOfBytes": "32",
        "value": "t_bytes32"
      },
      "t_string_storage": {
        "encoding": "bytes",
        "label": "string",
        "numberOfBytes": "32"
      },
      "t_struct(Proposal)4852_storage": {
        "encoding": "inplace",
        "label": "struct OmnichainGovernanceExecutor.Proposal",
        "members": [
          {
            "astId": 4823,
            "contract": "contracts/Cross-chain/OmnichainGovernanceExecutor.sol:OmnichainGovernanceExecutor",
            "label": "id",
            "offset": 0,
            "slot": "0",
            "type": "t_uint256"
          },
          {
            "astId": 4826,
            "contract": "contracts/Cross-chain/OmnichainGovernanceExecutor.sol:OmnichainGovernanceExecutor",
            "label": "eta",
            "offset": 0,
            "slot": "1",
            "type": "t_uint256"
          },
          {
            "astId": 4830,
            "contract": "contracts/Cross-chain/OmnichainGovernanceExecutor.sol:OmnichainGovernanceExecutor",
            "label": "targets",
            "offset": 0,
            "slot": "2",
            "type": "t_array(t_address)dyn_storage"
          },
          {
            "astId": 4834,
            "contract": "contracts/Cross-chain/OmnichainGovernanceExecutor.sol:OmnichainGovernanceExecutor",
            "label": "values",
            "offset": 0,
            "slot": "3",
            "type": "t_array(t_uint256)dyn_storage"
          },
          {
            "astId": 4838,
            "contract": "contracts/Cross-chain/OmnichainGovernanceExecutor.sol:OmnichainGovernanceExecutor",
            "label": "signatures",
            "offset": 0,
            "slot": "4",
            "type": "t_array(t_string_storage)dyn_storage"
          },
          {
            "astId": 4842,
            "contract": "contracts/Cross-chain/OmnichainGovernanceExecutor.sol:OmnichainGovernanceExecutor",
            "label": "calldatas",
            "offset": 0,
            "slot": "5",
            "type": "t_array(t_bytes_storage)dyn_storage"
          },
          {
            "astId": 4845,
            "contract": "contracts/Cross-chain/OmnichainGovernanceExecutor.sol:OmnichainGovernanceExecutor",
            "label": "canceled",
            "offset": 0,
            "slot": "6",
            "type": "t_bool"
          },
          {
            "astId": 4848,
            "contract": "contracts/Cross-chain/OmnichainGovernanceExecutor.sol:OmnichainGovernanceExecutor",
            "label": "executed",
            "offset": 1,
            "slot": "6",
            "type": "t_bool"
          },
          {
            "astId": 4851,
            "contract": "contracts/Cross-chain/OmnichainGovernanceExecutor.sol:OmnichainGovernanceExecutor",
            "label": "proposalType",
            "offset": 2,
            "slot": "6",
            "type": "t_uint8"
          }
        ],
        "numberOfBytes": "224"
      },
      "t_uint16": {
        "encoding": "inplace",
        "label": "uint16",
        "numberOfBytes": "2"
      },
      "t_uint256": {
        "encoding": "inplace",
        "label": "uint256",
        "numberOfBytes": "32"
      },
      "t_uint64": {
        "encoding": "inplace",
        "label": "uint64",
        "numberOfBytes": "8"
      },
      "t_uint8": {
        "encoding": "inplace",
        "label": "uint8",
        "numberOfBytes": "1"
      }
    }
  }
}
