{
  "address": "0xBd06aCDEF38230F4EdA0c6FD392905Ad463e42E3",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "admin_",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "delay_",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "ZeroAddressNotAllowed",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "txHash",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "signature",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "eta",
          "type": "uint256"
        }
      ],
      "name": "CancelTransaction",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "txHash",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "signature",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "eta",
          "type": "uint256"
        }
      ],
      "name": "ExecuteTransaction",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "oldAdmin",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newAdmin",
          "type": "address"
        }
      ],
      "name": "NewAdmin",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "oldDelay",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "newDelay",
          "type": "uint256"
        }
      ],
      "name": "NewDelay",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "newPendingAdmin",
          "type": "address"
        }
      ],
      "name": "NewPendingAdmin",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "txHash",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "signature",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "eta",
          "type": "uint256"
        }
      ],
      "name": "QueueTransaction",
      "type": "event"
    },
    {
      "stateMutability": "payable",
      "type": "fallback"
    },
    {
      "inputs": [],
      "name": "GRACE_PERIOD",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "MAXIMUM_DELAY",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "MINIMUM_DELAY",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "acceptAdmin",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "admin",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "string",
          "name": "signature",
          "type": "string"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "internalType": "uint256",
          "name": "eta",
          "type": "uint256"
        }
      ],
      "name": "cancelTransaction",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "delay",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "string",
          "name": "signature",
          "type": "string"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "internalType": "uint256",
          "name": "eta",
          "type": "uint256"
        }
      ],
      "name": "executeTransaction",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pendingAdmin",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "string",
          "name": "signature",
          "type": "string"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "internalType": "uint256",
          "name": "eta",
          "type": "uint256"
        }
      ],
      "name": "queueTransaction",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "queuedTransactions",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "delay_",
          "type": "uint256"
        }
      ],
      "name": "setDelay",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "pendingAdmin_",
          "type": "address"
        }
      ],
      "name": "setPendingAdmin",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "transactionHash": "0xa2a07fb3e528a40a17b6b9d5612671ac9870cf288eb0e5264b377b1daab7aebd",
  "receipt": {
    "to": null,
    "from": "0x058cE69938B5e675136B77e1dB27709D52e2b514",
    "contractAddress": "0xBd06aCDEF38230F4EdA0c6FD392905Ad463e42E3",
    "transactionIndex": 1,
    "gasUsed": "1178183",
    "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
    "blockHash": "0xb9b4500d5019308ca8e4e6c88f9f6e703647c4752543b09e1d00b034d242859d",
    "transactionHash": "0xa2a07fb3e528a40a17b6b9d5612671ac9870cf288eb0e5264b377b1daab7aebd",
    "logs": [],
    "blockNumber": 30781221,
    "cumulativeGasUsed": "1222034",
    "status": 1,
    "byzantium": true
  },
  "args": ["0x0aa644c4408268E9fED5089A113470B6e706bc0C", 100],
  "numDeployments": 1,
  "solcInputHash": "9502a5c5f11a50dbda919350552094a0",
  "metadata": "{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"delay_\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"txHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"signature\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"eta\",\"type\":\"uint256\"}],\"name\":\"CancelTransaction\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"txHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"signature\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"eta\",\"type\":\"uint256\"}],\"name\":\"ExecuteTransaction\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldAdmin\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"NewAdmin\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"oldDelay\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newDelay\",\"type\":\"uint256\"}],\"name\":\"NewDelay\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newPendingAdmin\",\"type\":\"address\"}],\"name\":\"NewPendingAdmin\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"txHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"signature\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"eta\",\"type\":\"uint256\"}],\"name\":\"QueueTransaction\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"GRACE_PERIOD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELAY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MINIMUM_DELAY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"signature\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"eta\",\"type\":\"uint256\"}],\"name\":\"cancelTransaction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"signature\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"eta\",\"type\":\"uint256\"}],\"name\":\"executeTransaction\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"signature\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"eta\",\"type\":\"uint256\"}],\"name\":\"queueTransaction\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"queuedTransactions\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"delay_\",\"type\":\"uint256\"}],\"name\":\"setDelay\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pendingAdmin_\",\"type\":\"address\"}],\"name\":\"setPendingAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Venus\",\"kind\":\"dev\",\"methods\":{\"GRACE_PERIOD()\":{\"returns\":{\"_0\":\"The duration of the grace period, specified as a uint256 value.\"}},\"MAXIMUM_DELAY()\":{\"returns\":{\"_0\":\"Maximum delay\"}},\"MINIMUM_DELAY()\":{\"returns\":{\"_0\":\"Minimum delay\"}},\"acceptAdmin()\":{\"custom:access\":\"Sender must be pending admin\",\"custom:event\":\"Emit NewAdmin with old and new admin\"},\"cancelTransaction(address,uint256,string,bytes,uint256)\":{\"custom:access\":\"Sender must be admin\",\"custom:event\":\"Emit CancelTransaction\",\"params\":{\"data\":\"Arguments to be passed to the function when called\",\"eta\":\"Timestamp after which the transaction can be executed\",\"signature\":\"Signature of the function to be called\",\"target\":\"Address of the contract with the method to be called\",\"value\":\"Native token amount sent with the transaction\"}},\"executeTransaction(address,uint256,string,bytes,uint256)\":{\"custom:access\":\"Sender must be admin\",\"custom:event\":\"Emit ExecuteTransaction\",\"params\":{\"data\":\"Arguments to be passed to the function when called\",\"eta\":\"Timestamp after which the transaction can be executed\",\"signature\":\"Signature of the function to be called\",\"target\":\"Address of the contract with the method to be called\",\"value\":\"Native token amount sent with the transaction\"},\"returns\":{\"_0\":\"Result of function call\"}},\"queueTransaction(address,uint256,string,bytes,uint256)\":{\"custom:access\":\"Sender must be admin\",\"custom:event\":\"Emit QueueTransaction\",\"params\":{\"data\":\"Arguments to be passed to the function when called\",\"eta\":\"Timestamp after which the transaction can be executed\",\"signature\":\"Signature of the function to be called\",\"target\":\"Address of the contract with the method to be called\",\"value\":\"Native token amount sent with the transaction\"},\"returns\":{\"_0\":\"Hash of the queued transaction\"}},\"setDelay(uint256)\":{\"custom:access\":\"Sender must be Timelock itself\",\"custom:event\":\"Emit NewDelay with old and new delay\",\"params\":{\"delay_\":\"The new delay period for the transaction queue\"}},\"setPendingAdmin(address)\":{\"custom:access\":\"Sender must be Timelock contract itself or admin\",\"custom:event\":\"Emit NewPendingAdmin with new pending admin\",\"params\":{\"pendingAdmin_\":\"Address of the proposed admin\"}}},\"title\":\"TimelockV8\",\"version\":1},\"userdoc\":{\"errors\":{\"ZeroAddressNotAllowed()\":[{\"notice\":\"Thrown if the supplied address is a zero address where it is not allowed\"}]},\"events\":{\"CancelTransaction(bytes32,address,uint256,string,bytes,uint256)\":{\"notice\":\"Event emitted when a proposal transaction has been cancelled\"},\"ExecuteTransaction(bytes32,address,uint256,string,bytes,uint256)\":{\"notice\":\"Event emitted when a proposal transaction has been executed\"},\"NewAdmin(address,address)\":{\"notice\":\"Event emitted when a new admin is accepted\"},\"NewDelay(uint256,uint256)\":{\"notice\":\"Event emitted when a new delay is proposed\"},\"NewPendingAdmin(address)\":{\"notice\":\"Event emitted when a new admin is proposed\"},\"QueueTransaction(bytes32,address,uint256,string,bytes,uint256)\":{\"notice\":\"Event emitted when a proposal transaction has been queued\"}},\"kind\":\"user\",\"methods\":{\"GRACE_PERIOD()\":{\"notice\":\"Return grace period\"},\"MAXIMUM_DELAY()\":{\"notice\":\"Return required maximum delay\"},\"MINIMUM_DELAY()\":{\"notice\":\"Return required minimum delay\"},\"acceptAdmin()\":{\"notice\":\"Method for accepting a proposed admin\"},\"admin()\":{\"notice\":\"Timelock admin authorized to queue and execute transactions\"},\"cancelTransaction(address,uint256,string,bytes,uint256)\":{\"notice\":\"Called to cancel a queued transaction\"},\"delay()\":{\"notice\":\"Period for a proposal transaction to be queued\"},\"executeTransaction(address,uint256,string,bytes,uint256)\":{\"notice\":\"Called to execute a queued transaction\"},\"pendingAdmin()\":{\"notice\":\"Account proposed as the next admin\"},\"queueTransaction(address,uint256,string,bytes,uint256)\":{\"notice\":\"Called for each action when queuing a proposal\"},\"queuedTransactions(bytes32)\":{\"notice\":\"Mapping of queued transactions\"},\"setDelay(uint256)\":{\"notice\":\"Setter for the transaction queue delay\"},\"setPendingAdmin(address)\":{\"notice\":\"Method to propose a new admin authorized to call timelock functions. This should be the Governor Contract\"}},\"notice\":\"The Timelock contract using solidity V8. This contract also differs from the original timelock because it has a virtual function to get minimum delays and allow test deployments to override the value.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/Governance/TimelockV8.sol\":\"TimelockV8\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[]},\"sources\":{\"@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/Governance/TimelockV8.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\nimport { ensureNonzeroAddress } from \\\"@venusprotocol/solidity-utilities/contracts/validators.sol\\\";\\n\\n/**\\n * @title TimelockV8\\n * @author Venus\\n * @notice The Timelock contract using solidity V8.\\n * This contract also differs from the original timelock because it has a virtual function to get minimum delays\\n * and allow test deployments to override the value.\\n */\\ncontract TimelockV8 {\\n    /// @notice Required period to execute a proposal transaction\\n    uint256 private constant DEFAULT_GRACE_PERIOD = 14 days;\\n\\n    /// @notice Minimum amount of time a proposal transaction must be queued\\n    uint256 private constant DEFAULT_MINIMUM_DELAY = 1 seconds;\\n\\n    /// @notice Maximum amount of time a proposal transaction must be queued\\n    uint256 private constant DEFAULT_MAXIMUM_DELAY = 30 days;\\n\\n    /// @notice Timelock admin authorized to queue and execute transactions\\n    address public admin;\\n\\n    /// @notice Account proposed as the next admin\\n    address public pendingAdmin;\\n\\n    /// @notice Period for a proposal transaction to be queued\\n    uint256 public delay;\\n\\n    /// @notice Mapping of queued transactions\\n    mapping(bytes32 => bool) public queuedTransactions;\\n\\n    /// @notice Event emitted when a new admin is accepted\\n    event NewAdmin(address indexed oldAdmin, address indexed newAdmin);\\n\\n    /// @notice Event emitted when a new admin is proposed\\n    event NewPendingAdmin(address indexed newPendingAdmin);\\n\\n    /// @notice Event emitted when a new delay is proposed\\n    event NewDelay(uint256 indexed oldDelay, uint256 indexed newDelay);\\n\\n    /// @notice Event emitted when a proposal transaction has been cancelled\\n    event CancelTransaction(\\n        bytes32 indexed txHash,\\n        address indexed target,\\n        uint256 value,\\n        string signature,\\n        bytes data,\\n        uint256 eta\\n    );\\n\\n    /// @notice Event emitted when a proposal transaction has been executed\\n    event ExecuteTransaction(\\n        bytes32 indexed txHash,\\n        address indexed target,\\n        uint256 value,\\n        string signature,\\n        bytes data,\\n        uint256 eta\\n    );\\n\\n    /// @notice Event emitted when a proposal transaction has been queued\\n    event QueueTransaction(\\n        bytes32 indexed txHash,\\n        address indexed target,\\n        uint256 value,\\n        string signature,\\n        bytes data,\\n        uint256 eta\\n    );\\n\\n    constructor(address admin_, uint256 delay_) {\\n        require(delay_ >= MINIMUM_DELAY(), \\\"Timelock::constructor: Delay must exceed minimum delay.\\\");\\n        require(delay_ <= MAXIMUM_DELAY(), \\\"Timelock::setDelay: Delay must not exceed maximum delay.\\\");\\n        ensureNonzeroAddress(admin_);\\n\\n        admin = admin_;\\n        delay = delay_;\\n    }\\n\\n    fallback() external payable {}\\n\\n    /**\\n     * @notice Setter for the transaction queue delay\\n     * @param delay_ The new delay period for the transaction queue\\n     * @custom:access Sender must be Timelock itself\\n     * @custom:event Emit NewDelay with old and new delay\\n     */\\n    function setDelay(uint256 delay_) public {\\n        require(msg.sender == address(this), \\\"Timelock::setDelay: Call must come from Timelock.\\\");\\n        require(delay_ >= MINIMUM_DELAY(), \\\"Timelock::setDelay: Delay must exceed minimum delay.\\\");\\n        require(delay_ <= MAXIMUM_DELAY(), \\\"Timelock::setDelay: Delay must not exceed maximum delay.\\\");\\n        emit NewDelay(delay, delay_);\\n        delay = delay_;\\n    }\\n\\n    /**\\n     * @notice Return grace period\\n     * @return The duration of the grace period, specified as a uint256 value.\\n     */\\n    function GRACE_PERIOD() public view virtual returns (uint256) {\\n        return DEFAULT_GRACE_PERIOD;\\n    }\\n\\n    /**\\n     * @notice Return required minimum delay\\n     * @return Minimum delay\\n     */\\n    function MINIMUM_DELAY() public view virtual returns (uint256) {\\n        return DEFAULT_MINIMUM_DELAY;\\n    }\\n\\n    /**\\n     * @notice Return required maximum delay\\n     * @return Maximum delay\\n     */\\n    function MAXIMUM_DELAY() public view virtual returns (uint256) {\\n        return DEFAULT_MAXIMUM_DELAY;\\n    }\\n\\n    /**\\n     * @notice Method for accepting a proposed admin\\n     * @custom:access Sender must be pending admin\\n     * @custom:event Emit NewAdmin with old and new admin\\n     */\\n    function acceptAdmin() public {\\n        require(msg.sender == pendingAdmin, \\\"Timelock::acceptAdmin: Call must come from pendingAdmin.\\\");\\n        emit NewAdmin(admin, msg.sender);\\n        admin = msg.sender;\\n        pendingAdmin = address(0);\\n    }\\n\\n    /**\\n     * @notice Method to propose a new admin authorized to call timelock functions. This should be the Governor Contract\\n     * @param pendingAdmin_ Address of the proposed admin\\n     * @custom:access Sender must be Timelock contract itself or admin\\n     * @custom:event Emit NewPendingAdmin with new pending admin\\n     */\\n    function setPendingAdmin(address pendingAdmin_) public {\\n        require(\\n            msg.sender == address(this) || msg.sender == admin,\\n            \\\"Timelock::setPendingAdmin: Call must come from Timelock.\\\"\\n        );\\n        ensureNonzeroAddress(pendingAdmin_);\\n        pendingAdmin = pendingAdmin_;\\n\\n        emit NewPendingAdmin(pendingAdmin);\\n    }\\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     * @custom:access Sender must be admin\\n     * @custom:event Emit QueueTransaction\\n     */\\n    function queueTransaction(\\n        address target,\\n        uint256 value,\\n        string calldata signature,\\n        bytes calldata data,\\n        uint256 eta\\n    ) public returns (bytes32) {\\n        require(msg.sender == admin, \\\"Timelock::queueTransaction: Call must come from admin.\\\");\\n        require(\\n            eta >= getBlockTimestamp() + delay,\\n            \\\"Timelock::queueTransaction: Estimated execution block must satisfy delay.\\\"\\n        );\\n\\n        bytes32 txHash = keccak256(abi.encode(target, value, signature, data, eta));\\n        require(!queuedTransactions[txHash], \\\"Timelock::queueTransaction: transaction already queued.\\\");\\n        queuedTransactions[txHash] = true;\\n\\n        emit QueueTransaction(txHash, target, value, signature, data, eta);\\n        return txHash;\\n    }\\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     * @custom:access Sender must be admin\\n     * @custom:event Emit CancelTransaction\\n     */\\n    function cancelTransaction(\\n        address target,\\n        uint256 value,\\n        string calldata signature,\\n        bytes calldata data,\\n        uint256 eta\\n    ) public {\\n        require(msg.sender == admin, \\\"Timelock::cancelTransaction: Call must come from admin.\\\");\\n\\n        bytes32 txHash = keccak256(abi.encode(target, value, signature, data, eta));\\n        require(queuedTransactions[txHash], \\\"Timelock::cancelTransaction: transaction is not queued yet.\\\");\\n        delete (queuedTransactions[txHash]);\\n\\n        emit CancelTransaction(txHash, target, value, signature, data, eta);\\n    }\\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     * @custom:access Sender must be admin\\n     * @custom:event Emit ExecuteTransaction\\n     */\\n    function executeTransaction(\\n        address target,\\n        uint256 value,\\n        string calldata signature,\\n        bytes calldata data,\\n        uint256 eta\\n    ) public returns (bytes memory) {\\n        require(msg.sender == admin, \\\"Timelock::executeTransaction: Call must come from admin.\\\");\\n\\n        bytes32 txHash = keccak256(abi.encode(target, value, signature, data, eta));\\n        require(queuedTransactions[txHash], \\\"Timelock::executeTransaction: Transaction hasn't been queued.\\\");\\n        require(getBlockTimestamp() >= eta, \\\"Timelock::executeTransaction: Transaction hasn't surpassed time lock.\\\");\\n        require(getBlockTimestamp() <= eta + GRACE_PERIOD(), \\\"Timelock::executeTransaction: Transaction is stale.\\\");\\n\\n        delete (queuedTransactions[txHash]);\\n\\n        bytes memory callData;\\n\\n        if (bytes(signature).length == 0) {\\n            callData = data;\\n        } else {\\n            callData = abi.encodePacked(bytes4(keccak256(bytes(signature))), data);\\n        }\\n\\n        // solium-disable-next-line security/no-call-value\\n        (bool success, bytes memory returnData) = target.call{ value: value }(callData);\\n        require(success, \\\"Timelock::executeTransaction: Transaction execution reverted.\\\");\\n\\n        emit ExecuteTransaction(txHash, target, value, signature, data, eta);\\n\\n        return returnData;\\n    }\\n\\n    /**\\n     * @notice Returns the current block timestamp\\n     * @return The current block timestamp\\n     */\\n    function getBlockTimestamp() internal view returns (uint256) {\\n        // solium-disable-next-line security/no-block-members\\n        return block.timestamp;\\n    }\\n}\\n\",\"keccak256\":\"0xaf1af48a0bb1ad0391a95270b934bcd30a0326f6e5ba415c581503807e689b45\",\"license\":\"BSD-3-Clause\"}},\"version\":1}",
  "bytecode": "0x608060405234801561001057600080fd5b5060405161154038038061154083398101604081905261002f91610180565b60018110156100ab5760405162461bcd60e51b815260206004820152603760248201527f54696d656c6f636b3a3a636f6e7374727563746f723a2044656c6179206d757360448201527f7420657863656564206d696e696d756d2064656c61792e00000000000000000060648201526084015b60405180910390fd5b62278d008111156101245760405162461bcd60e51b815260206004820152603860248201527f54696d656c6f636b3a3a73657444656c61793a2044656c6179206d757374206e60448201527f6f7420657863656564206d6178696d756d2064656c61792e000000000000000060648201526084016100a2565b61012d82610156565b600080546001600160a01b0319166001600160a01b0393909316929092179091556002556101ba565b6001600160a01b03811661017d576040516342bcdf7f60e11b815260040160405180910390fd5b50565b6000806040838503121561019357600080fd5b82516001600160a01b03811681146101aa57600080fd5b6020939093015192949293505050565b611377806101c96000396000f3fe6080604052600436106100c95760003560e01c80636a42b8f811610079578063c1a287e211610056578063c1a287e214610216578063e177246e1461022c578063f2b065371461024c578063f851a4401461028c57005b80636a42b8f8146101d65780637d645fab146101ec578063b1b43ae51461020257005b80633a66f901116100a75780633a66f901146101685780634dd18bf514610196578063591fcdfe146101b657005b80630825f38f146100cb5780630e18b681146101015780632678224714610116575b005b3480156100d757600080fd5b506100eb6100e636600461106e565b6102b9565b6040516100f89190611125565b60405180910390f35b34801561010d57600080fd5b506100c9610749565b34801561012257600080fd5b506001546101439073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100f8565b34801561017457600080fd5b5061018861018336600461106e565b610853565b6040519081526020016100f8565b3480156101a257600080fd5b506100c96101b1366004611176565b610b03565b3480156101c257600080fd5b506100c96101d136600461106e565b610c12565b3480156101e257600080fd5b5061018860025481565b3480156101f857600080fd5b5062278d00610188565b34801561020e57600080fd5b506001610188565b34801561022257600080fd5b5062127500610188565b34801561023857600080fd5b506100c9610247366004611198565b610e13565b34801561025857600080fd5b5061027c610267366004611198565b60036020526000908152604090205460ff1681565b60405190151581526020016100f8565b34801561029857600080fd5b506000546101439073ffffffffffffffffffffffffffffffffffffffff1681565b60005460609073ffffffffffffffffffffffffffffffffffffffff16331461034e5760405162461bcd60e51b815260206004820152603860248201527f54696d656c6f636b3a3a657865637574655472616e73616374696f6e3a20436160448201527f6c6c206d75737420636f6d652066726f6d2061646d696e2e000000000000000060648201526084015b60405180910390fd5b60008888888888888860405160200161036d97969594939291906111fa565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152600390935291205490915060ff166104285760405162461bcd60e51b815260206004820152603d60248201527f54696d656c6f636b3a3a657865637574655472616e73616374696f6e3a20547260448201527f616e73616374696f6e206861736e2774206265656e207175657565642e0000006064820152608401610345565b824210156104c45760405162461bcd60e51b815260206004820152604560248201527f54696d656c6f636b3a3a657865637574655472616e73616374696f6e3a20547260448201527f616e73616374696f6e206861736e2774207375727061737365642074696d652060648201527f6c6f636b2e000000000000000000000000000000000000000000000000000000608482015260a401610345565b6104d16212750084611258565b4211156105465760405162461bcd60e51b815260206004820152603360248201527f54696d656c6f636b3a3a657865637574655472616e73616374696f6e3a20547260448201527f616e73616374696f6e206973207374616c652e000000000000000000000000006064820152608401610345565b600081815260036020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556060908790036105c35785858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293506105fe92505050565b87876040516105d3929190611298565b6040519081900381206105ec91889088906020016112a8565b60405160208183030381529060405290505b6000808b73ffffffffffffffffffffffffffffffffffffffff168b8460405161062791906112e4565b60006040518083038185875af1925050503d8060008114610664576040519150601f19603f3d011682016040523d82523d6000602084013e610669565b606091505b5091509150816106e15760405162461bcd60e51b815260206004820152603d60248201527f54696d656c6f636b3a3a657865637574655472616e73616374696f6e3a20547260448201527f616e73616374696f6e20657865637574696f6e2072657665727465642e0000006064820152608401610345565b8b73ffffffffffffffffffffffffffffffffffffffff16847fa560e3198060a2f10670c1ec5b403077ea6ae93ca8de1c32b451dc1a943cd6e78d8d8d8d8d8d60405161073296959493929190611300565b60405180910390a39b9a5050505050505050505050565b60015473ffffffffffffffffffffffffffffffffffffffff1633146107d65760405162461bcd60e51b815260206004820152603860248201527f54696d656c6f636b3a3a61636365707441646d696e3a2043616c6c206d75737460448201527f20636f6d652066726f6d2070656e64696e6741646d696e2e00000000000000006064820152608401610345565b60008054604051339273ffffffffffffffffffffffffffffffffffffffff909216917ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc91a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163317909155600180549091169055565b6000805473ffffffffffffffffffffffffffffffffffffffff1633146108e15760405162461bcd60e51b815260206004820152603660248201527f54696d656c6f636b3a3a71756575655472616e73616374696f6e3a2043616c6c60448201527f206d75737420636f6d652066726f6d2061646d696e2e000000000000000000006064820152608401610345565b6002546108ee9042611258565b8210156109895760405162461bcd60e51b815260206004820152604960248201527f54696d656c6f636b3a3a71756575655472616e73616374696f6e3a204573746960448201527f6d6174656420657865637574696f6e20626c6f636b206d75737420736174697360648201527f66792064656c61792e0000000000000000000000000000000000000000000000608482015260a401610345565b6000888888888888886040516020016109a897969594939291906111fa565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152600390935291205490915060ff1615610a645760405162461bcd60e51b815260206004820152603760248201527f54696d656c6f636b3a3a71756575655472616e73616374696f6e3a207472616e60448201527f73616374696f6e20616c7265616479207175657565642e0000000000000000006064820152608401610345565b6000818152600360205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555173ffffffffffffffffffffffffffffffffffffffff8a169082907f76e2796dc3a81d57b0e8504b647febcbeeb5f4af818e164f11eef8131a6a763f90610aef908c908c908c908c908c908c90611300565b60405180910390a398975050505050505050565b33301480610b28575060005473ffffffffffffffffffffffffffffffffffffffff1633145b610b9a5760405162461bcd60e51b815260206004820152603860248201527f54696d656c6f636b3a3a73657450656e64696e6741646d696e3a2043616c6c2060448201527f6d75737420636f6d652066726f6d2054696d656c6f636b2e00000000000000006064820152608401610345565b610ba381610fac565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f69d78e38a01985fbb1462961809b4b2d65531bc93b2b94037f3334b82ca4a75690600090a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610c9f5760405162461bcd60e51b815260206004820152603760248201527f54696d656c6f636b3a3a63616e63656c5472616e73616374696f6e3a2043616c60448201527f6c206d75737420636f6d652066726f6d2061646d696e2e0000000000000000006064820152608401610345565b600087878787878787604051602001610cbe97969594939291906111fa565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152600390935291205490915060ff16610d795760405162461bcd60e51b815260206004820152603b60248201527f54696d656c6f636b3a3a63616e63656c5472616e73616374696f6e3a2074726160448201527f6e73616374696f6e206973206e6f7420717565756564207965742e00000000006064820152608401610345565b6000818152600360205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555173ffffffffffffffffffffffffffffffffffffffff89169082907f2fffc091a501fd91bfbff27141450d3acb40fb8e6d8382b243ec7a812a3aaf8790610e01908b908b908b908b908b908b90611300565b60405180910390a35050505050505050565b333014610e885760405162461bcd60e51b815260206004820152603160248201527f54696d656c6f636b3a3a73657444656c61793a2043616c6c206d75737420636f60448201527f6d652066726f6d2054696d656c6f636b2e0000000000000000000000000000006064820152608401610345565b6001811015610eff5760405162461bcd60e51b815260206004820152603460248201527f54696d656c6f636b3a3a73657444656c61793a2044656c6179206d757374206560448201527f7863656564206d696e696d756d2064656c61792e0000000000000000000000006064820152608401610345565b62278d00811115610f785760405162461bcd60e51b815260206004820152603860248201527f54696d656c6f636b3a3a73657444656c61793a2044656c6179206d757374206e60448201527f6f7420657863656564206d6178696d756d2064656c61792e00000000000000006064820152608401610345565b6002546040518291907fed0229422af39d4d7d33f7a27d31d6f5cb20ec628293da58dd6e8a528ed466be90600090a3600255565b73ffffffffffffffffffffffffffffffffffffffff8116610ff9576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff8116811461102057600080fd5b919050565b60008083601f84011261103757600080fd5b50813567ffffffffffffffff81111561104f57600080fd5b60208301915083602082850101111561106757600080fd5b9250929050565b600080600080600080600060a0888a03121561108957600080fd5b61109288610ffc565b965060208801359550604088013567ffffffffffffffff808211156110b657600080fd5b6110c28b838c01611025565b909750955060608a01359150808211156110db57600080fd5b506110e88a828b01611025565b989b979a50959894979596608090950135949350505050565b60005b8381101561111c578181015183820152602001611104565b50506000910152565b6020815260008251806020840152611144816040850160208701611101565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b60006020828403121561118857600080fd5b61119182610ffc565b9392505050565b6000602082840312156111aa57600080fd5b5035919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8816815286602082015260a06040820152600061123060a0830187896111b1565b82810360608401526112438186886111b1565b91505082608083015298975050505050505050565b80820180821115611292577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b92915050565b8183823760009101908152919050565b7fffffffff0000000000000000000000000000000000000000000000000000000084168152818360048301376000910160040190815292915050565b600082516112f6818460208701611101565b9190910192915050565b86815260806020820152600061131a6080830187896111b1565b828103604084015261132d8186886111b1565b91505082606083015297965050505050505056fea2646970667358221220107bb03227edc1c6f85b8373dcceaab44e4dfeb00d413bf48275c2b4e4a1dd8a64736f6c63430008190033",
  "deployedBytecode": "0x6080604052600436106100c95760003560e01c80636a42b8f811610079578063c1a287e211610056578063c1a287e214610216578063e177246e1461022c578063f2b065371461024c578063f851a4401461028c57005b80636a42b8f8146101d65780637d645fab146101ec578063b1b43ae51461020257005b80633a66f901116100a75780633a66f901146101685780634dd18bf514610196578063591fcdfe146101b657005b80630825f38f146100cb5780630e18b681146101015780632678224714610116575b005b3480156100d757600080fd5b506100eb6100e636600461106e565b6102b9565b6040516100f89190611125565b60405180910390f35b34801561010d57600080fd5b506100c9610749565b34801561012257600080fd5b506001546101439073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100f8565b34801561017457600080fd5b5061018861018336600461106e565b610853565b6040519081526020016100f8565b3480156101a257600080fd5b506100c96101b1366004611176565b610b03565b3480156101c257600080fd5b506100c96101d136600461106e565b610c12565b3480156101e257600080fd5b5061018860025481565b3480156101f857600080fd5b5062278d00610188565b34801561020e57600080fd5b506001610188565b34801561022257600080fd5b5062127500610188565b34801561023857600080fd5b506100c9610247366004611198565b610e13565b34801561025857600080fd5b5061027c610267366004611198565b60036020526000908152604090205460ff1681565b60405190151581526020016100f8565b34801561029857600080fd5b506000546101439073ffffffffffffffffffffffffffffffffffffffff1681565b60005460609073ffffffffffffffffffffffffffffffffffffffff16331461034e5760405162461bcd60e51b815260206004820152603860248201527f54696d656c6f636b3a3a657865637574655472616e73616374696f6e3a20436160448201527f6c6c206d75737420636f6d652066726f6d2061646d696e2e000000000000000060648201526084015b60405180910390fd5b60008888888888888860405160200161036d97969594939291906111fa565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152600390935291205490915060ff166104285760405162461bcd60e51b815260206004820152603d60248201527f54696d656c6f636b3a3a657865637574655472616e73616374696f6e3a20547260448201527f616e73616374696f6e206861736e2774206265656e207175657565642e0000006064820152608401610345565b824210156104c45760405162461bcd60e51b815260206004820152604560248201527f54696d656c6f636b3a3a657865637574655472616e73616374696f6e3a20547260448201527f616e73616374696f6e206861736e2774207375727061737365642074696d652060648201527f6c6f636b2e000000000000000000000000000000000000000000000000000000608482015260a401610345565b6104d16212750084611258565b4211156105465760405162461bcd60e51b815260206004820152603360248201527f54696d656c6f636b3a3a657865637574655472616e73616374696f6e3a20547260448201527f616e73616374696f6e206973207374616c652e000000000000000000000000006064820152608401610345565b600081815260036020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556060908790036105c35785858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293506105fe92505050565b87876040516105d3929190611298565b6040519081900381206105ec91889088906020016112a8565b60405160208183030381529060405290505b6000808b73ffffffffffffffffffffffffffffffffffffffff168b8460405161062791906112e4565b60006040518083038185875af1925050503d8060008114610664576040519150601f19603f3d011682016040523d82523d6000602084013e610669565b606091505b5091509150816106e15760405162461bcd60e51b815260206004820152603d60248201527f54696d656c6f636b3a3a657865637574655472616e73616374696f6e3a20547260448201527f616e73616374696f6e20657865637574696f6e2072657665727465642e0000006064820152608401610345565b8b73ffffffffffffffffffffffffffffffffffffffff16847fa560e3198060a2f10670c1ec5b403077ea6ae93ca8de1c32b451dc1a943cd6e78d8d8d8d8d8d60405161073296959493929190611300565b60405180910390a39b9a5050505050505050505050565b60015473ffffffffffffffffffffffffffffffffffffffff1633146107d65760405162461bcd60e51b815260206004820152603860248201527f54696d656c6f636b3a3a61636365707441646d696e3a2043616c6c206d75737460448201527f20636f6d652066726f6d2070656e64696e6741646d696e2e00000000000000006064820152608401610345565b60008054604051339273ffffffffffffffffffffffffffffffffffffffff909216917ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc91a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163317909155600180549091169055565b6000805473ffffffffffffffffffffffffffffffffffffffff1633146108e15760405162461bcd60e51b815260206004820152603660248201527f54696d656c6f636b3a3a71756575655472616e73616374696f6e3a2043616c6c60448201527f206d75737420636f6d652066726f6d2061646d696e2e000000000000000000006064820152608401610345565b6002546108ee9042611258565b8210156109895760405162461bcd60e51b815260206004820152604960248201527f54696d656c6f636b3a3a71756575655472616e73616374696f6e3a204573746960448201527f6d6174656420657865637574696f6e20626c6f636b206d75737420736174697360648201527f66792064656c61792e0000000000000000000000000000000000000000000000608482015260a401610345565b6000888888888888886040516020016109a897969594939291906111fa565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152600390935291205490915060ff1615610a645760405162461bcd60e51b815260206004820152603760248201527f54696d656c6f636b3a3a71756575655472616e73616374696f6e3a207472616e60448201527f73616374696f6e20616c7265616479207175657565642e0000000000000000006064820152608401610345565b6000818152600360205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555173ffffffffffffffffffffffffffffffffffffffff8a169082907f76e2796dc3a81d57b0e8504b647febcbeeb5f4af818e164f11eef8131a6a763f90610aef908c908c908c908c908c908c90611300565b60405180910390a398975050505050505050565b33301480610b28575060005473ffffffffffffffffffffffffffffffffffffffff1633145b610b9a5760405162461bcd60e51b815260206004820152603860248201527f54696d656c6f636b3a3a73657450656e64696e6741646d696e3a2043616c6c2060448201527f6d75737420636f6d652066726f6d2054696d656c6f636b2e00000000000000006064820152608401610345565b610ba381610fac565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f69d78e38a01985fbb1462961809b4b2d65531bc93b2b94037f3334b82ca4a75690600090a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610c9f5760405162461bcd60e51b815260206004820152603760248201527f54696d656c6f636b3a3a63616e63656c5472616e73616374696f6e3a2043616c60448201527f6c206d75737420636f6d652066726f6d2061646d696e2e0000000000000000006064820152608401610345565b600087878787878787604051602001610cbe97969594939291906111fa565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152600390935291205490915060ff16610d795760405162461bcd60e51b815260206004820152603b60248201527f54696d656c6f636b3a3a63616e63656c5472616e73616374696f6e3a2074726160448201527f6e73616374696f6e206973206e6f7420717565756564207965742e00000000006064820152608401610345565b6000818152600360205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555173ffffffffffffffffffffffffffffffffffffffff89169082907f2fffc091a501fd91bfbff27141450d3acb40fb8e6d8382b243ec7a812a3aaf8790610e01908b908b908b908b908b908b90611300565b60405180910390a35050505050505050565b333014610e885760405162461bcd60e51b815260206004820152603160248201527f54696d656c6f636b3a3a73657444656c61793a2043616c6c206d75737420636f60448201527f6d652066726f6d2054696d656c6f636b2e0000000000000000000000000000006064820152608401610345565b6001811015610eff5760405162461bcd60e51b815260206004820152603460248201527f54696d656c6f636b3a3a73657444656c61793a2044656c6179206d757374206560448201527f7863656564206d696e696d756d2064656c61792e0000000000000000000000006064820152608401610345565b62278d00811115610f785760405162461bcd60e51b815260206004820152603860248201527f54696d656c6f636b3a3a73657444656c61793a2044656c6179206d757374206e60448201527f6f7420657863656564206d6178696d756d2064656c61792e00000000000000006064820152608401610345565b6002546040518291907fed0229422af39d4d7d33f7a27d31d6f5cb20ec628293da58dd6e8a528ed466be90600090a3600255565b73ffffffffffffffffffffffffffffffffffffffff8116610ff9576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff8116811461102057600080fd5b919050565b60008083601f84011261103757600080fd5b50813567ffffffffffffffff81111561104f57600080fd5b60208301915083602082850101111561106757600080fd5b9250929050565b600080600080600080600060a0888a03121561108957600080fd5b61109288610ffc565b965060208801359550604088013567ffffffffffffffff808211156110b657600080fd5b6110c28b838c01611025565b909750955060608a01359150808211156110db57600080fd5b506110e88a828b01611025565b989b979a50959894979596608090950135949350505050565b60005b8381101561111c578181015183820152602001611104565b50506000910152565b6020815260008251806020840152611144816040850160208701611101565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b60006020828403121561118857600080fd5b61119182610ffc565b9392505050565b6000602082840312156111aa57600080fd5b5035919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8816815286602082015260a06040820152600061123060a0830187896111b1565b82810360608401526112438186886111b1565b91505082608083015298975050505050505050565b80820180821115611292577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b92915050565b8183823760009101908152919050565b7fffffffff0000000000000000000000000000000000000000000000000000000084168152818360048301376000910160040190815292915050565b600082516112f6818460208701611101565b9190910192915050565b86815260806020820152600061131a6080830187896111b1565b828103604084015261132d8186886111b1565b91505082606083015297965050505050505056fea2646970667358221220107bb03227edc1c6f85b8373dcceaab44e4dfeb00d413bf48275c2b4e4a1dd8a64736f6c63430008190033",
  "devdoc": {
    "author": "Venus",
    "kind": "dev",
    "methods": {
      "GRACE_PERIOD()": {
        "returns": {
          "_0": "The duration of the grace period, specified as a uint256 value."
        }
      },
      "MAXIMUM_DELAY()": {
        "returns": {
          "_0": "Maximum delay"
        }
      },
      "MINIMUM_DELAY()": {
        "returns": {
          "_0": "Minimum delay"
        }
      },
      "acceptAdmin()": {
        "custom:access": "Sender must be pending admin",
        "custom:event": "Emit NewAdmin with old and new admin"
      },
      "cancelTransaction(address,uint256,string,bytes,uint256)": {
        "custom:access": "Sender must be admin",
        "custom:event": "Emit CancelTransaction",
        "params": {
          "data": "Arguments to be passed to the function when called",
          "eta": "Timestamp after which the transaction can be executed",
          "signature": "Signature of the function to be called",
          "target": "Address of the contract with the method to be called",
          "value": "Native token amount sent with the transaction"
        }
      },
      "executeTransaction(address,uint256,string,bytes,uint256)": {
        "custom:access": "Sender must be admin",
        "custom:event": "Emit ExecuteTransaction",
        "params": {
          "data": "Arguments to be passed to the function when called",
          "eta": "Timestamp after which the transaction can be executed",
          "signature": "Signature of the function to be called",
          "target": "Address of the contract with the method to be called",
          "value": "Native token amount sent with the transaction"
        },
        "returns": {
          "_0": "Result of function call"
        }
      },
      "queueTransaction(address,uint256,string,bytes,uint256)": {
        "custom:access": "Sender must be admin",
        "custom:event": "Emit QueueTransaction",
        "params": {
          "data": "Arguments to be passed to the function when called",
          "eta": "Timestamp after which the transaction can be executed",
          "signature": "Signature of the function to be called",
          "target": "Address of the contract with the method to be called",
          "value": "Native token amount sent with the transaction"
        },
        "returns": {
          "_0": "Hash of the queued transaction"
        }
      },
      "setDelay(uint256)": {
        "custom:access": "Sender must be Timelock itself",
        "custom:event": "Emit NewDelay with old and new delay",
        "params": {
          "delay_": "The new delay period for the transaction queue"
        }
      },
      "setPendingAdmin(address)": {
        "custom:access": "Sender must be Timelock contract itself or admin",
        "custom:event": "Emit NewPendingAdmin with new pending admin",
        "params": {
          "pendingAdmin_": "Address of the proposed admin"
        }
      }
    },
    "title": "TimelockV8",
    "version": 1
  },
  "userdoc": {
    "errors": {
      "ZeroAddressNotAllowed()": [
        {
          "notice": "Thrown if the supplied address is a zero address where it is not allowed"
        }
      ]
    },
    "events": {
      "CancelTransaction(bytes32,address,uint256,string,bytes,uint256)": {
        "notice": "Event emitted when a proposal transaction has been cancelled"
      },
      "ExecuteTransaction(bytes32,address,uint256,string,bytes,uint256)": {
        "notice": "Event emitted when a proposal transaction has been executed"
      },
      "NewAdmin(address,address)": {
        "notice": "Event emitted when a new admin is accepted"
      },
      "NewDelay(uint256,uint256)": {
        "notice": "Event emitted when a new delay is proposed"
      },
      "NewPendingAdmin(address)": {
        "notice": "Event emitted when a new admin is proposed"
      },
      "QueueTransaction(bytes32,address,uint256,string,bytes,uint256)": {
        "notice": "Event emitted when a proposal transaction has been queued"
      }
    },
    "kind": "user",
    "methods": {
      "GRACE_PERIOD()": {
        "notice": "Return grace period"
      },
      "MAXIMUM_DELAY()": {
        "notice": "Return required maximum delay"
      },
      "MINIMUM_DELAY()": {
        "notice": "Return required minimum delay"
      },
      "acceptAdmin()": {
        "notice": "Method for accepting a proposed admin"
      },
      "admin()": {
        "notice": "Timelock admin authorized to queue and execute transactions"
      },
      "cancelTransaction(address,uint256,string,bytes,uint256)": {
        "notice": "Called to cancel a queued transaction"
      },
      "delay()": {
        "notice": "Period for a proposal transaction to be queued"
      },
      "executeTransaction(address,uint256,string,bytes,uint256)": {
        "notice": "Called to execute a queued transaction"
      },
      "pendingAdmin()": {
        "notice": "Account proposed as the next admin"
      },
      "queueTransaction(address,uint256,string,bytes,uint256)": {
        "notice": "Called for each action when queuing a proposal"
      },
      "queuedTransactions(bytes32)": {
        "notice": "Mapping of queued transactions"
      },
      "setDelay(uint256)": {
        "notice": "Setter for the transaction queue delay"
      },
      "setPendingAdmin(address)": {
        "notice": "Method to propose a new admin authorized to call timelock functions. This should be the Governor Contract"
      }
    },
    "notice": "The Timelock contract using solidity V8. This contract also differs from the original timelock because it has a virtual function to get minimum delays and allow test deployments to override the value.",
    "version": 1
  },
  "storageLayout": {
    "storage": [
      {
        "astId": 60,
        "contract": "contracts/Governance/TimelockV8.sol:TimelockV8",
        "label": "admin",
        "offset": 0,
        "slot": "0",
        "type": "t_address"
      },
      {
        "astId": 63,
        "contract": "contracts/Governance/TimelockV8.sol:TimelockV8",
        "label": "pendingAdmin",
        "offset": 0,
        "slot": "1",
        "type": "t_address"
      },
      {
        "astId": 66,
        "contract": "contracts/Governance/TimelockV8.sol:TimelockV8",
        "label": "delay",
        "offset": 0,
        "slot": "2",
        "type": "t_uint256"
      },
      {
        "astId": 71,
        "contract": "contracts/Governance/TimelockV8.sol:TimelockV8",
        "label": "queuedTransactions",
        "offset": 0,
        "slot": "3",
        "type": "t_mapping(t_bytes32,t_bool)"
      }
    ],
    "types": {
      "t_address": {
        "encoding": "inplace",
        "label": "address",
        "numberOfBytes": "20"
      },
      "t_bool": {
        "encoding": "inplace",
        "label": "bool",
        "numberOfBytes": "1"
      },
      "t_bytes32": {
        "encoding": "inplace",
        "label": "bytes32",
        "numberOfBytes": "32"
      },
      "t_mapping(t_bytes32,t_bool)": {
        "encoding": "mapping",
        "key": "t_bytes32",
        "label": "mapping(bytes32 => bool)",
        "numberOfBytes": "32",
        "value": "t_bool"
      },
      "t_uint256": {
        "encoding": "inplace",
        "label": "uint256",
        "numberOfBytes": "32"
      }
    }
  }
}
