{
    "contractName": "StakeManager",
    "abi": [
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "_maxUnstakeDelay",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "_abandonmentDelay",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "_escheatmentDelay",
                    "type": "uint256"
                },
                {
                    "internalType": "address",
                    "name": "_burnAddress",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "_devAddress",
                    "type": "address"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "constructor"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "owner",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "contract IERC20",
                    "name": "token",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "AbandonedRelayManagerStakeEscheated",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "burnAddress",
                    "type": "address"
                }
            ],
            "name": "BurnAddressSet",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "devAddress",
                    "type": "address"
                }
            ],
            "name": "DevAddressSet",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "relayHub",
                    "type": "address"
                }
            ],
            "name": "HubAuthorized",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "relayHub",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "removalTime",
                    "type": "uint256"
                }
            ],
            "name": "HubUnauthorized",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "owner",
                    "type": "address"
                }
            ],
            "name": "OwnerSet",
            "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": true,
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "abandonedTime",
                    "type": "uint256"
                }
            ],
            "name": "RelayServerAbandoned",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "keepaliveTime",
                    "type": "uint256"
                }
            ],
            "name": "RelayServerKeepalive",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "owner",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "contract IERC20",
                    "name": "token",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "stake",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "unstakeDelay",
                    "type": "uint256"
                }
            ],
            "name": "StakeAdded",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "beneficiary",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "contract IERC20",
                    "name": "token",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "reward",
                    "type": "uint256"
                }
            ],
            "name": "StakePenalized",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "owner",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "withdrawTime",
                    "type": "uint256"
                }
            ],
            "name": "StakeUnlocked",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "owner",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "contract IERC20",
                    "name": "token",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "StakeWithdrawn",
            "type": "event"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "name": "authorizedHubs",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "removalTime",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "owner",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "renounceOwnership",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "name": "stakes",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "stake",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "unstakeDelay",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "withdrawTime",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "abandonedTime",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "keepaliveTime",
                    "type": "uint256"
                },
                {
                    "internalType": "contract IERC20",
                    "name": "token",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "owner",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "newOwner",
                    "type": "address"
                }
            ],
            "name": "transferOwnership",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "versionSM",
            "outputs": [
                {
                    "internalType": "string",
                    "name": "",
                    "type": "string"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                }
            ],
            "name": "getStakeInfo",
            "outputs": [
                {
                    "components": [
                        {
                            "internalType": "uint256",
                            "name": "stake",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "unstakeDelay",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "withdrawTime",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "abandonedTime",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "keepaliveTime",
                            "type": "uint256"
                        },
                        {
                            "internalType": "contract IERC20",
                            "name": "token",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "owner",
                            "type": "address"
                        }
                    ],
                    "internalType": "struct IStakeManager.StakeInfo",
                    "name": "stakeInfo",
                    "type": "tuple"
                },
                {
                    "internalType": "bool",
                    "name": "isSenderAuthorizedHub",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "_burnAddress",
                    "type": "address"
                }
            ],
            "name": "setBurnAddress",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getBurnAddress",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "_devAddress",
                    "type": "address"
                }
            ],
            "name": "setDevAddress",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getAbandonedRelayServerConfig",
            "outputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "devAddress",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "abandonmentDelay",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "escheatmentDelay",
                            "type": "uint256"
                        }
                    ],
                    "internalType": "struct IStakeManager.AbandonedRelayServerConfig",
                    "name": "",
                    "type": "tuple"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getMaxUnstakeDelay",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes4",
                    "name": "interfaceId",
                    "type": "bytes4"
                }
            ],
            "name": "supportsInterface",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getCreationBlock",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "owner",
                    "type": "address"
                }
            ],
            "name": "setRelayManagerOwner",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract IERC20",
                    "name": "token",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "unstakeDelay",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "stakeForRelayManager",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                }
            ],
            "name": "unlockStake",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                }
            ],
            "name": "withdrawStake",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "relayHub",
                    "type": "address"
                }
            ],
            "name": "authorizeHubByOwner",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "relayHub",
                    "type": "address"
                }
            ],
            "name": "authorizeHubByManager",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "relayHub",
                    "type": "address"
                }
            ],
            "name": "unauthorizeHubByOwner",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "relayHub",
                    "type": "address"
                }
            ],
            "name": "unauthorizeHubByManager",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "beneficiary",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "penalizeRelayManager",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                }
            ],
            "name": "isRelayEscheatable",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                }
            ],
            "name": "markRelayAbandoned",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                }
            ],
            "name": "escheatAbandonedRelayStake",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                }
            ],
            "name": "updateRelayKeepaliveTime",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        }
    ],
    "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_maxUnstakeDelay\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_abandonmentDelay\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_escheatmentDelay\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_burnAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_devAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"AbandonedRelayManagerStakeEscheated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"burnAddress\",\"type\":\"address\"}],\"name\":\"BurnAddressSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"devAddress\",\"type\":\"address\"}],\"name\":\"DevAddressSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"relayHub\",\"type\":\"address\"}],\"name\":\"HubAuthorized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"relayHub\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"removalTime\",\"type\":\"uint256\"}],\"name\":\"HubUnauthorized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnerSet\",\"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\":true,\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"abandonedTime\",\"type\":\"uint256\"}],\"name\":\"RelayServerAbandoned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"keepaliveTime\",\"type\":\"uint256\"}],\"name\":\"RelayServerKeepalive\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stake\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"unstakeDelay\",\"type\":\"uint256\"}],\"name\":\"StakeAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"reward\",\"type\":\"uint256\"}],\"name\":\"StakePenalized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawTime\",\"type\":\"uint256\"}],\"name\":\"StakeUnlocked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"StakeWithdrawn\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"relayHub\",\"type\":\"address\"}],\"name\":\"authorizeHubByManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"relayHub\",\"type\":\"address\"}],\"name\":\"authorizeHubByOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"authorizedHubs\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"removalTime\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"}],\"name\":\"escheatAbandonedRelayStake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAbandonedRelayServerConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"devAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"abandonmentDelay\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"escheatmentDelay\",\"type\":\"uint256\"}],\"internalType\":\"struct IStakeManager.AbandonedRelayServerConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBurnAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCreationBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaxUnstakeDelay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"}],\"name\":\"getStakeInfo\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"stake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unstakeDelay\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"withdrawTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"abandonedTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"keepaliveTime\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"internalType\":\"struct IStakeManager.StakeInfo\",\"name\":\"stakeInfo\",\"type\":\"tuple\"},{\"internalType\":\"bool\",\"name\":\"isSenderAuthorizedHub\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"}],\"name\":\"isRelayEscheatable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"}],\"name\":\"markRelayAbandoned\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"penalizeRelayManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_burnAddress\",\"type\":\"address\"}],\"name\":\"setBurnAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_devAddress\",\"type\":\"address\"}],\"name\":\"setDevAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"setRelayManagerOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"unstakeDelay\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"stakeForRelayManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"stakes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"stake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unstakeDelay\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"withdrawTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"abandonedTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"keepaliveTime\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"relayHub\",\"type\":\"address\"}],\"name\":\"unauthorizeHubByManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"relayHub\",\"type\":\"address\"}],\"name\":\"unauthorizeHubByOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"}],\"name\":\"unlockStake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"}],\"name\":\"updateRelayKeepaliveTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"versionSM\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"}],\"name\":\"withdrawStake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"authorizeHubByOwner(address,address)\":{\"params\":{\"relayHub\":\"The address of a `RelayHub` to be authorized.\",\"relayManager\":\"The address of a Relay Manager whose stake is to be authorized for the new `RelayHub`.\"}},\"getAbandonedRelayServerConfig()\":{\"returns\":{\"_0\":\"The structure that contains all configuration values for the 'abandoned' stake.\"}},\"getBurnAddress()\":{\"returns\":{\"_0\":\"The address that will receive the 'burned' part of the penalized stake.\"}},\"getCreationBlock()\":{\"returns\":{\"_0\":\"the block number in which the contract has been deployed.\"}},\"getMaxUnstakeDelay()\":{\"returns\":{\"_0\":\"The maximum unstake delay this `StakeManger` allows. This is to prevent locking money forever by mistake.\"}},\"getStakeInfo(address)\":{\"params\":{\"relayManager\":\"The address of a Relay Manager.\"},\"returns\":{\"isSenderAuthorizedHub\":\"`true` if the `msg.sender` for this call was a `RelayHub` that is authorized now. `false` if the `msg.sender` for this call is not authorized.\",\"stakeInfo\":\"The `StakeInfo` structure.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"penalizeRelayManager(address,address,uint256)\":{\"params\":{\"amount\":\"A total amount of penalty to be withdrawn from stake.\",\"beneficiary\":\"The address that receives part of the penalty amount.\",\"relayManager\":\"The address of a Relay Manager to be penalized.\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"setRelayManagerOwner(address)\":{\"params\":{\"owner\":\"- owner of the relay (as configured off-chain)\"}},\"stakeForRelayManager(address,address,uint256,uint256)\":{\"params\":{\"amount\":\"The amount of tokens to be taken from the relayOwner and locked in the StakeManager as a stake\",\"relayManager\":\"The address that represents a stake entry and controls relay registrations on relay hubs\",\"token\":\"The address of an ERC-20 token that is used by the relayManager as a stake\",\"unstakeDelay\":\"The number of seconds to elapse before an owner can retrieve the stake after calling `unlock`\"}},\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"unauthorizeHubByOwner(address,address)\":{\"params\":{\"relayHub\":\"The address of a `RelayHub` to be unauthorized.\",\"relayManager\":\"The address of a Relay Manager.\"}},\"unlockStake(address)\":{\"params\":{\"relayManager\":\"The address of a Relay Manager whose stake is to be unlocked.\"}},\"withdrawStake(address)\":{\"params\":{\"relayManager\":\"The address of a Relay Manager whose stake is to be withdrawn.\"}}},\"stateVariables\":{\"versionSM\":{\"return\":\"a SemVer-compliant version of the `StakeManager` contract.\",\"returns\":{\"_0\":\"a SemVer-compliant version of the `StakeManager` contract.\"}}},\"title\":\"The StakeManager implementation\",\"version\":1},\"userdoc\":{\"events\":{\"AbandonedRelayManagerStakeEscheated(address,address,address,uint256)\":{\"notice\":\"Emitted when the stake of an abandoned relayer has been confiscated and transferred to the `devAddress`.\"},\"BurnAddressSet(address)\":{\"notice\":\"Emitted when a `burnAddress` is changed.\"},\"DevAddressSet(address)\":{\"notice\":\"Emitted when a `devAddress` is changed.\"},\"HubAuthorized(address,address)\":{\"notice\":\"Emitted when a `relayManager` adds a new `RelayHub` to a list of authorized.\"},\"HubUnauthorized(address,address,uint256)\":{\"notice\":\"Emitted when a `relayManager` removes a `RelayHub` from a list of authorized.\"},\"OwnerSet(address,address)\":{\"notice\":\"Emitted when a `relayManager` sets its `owner`. This is necessary to prevent stake hijacking.\"},\"RelayServerAbandoned(address,uint256)\":{\"notice\":\"Emitted if Relay Server is inactive for an `abandonmentDelay` and contract owner initiates its removal.\"},\"RelayServerKeepalive(address,uint256)\":{\"notice\":\"Emitted to indicate an action performed by a relay server to prevent it from being marked as abandoned.\"},\"StakeAdded(address,address,address,uint256,uint256)\":{\"notice\":\"Emitted when a `stake` or `unstakeDelay` are initialized or increased.\"},\"StakePenalized(address,address,address,uint256)\":{\"notice\":\"Emitted when an authorized `RelayHub` penalizes a `relayManager`.\"},\"StakeUnlocked(address,address,uint256)\":{\"notice\":\"Emitted once a stake is scheduled for withdrawal.\"},\"StakeWithdrawn(address,address,address,uint256)\":{\"notice\":\"Emitted when owner withdraws `relayManager` funds.\"}},\"kind\":\"user\",\"methods\":{\"authorizeHubByManager(address)\":{\"notice\":\"Same as `authorizeHubByOwner` but can be called by the RelayManager itself.\"},\"authorizeHubByOwner(address,address)\":{\"notice\":\"Add the `RelayHub` to a list of authorized by this Relay Manager. This allows the RelayHub to penalize this Relay Manager. The `RelayHub` cannot trust a Relay it cannot penalize.\"},\"authorizedHubs(address,address)\":{\"notice\":\"maps relay managers to a map of addressed of their authorized hubs to the information on that hub\"},\"escheatAbandonedRelayStake(address)\":{\"notice\":\"If more than `abandonmentDelay` has passed since the last Keepalive transaction, and relay manager has been marked as abandoned, and after that more that `escheatmentDelay` have passed, entire stake and balance will be taken from this relay.\"},\"getStakeInfo(address)\":{\"notice\":\"Get the stake details information for the given Relay Manager.\"},\"isRelayEscheatable(address)\":{\"notice\":\"Check if the Relay Manager can be considered abandoned or not. Returns true if the stake's abandonment time is in the past including the escheatment delay, false otherwise.\"},\"markRelayAbandoned(address)\":{\"notice\":\"Allows the contract owner to set the given `relayManager` as abandoned after a configurable delay. Its entire stake and balance will be taken from a relay if it does not respond to being marked as abandoned.\"},\"penalizeRelayManager(address,address,uint256)\":{\"notice\":\"Slash the stake of the relay relayManager. In order to prevent stake kidnapping, burns part of stake on the way.\"},\"setBurnAddress(address)\":{\"notice\":\"Change the address that will receive the 'burned' part of the penalized stake. This is done to prevent malicious Relay Server from penalizing itself and breaking even.\"},\"setDevAddress(address)\":{\"notice\":\"Change the address that will receive the 'abandoned' stake. This is done to prevent Relay Servers that lost their keys from losing access to funds.\"},\"setRelayManagerOwner(address)\":{\"notice\":\"Set the owner of a Relay Manager. Called only by the RelayManager itself. Note that owners cannot transfer ownership - if the entry already exists, reverts.\"},\"stakeForRelayManager(address,address,uint256,uint256)\":{\"notice\":\"Put a stake for a relayManager and set its unstake delay. Only the owner can call this function. If the entry does not exist, reverts. The owner must give allowance of the ERC-20 token to the StakeManager before calling this method. It is the RelayHub who has a configurable list of minimum stakes per token. StakeManager accepts all tokens.\"},\"stakes(address)\":{\"notice\":\"maps relay managers to their stakes\"},\"unauthorizeHubByManager(address)\":{\"notice\":\"Same as `unauthorizeHubByOwner` but can be called by the RelayManager itself.\"},\"unauthorizeHubByOwner(address,address)\":{\"notice\":\"Remove the `RelayHub` from a list of authorized by this Relay Manager.\"},\"unlockStake(address)\":{\"notice\":\"Schedule the unlocking of the stake. The `unstakeDelay` must pass before owner can call `withdrawStake`.\"},\"updateRelayKeepaliveTime(address)\":{\"notice\":\"Sets a new `keepaliveTime` for the given `relayManager`, preventing it from being marked as abandoned. Can be called by an authorized `RelayHub` or by the `relayOwner` address.\"},\"withdrawStake(address)\":{\"notice\":\"Withdraw the unlocked stake.\"}},\"notice\":\"An IStakeManager instance that accepts stakes in any ERC-20 token.Single StakeInfo of a single RelayManager can only have one token address assigned to it.It cannot be changed after the first time 'stakeForRelayManager' is called as it is equivalent to withdrawal.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"/Users/alexf/gsn2/packages/contracts/solpp/StakeManager.sol\":\"StakeManager\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/alexf/gsn2/packages/contracts/solpp/StakeManager.sol\":{\"keccak256\":\"0x4dd16a800c5c54d55ef5cf650fba18c4cdf13f4322b51eaf7402a7a21dae6e4a\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://bb340d6f52c4760f4ae14bc52159d447ad79ae767cc9e6f3fbf5a15dbe67684c\",\"dweb:/ipfs/QmQWfDcVhMuccfpgPkUzoUmdmiUtbRkjkcCqvuuy4H26sc\"]},\"/Users/alexf/gsn2/packages/contracts/solpp/interfaces/IStakeManager.sol\":{\"keccak256\":\"0x27535f3677a2c373862d8672725632fdcabdf5d0e784f80c158063f55be68b5a\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://904ad156bf1cac29f9e13619ee0ee41e602b6cf1fafedea0a1d3be7a7accc654\",\"dweb:/ipfs/QmXVy5gfYXSWYFrkmL2u9jctZDXupiNWbif5tFVpVZMPww\"]},\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2\",\"dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b2717fd2bdac99daa960a6de500754ea1b932093c946388c381da48658234b95\",\"dweb:/ipfs/QmP6QVMn6UeA3ByahyJbYQr5M6coHKBKsf3ySZSfbyA8R7\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x032807210d1d7d218963d7355d62e021a84bf1b3339f4f50be2f63b53cccaf29\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11756f42121f6541a35a8339ea899ee7514cfaa2e6d740625fcc844419296aa6\",\"dweb:/ipfs/QmekMuk6BY4DAjzeXr4MSbKdgoqqsZnA8JPtuyWc6CwXHf\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xd6153ce99bcdcce22b124f755e72553295be6abcd63804cfdffceb188b8bef10\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://35c47bece3c03caaa07fab37dd2bb3413bfbca20db7bd9895024390e0a469487\",\"dweb:/ipfs/QmPGWT2x3QHcKxqe6gRmAkdakhbaRgx3DLzcakHz5M4eXG\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fb0048dee081f6fffa5f74afc3fb328483c2a30504e94a0ddd2a5114d731ec4d\",\"dweb:/ipfs/QmZptt1nmYoA5SgjwnSgWqgUSDgm4q52Yos3xhnMv3MV43\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]}},\"version\":1}",
    "bytecode": "0x610120604052602f60c0818152906200213960e03980516200002a9160019160209091019062000246565b503480156200003857600080fd5b5060405162002168380380620021688339810160408190526200005b9162000309565b6200006633620000f0565b6001600160a01b038216620000c25760405162461bcd60e51b815260206004820181905260248201527f7472616e736665727320746f2061646472657373283029206d6179206661696c60448201526064015b60405180910390fd5b620000cd8262000140565b620000d88162000194565b50504360a0526080929092526003556004556200039b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6200014a620001e8565b600580546001600160a01b0319166001600160a01b0383169081179091556040517fb0d2ad16ddd4d3dd008ebff0b7e7699bbfa920003cb0764acb871951d1cd499990600090a250565b6200019e620001e8565b600280546001600160a01b0319166001600160a01b0383169081179091556040517f78ef0ef64366f55e36ce7c04060e8bc5846d3651c53909eafc38458922d8a87990600090a250565b6000546001600160a01b03163314620002445760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000b9565b565b82805462000254906200035e565b90600052602060002090601f016020900481019282620002785760008555620002c3565b82601f106200029357805160ff1916838001178555620002c3565b82800160010185558215620002c3579182015b82811115620002c3578251825591602001919060010190620002a6565b50620002d1929150620002d5565b5090565b5b80821115620002d15760008155600101620002d6565b80516001600160a01b03811681146200030457600080fd5b919050565b600080600080600060a086880312156200032257600080fd5b8551945060208601519350604086015192506200034260608701620002ec565b91506200035260808701620002ec565b90509295509295909350565b600181811c908216806200037357607f821691505b602082108114156200039557634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a051611d71620003c860003960006102990152600081816103cc015261083a0152611d716000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c80637835d296116100f9578063c5f0674311610097578063f2fde38b11610071578063f2fde38b146104d6578063f48f8ac7146104e9578063f9bce311146104fc578063fece3dd41461050f57600080fd5b8063c5f067431461047d578063d0d41fe1146104b0578063d48a9d43146104c357600080fd5b8063a9aadcd7116100d3578063a9aadcd7146103b7578063afcb7752146103ca578063c23a5cea146103f0578063c34531531461040357600080fd5b80637835d296146103685780637aeb642a1461037b5780638da5cb5b146103a657600080fd5b806339622167116101665780634a1ce599116101405780634a1ce599146103275780634b0e72161461033a578063715018a61461034d57806371fa1faf1461035557600080fd5b806339622167146102ec57806346dcbf0b146102ff57806347116c6e1461031257600080fd5b806301ffc9a7146101ae57806309a08af4146101d657806314080fac146101eb57806316934fc4146101fe57806320ffd56d1461029757806338b39d29146102c7575b600080fd5b6101c16101bc366004611b76565b610522565b60405190151581526020015b60405180910390f35b6101e96101e4366004611b13565b610558565b005b6101e96101f9366004611ba0565b61078c565b61025661020c366004611abd565b600660208190526000918252604090912080546001820154600283015460038401546004850154600586015495909601549395929491939092916001600160a01b03908116911687565b60408051978852602088019690965294860193909352606085019190915260808401526001600160a01b0390811660a08401521660c082015260e0016101cd565b7f00000000000000000000000000000000000000000000000000000000000000005b6040519081526020016101cd565b6005546001600160a01b03165b6040516001600160a01b0390911681526020016101cd565b6101c16102fa366004611abd565b610a58565b6101e961030d366004611abd565b610aed565b61031a610bd2565b6040516101cd9190611c02565b6101e9610335366004611abd565b610c60565b6101e9610348366004611abd565b610d59565b6101e9610dab565b6101e9610363366004611abd565b610dbf565b6101e9610376366004611ada565b610f29565b6102b9610389366004611ada565b600760209081526000928352604080842090915290825290205481565b6000546001600160a01b03166102d4565b6101e96103c5366004611abd565b610f7a565b7f00000000000000000000000000000000000000000000000000000000000000006102b9565b6101e96103fe366004611abd565b61106f565b610416610411366004611abd565b6111de565b6040805183518152602080850151908201528382015191810191909152606080840151908201526080808401519082015260a0808401516001600160a01b039081169183019190915260c0938401511692810192909252151560e0820152610100016101cd565b6104856112bd565b6040805182516001600160a01b031681526020808401519082015291810151908201526060016101cd565b6101e96104be366004611abd565b611318565b6101e96104d1366004611abd565b61136a565b6101e96104e4366004611abd565b6113d1565b6101e96104f7366004611ada565b61144a565b6101e961050a366004611abd565b611495565b6101e961051d366004611abd565b6114f8565b60006001600160e01b0319821662db127760e01b148061055257506301ffc9a760e01b6001600160e01b03198316145b92915050565b6001600160a01b0383166000908152600760209081526040808320338452909152902054806105c35760405162461bcd60e51b81526020600482015260126024820152711a1d58881b9bdd08185d5d1a1bdc9a5e995960721b60448201526064015b60405180910390fd5b4281116106125760405162461bcd60e51b815260206004820152601960248201527f68756220617574686f72697a6174696f6e20657870697265640000000000000060448201526064016105ba565b6001600160a01b0384166000908152600660205260409020548211156106725760405162461bcd60e51b815260206004820152601560248201527470656e616c74792065786365656473207374616b6560581b60448201526064016105ba565b6001600160a01b038416600090815260066020526040902054610696908390611c92565b6001600160a01b0385166000908152600660205260408120919091556106bd600284611c70565b905060006106cb8285611c92565b600580546001600160a01b038981166000908152600660205260409020909201549293506106fd9282169116846115f4565b6001600160a01b03808716600090815260066020526040902060050154610726911686836115f4565b6001600160a01b038681166000818152600660209081526040918290206005015482519085168152908101859052928816927f2da6b6c9084d39eeb104d765e33a4e16c8762e01b37383b75202d17515d1b82b91015b60405180910390a3505050505050565b6001600160a01b0380841660009081526006602081905260409091209081015485921633146107cd5760405162461bcd60e51b81526004016105ba90611c35565b6001600160a01b0385166000908152600660205260409020600101548410156108385760405162461bcd60e51b815260206004820181905260248201527f756e7374616b6544656c61792063616e6e6f742062652064656372656173656460448201526064016105ba565b7f000000000000000000000000000000000000000000000000000000000000000084111561089f5760405162461bcd60e51b8152602060048201526014602482015273756e7374616b6544656c617920746f6f2062696760601b60448201526064016105ba565b6001600160a01b0386166108f55760405162461bcd60e51b815260206004820181905260248201527f6d7573742073706563696679207374616b6520746f6b656e206164647265737360448201526064016105ba565b6001600160a01b0385811660009081526006602052604090206005015416158061093e57506001600160a01b038581166000908152600660205260409020600501548116908716145b61098a5760405162461bcd60e51b815260206004820181905260248201527f7374616b6520746f6b656e206164647265737320697320696e636f727265637460448201526064016105ba565b61099f6001600160a01b03871633308661165c565b6001600160a01b0385811660009081526006602052604081206005810180546001600160a01b031916938a16939093179092558154859291906109e3908490611c58565b90915550506001600160a01b03858116600081815260066020818152604092839020600181018a9055918201546005830154925484519387168452918301919091529181018890529216917ff83af4359c42f5104d95351ec3dd5e88f5344bc7eaea8de052c9b0d5254808fc9060600161077c565b6001600160a01b038082166000908152600660208181526040808420815160e08101835281548152600182015493810193909352600281015491830191909152600381015460608301819052600482015460808401526005820154861660a084015292015490931660c084015290919015801590610ae6575060045460608201514291610ae491611c58565b105b9392505050565b6001600160a01b0381811660009081526006602081815260408084206007835281852033808752935293205491830154929360001990921492909116148180610b335750805b610b7f5760405162461bcd60e51b815260206004820152601e60248201527f6d7573742062652063616c6c6564206279206f776e6572206f7220687562000060448201526064016105ba565b6000600384015542600484018190556040519081526001600160a01b038516907f27f31d9acb21058a327d122842d8dfa9641e7b6600ff715e99b9164080109e099060200160405180910390a250505050565b60018054610bdf90611cd5565b80601f0160208091040260200160405190810160405280929190818152602001828054610c0b90611cd5565b8015610c585780601f10610c2d57610100808354040283529160200191610c58565b820191906000526020600020905b815481529060010190602001808311610c3b57829003601f168201915b505050505081565b6001600160a01b038082166000908152600660208190526040909120908101548392163314610ca15760405162461bcd60e51b81526004016105ba90611c35565b6001600160a01b0383166000908152600660205260409020600281015415610cfd5760405162461bcd60e51b815260206004820152600f60248201526e616c72656164792070656e64696e6760881b60448201526064016105ba565b6001810154610d0c9042611c58565b6002820181905560405190815233906001600160a01b038616907f9ffc6168de1eb7f1d16200f614753cd7edce5a2186aab1c612199dd7316cd7c49060200160405180910390a350505050565b610d61611694565b600580546001600160a01b0319166001600160a01b0383169081179091556040517fb0d2ad16ddd4d3dd008ebff0b7e7699bbfa920003cb0764acb871951d1cd499990600090a250565b610db3611694565b610dbd60006116ee565b565b610dc7611694565b6001600160a01b03811660009081526006602052604090208054610e2d5760405162461bcd60e51b815260206004820152601860248201527f72656c6179206d616e61676572206e6f74207374616b6564000000000000000060448201526064016105ba565b600381015415610e7f5760405162461bcd60e51b815260206004820152601f60248201527f72656c6179206d616e6167657220616c7265616479206162616e646f6e65640060448201526064016105ba565b60035460048201544291610e9291611c58565b10610edf5760405162461bcd60e51b815260206004820181905260248201527f72656c6179206d616e616765722077617320616c69766520726563656e746c7960448201526064016105ba565b42600382018190556040519081526001600160a01b038316907f2931c4798cd84eb47ddd8e2b225e48c52a4cdbbdb49fc6e259dc16ac359d9bcf9060200160405180910390a25050565b6001600160a01b038083166000908152600660208190526040909120908101548492163314610f6a5760405162461bcd60e51b81526004016105ba90611c35565b610f74848461173e565b50505050565b610f82611694565b6001600160a01b0381166000908152600660205260409020610fa382610a58565b610fef5760405162461bcd60e51b815260206004820181905260248201527f72656c617920736572766572206e6f74206573636865617461626c652079657460448201526064016105ba565b8054600080835560028084019190915554600583015461101c916001600160a01b039182169116836115f4565b6005820154604080516001600160a01b0392831681526020810184905233928616917f0c82251845a9397018c808e8698b438fbce74fbdbdd67b554861e0ce38d1ff0e91015b60405180910390a3505050565b6001600160a01b0380821660009081526006602081905260409091209081015483921633146110b05760405162461bcd60e51b81526004016105ba90611c35565b6001600160a01b038316600090815260066020526040902060028101546111195760405162461bcd60e51b815260206004820152601b60248201527f5769746864726177616c206973206e6f74207363686564756c6564000000000060448201526064016105ba565b42816002015411156111655760405162461bcd60e51b81526020600482015260156024820152745769746864726177616c206973206e6f742064756560581b60448201526064016105ba565b805460008083556002830155600582015461118a906001600160a01b031633836115f4565b6005820154604080516001600160a01b0392831681526020810184905233928816917fddbbe0a4d722dc62b8a415c5e38b88260d0e7a4848cacc83f41fbee40f700168910160405180910390a35050505050565b6112306040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b031681525090565b506001600160a01b039081166000818152600760209081526040808320338452825280832054938352600680835292819020815160e0810183528154815260018201549381019390935260028101549183019190915260038101546060830152600481015460808301526005810154851660a08301529091015490921660c0830152909160001990911490565b6112ea604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b50604080516060810182526002546001600160a01b0316815260035460208201526004549181019190915290565b611320611694565b600280546001600160a01b0319166001600160a01b0383169081179091556040517f78ef0ef64366f55e36ce7c04060e8bc5846d3651c53909eafc38458922d8a87990600090a250565b336000908152600660208190526040909120908101546001600160a01b03166113c35760405162461bcd60e51b815260206004820152600b60248201526a3737ba1036b0b730b3b2b960a91b60448201526064016105ba565b6113cd338361173e565b5050565b6113d9611694565b6001600160a01b03811661143e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105ba565b611447816116ee565b50565b6001600160a01b03808316600090815260066020819052604090912090810154849216331461148b5760405162461bcd60e51b81526004016105ba90611c35565b610f748484611795565b336000908152600660208190526040909120908101546001600160a01b03166114ee5760405162461bcd60e51b815260206004820152600b60248201526a3737ba1036b0b730b3b2b960a91b60448201526064016105ba565b6113cd3383611795565b6001600160a01b03811661153e5760405162461bcd60e51b815260206004820152600d60248201526c34b73b30b634b21037bbb732b960991b60448201526064016105ba565b33600090815260066020819052604090912001546001600160a01b0316156115985760405162461bcd60e51b815260206004820152600d60248201526c185b1c9958591e481bdddb9959609a1b60448201526064016105ba565b33600081815260066020819052604080832090910180546001600160a01b0319166001600160a01b03861690811790915590519092917f342827c97908e5e2f71151c08502a66d44b6f758e3ac2f1de95f02eb95f0a73591a350565b6040516001600160a01b03831660248201526044810182905261165790849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261186a565b505050565b6040516001600160a01b0380851660248301528316604482015260648101829052610f749085906323b872dd60e01b90608401611620565b6000546001600160a01b03163314610dbd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105ba565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038083166000818152600760209081526040808320948616808452949091528082206000199055517fe292c4f6e9f34c975f4958cd5650a8111352feae914a67b064079571054210219190a35050565b6001600160a01b0380831660009081526007602090815260408083209385168352929052208054600019146118015760405162461bcd60e51b81526020600482015260126024820152711a1d58881b9bdd08185d5d1a1bdc9a5e995960721b60448201526064016105ba565b6001600160a01b0383166000908152600660205260409020600101546118279042611c58565b8082556040519081526001600160a01b0383811691908516907f8d941c9b73ba7e59671a59eed85054004624684182b0e4bdb56c35937bac65a690602001611062565b60006118bf826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661193c9092919063ffffffff16565b80519091501561165757808060200190518101906118dd9190611b54565b6116575760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016105ba565b606061194b8484600085611953565b949350505050565b6060824710156119b45760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016105ba565b6001600160a01b0385163b611a0b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016105ba565b600080866001600160a01b03168587604051611a279190611be6565b60006040518083038185875af1925050503d8060008114611a64576040519150601f19603f3d011682016040523d82523d6000602084013e611a69565b606091505b5091509150611a79828286611a84565b979650505050505050565b60608315611a93575081610ae6565b825115611aa35782518084602001fd5b8160405162461bcd60e51b81526004016105ba9190611c02565b600060208284031215611acf57600080fd5b8135610ae681611d26565b60008060408385031215611aed57600080fd5b8235611af881611d26565b91506020830135611b0881611d26565b809150509250929050565b600080600060608486031215611b2857600080fd5b8335611b3381611d26565b92506020840135611b4381611d26565b929592945050506040919091013590565b600060208284031215611b6657600080fd5b81518015158114610ae657600080fd5b600060208284031215611b8857600080fd5b81356001600160e01b031981168114610ae657600080fd5b60008060008060808587031215611bb657600080fd5b8435611bc181611d26565b93506020850135611bd181611d26565b93969395505050506040820135916060013590565b60008251611bf8818460208701611ca9565b9190910192915050565b6020815260008251806020840152611c21816040850160208701611ca9565b601f01601f19169190910160400192915050565b6020808252600990820152683737ba1037bbb732b960b91b604082015260600190565b60008219821115611c6b57611c6b611d10565b500190565b600082611c8d57634e487b7160e01b600052601260045260246000fd5b500490565b600082821015611ca457611ca4611d10565b500390565b60005b83811015611cc4578181015183820152602001611cac565b83811115610f745750506000910152565b600181811c90821680611ce957607f821691505b60208210811415611d0a57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461144757600080fdfea26469706673582212209b27694d4d37038377581ccd27c9506e9c31641392a42835cfd0ed89866e7ff464736f6c63430008070033332e302e302d626574612e332b6f70656e67736e2e7374616b656d616e616765722e697374616b656d616e61676572",
    "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101a95760003560e01c80637835d296116100f9578063c5f0674311610097578063f2fde38b11610071578063f2fde38b146104d6578063f48f8ac7146104e9578063f9bce311146104fc578063fece3dd41461050f57600080fd5b8063c5f067431461047d578063d0d41fe1146104b0578063d48a9d43146104c357600080fd5b8063a9aadcd7116100d3578063a9aadcd7146103b7578063afcb7752146103ca578063c23a5cea146103f0578063c34531531461040357600080fd5b80637835d296146103685780637aeb642a1461037b5780638da5cb5b146103a657600080fd5b806339622167116101665780634a1ce599116101405780634a1ce599146103275780634b0e72161461033a578063715018a61461034d57806371fa1faf1461035557600080fd5b806339622167146102ec57806346dcbf0b146102ff57806347116c6e1461031257600080fd5b806301ffc9a7146101ae57806309a08af4146101d657806314080fac146101eb57806316934fc4146101fe57806320ffd56d1461029757806338b39d29146102c7575b600080fd5b6101c16101bc366004611b76565b610522565b60405190151581526020015b60405180910390f35b6101e96101e4366004611b13565b610558565b005b6101e96101f9366004611ba0565b61078c565b61025661020c366004611abd565b600660208190526000918252604090912080546001820154600283015460038401546004850154600586015495909601549395929491939092916001600160a01b03908116911687565b60408051978852602088019690965294860193909352606085019190915260808401526001600160a01b0390811660a08401521660c082015260e0016101cd565b7f00000000000000000000000000000000000000000000000000000000000000005b6040519081526020016101cd565b6005546001600160a01b03165b6040516001600160a01b0390911681526020016101cd565b6101c16102fa366004611abd565b610a58565b6101e961030d366004611abd565b610aed565b61031a610bd2565b6040516101cd9190611c02565b6101e9610335366004611abd565b610c60565b6101e9610348366004611abd565b610d59565b6101e9610dab565b6101e9610363366004611abd565b610dbf565b6101e9610376366004611ada565b610f29565b6102b9610389366004611ada565b600760209081526000928352604080842090915290825290205481565b6000546001600160a01b03166102d4565b6101e96103c5366004611abd565b610f7a565b7f00000000000000000000000000000000000000000000000000000000000000006102b9565b6101e96103fe366004611abd565b61106f565b610416610411366004611abd565b6111de565b6040805183518152602080850151908201528382015191810191909152606080840151908201526080808401519082015260a0808401516001600160a01b039081169183019190915260c0938401511692810192909252151560e0820152610100016101cd565b6104856112bd565b6040805182516001600160a01b031681526020808401519082015291810151908201526060016101cd565b6101e96104be366004611abd565b611318565b6101e96104d1366004611abd565b61136a565b6101e96104e4366004611abd565b6113d1565b6101e96104f7366004611ada565b61144a565b6101e961050a366004611abd565b611495565b6101e961051d366004611abd565b6114f8565b60006001600160e01b0319821662db127760e01b148061055257506301ffc9a760e01b6001600160e01b03198316145b92915050565b6001600160a01b0383166000908152600760209081526040808320338452909152902054806105c35760405162461bcd60e51b81526020600482015260126024820152711a1d58881b9bdd08185d5d1a1bdc9a5e995960721b60448201526064015b60405180910390fd5b4281116106125760405162461bcd60e51b815260206004820152601960248201527f68756220617574686f72697a6174696f6e20657870697265640000000000000060448201526064016105ba565b6001600160a01b0384166000908152600660205260409020548211156106725760405162461bcd60e51b815260206004820152601560248201527470656e616c74792065786365656473207374616b6560581b60448201526064016105ba565b6001600160a01b038416600090815260066020526040902054610696908390611c92565b6001600160a01b0385166000908152600660205260408120919091556106bd600284611c70565b905060006106cb8285611c92565b600580546001600160a01b038981166000908152600660205260409020909201549293506106fd9282169116846115f4565b6001600160a01b03808716600090815260066020526040902060050154610726911686836115f4565b6001600160a01b038681166000818152600660209081526040918290206005015482519085168152908101859052928816927f2da6b6c9084d39eeb104d765e33a4e16c8762e01b37383b75202d17515d1b82b91015b60405180910390a3505050505050565b6001600160a01b0380841660009081526006602081905260409091209081015485921633146107cd5760405162461bcd60e51b81526004016105ba90611c35565b6001600160a01b0385166000908152600660205260409020600101548410156108385760405162461bcd60e51b815260206004820181905260248201527f756e7374616b6544656c61792063616e6e6f742062652064656372656173656460448201526064016105ba565b7f000000000000000000000000000000000000000000000000000000000000000084111561089f5760405162461bcd60e51b8152602060048201526014602482015273756e7374616b6544656c617920746f6f2062696760601b60448201526064016105ba565b6001600160a01b0386166108f55760405162461bcd60e51b815260206004820181905260248201527f6d7573742073706563696679207374616b6520746f6b656e206164647265737360448201526064016105ba565b6001600160a01b0385811660009081526006602052604090206005015416158061093e57506001600160a01b038581166000908152600660205260409020600501548116908716145b61098a5760405162461bcd60e51b815260206004820181905260248201527f7374616b6520746f6b656e206164647265737320697320696e636f727265637460448201526064016105ba565b61099f6001600160a01b03871633308661165c565b6001600160a01b0385811660009081526006602052604081206005810180546001600160a01b031916938a16939093179092558154859291906109e3908490611c58565b90915550506001600160a01b03858116600081815260066020818152604092839020600181018a9055918201546005830154925484519387168452918301919091529181018890529216917ff83af4359c42f5104d95351ec3dd5e88f5344bc7eaea8de052c9b0d5254808fc9060600161077c565b6001600160a01b038082166000908152600660208181526040808420815160e08101835281548152600182015493810193909352600281015491830191909152600381015460608301819052600482015460808401526005820154861660a084015292015490931660c084015290919015801590610ae6575060045460608201514291610ae491611c58565b105b9392505050565b6001600160a01b0381811660009081526006602081815260408084206007835281852033808752935293205491830154929360001990921492909116148180610b335750805b610b7f5760405162461bcd60e51b815260206004820152601e60248201527f6d7573742062652063616c6c6564206279206f776e6572206f7220687562000060448201526064016105ba565b6000600384015542600484018190556040519081526001600160a01b038516907f27f31d9acb21058a327d122842d8dfa9641e7b6600ff715e99b9164080109e099060200160405180910390a250505050565b60018054610bdf90611cd5565b80601f0160208091040260200160405190810160405280929190818152602001828054610c0b90611cd5565b8015610c585780601f10610c2d57610100808354040283529160200191610c58565b820191906000526020600020905b815481529060010190602001808311610c3b57829003601f168201915b505050505081565b6001600160a01b038082166000908152600660208190526040909120908101548392163314610ca15760405162461bcd60e51b81526004016105ba90611c35565b6001600160a01b0383166000908152600660205260409020600281015415610cfd5760405162461bcd60e51b815260206004820152600f60248201526e616c72656164792070656e64696e6760881b60448201526064016105ba565b6001810154610d0c9042611c58565b6002820181905560405190815233906001600160a01b038616907f9ffc6168de1eb7f1d16200f614753cd7edce5a2186aab1c612199dd7316cd7c49060200160405180910390a350505050565b610d61611694565b600580546001600160a01b0319166001600160a01b0383169081179091556040517fb0d2ad16ddd4d3dd008ebff0b7e7699bbfa920003cb0764acb871951d1cd499990600090a250565b610db3611694565b610dbd60006116ee565b565b610dc7611694565b6001600160a01b03811660009081526006602052604090208054610e2d5760405162461bcd60e51b815260206004820152601860248201527f72656c6179206d616e61676572206e6f74207374616b6564000000000000000060448201526064016105ba565b600381015415610e7f5760405162461bcd60e51b815260206004820152601f60248201527f72656c6179206d616e6167657220616c7265616479206162616e646f6e65640060448201526064016105ba565b60035460048201544291610e9291611c58565b10610edf5760405162461bcd60e51b815260206004820181905260248201527f72656c6179206d616e616765722077617320616c69766520726563656e746c7960448201526064016105ba565b42600382018190556040519081526001600160a01b038316907f2931c4798cd84eb47ddd8e2b225e48c52a4cdbbdb49fc6e259dc16ac359d9bcf9060200160405180910390a25050565b6001600160a01b038083166000908152600660208190526040909120908101548492163314610f6a5760405162461bcd60e51b81526004016105ba90611c35565b610f74848461173e565b50505050565b610f82611694565b6001600160a01b0381166000908152600660205260409020610fa382610a58565b610fef5760405162461bcd60e51b815260206004820181905260248201527f72656c617920736572766572206e6f74206573636865617461626c652079657460448201526064016105ba565b8054600080835560028084019190915554600583015461101c916001600160a01b039182169116836115f4565b6005820154604080516001600160a01b0392831681526020810184905233928616917f0c82251845a9397018c808e8698b438fbce74fbdbdd67b554861e0ce38d1ff0e91015b60405180910390a3505050565b6001600160a01b0380821660009081526006602081905260409091209081015483921633146110b05760405162461bcd60e51b81526004016105ba90611c35565b6001600160a01b038316600090815260066020526040902060028101546111195760405162461bcd60e51b815260206004820152601b60248201527f5769746864726177616c206973206e6f74207363686564756c6564000000000060448201526064016105ba565b42816002015411156111655760405162461bcd60e51b81526020600482015260156024820152745769746864726177616c206973206e6f742064756560581b60448201526064016105ba565b805460008083556002830155600582015461118a906001600160a01b031633836115f4565b6005820154604080516001600160a01b0392831681526020810184905233928816917fddbbe0a4d722dc62b8a415c5e38b88260d0e7a4848cacc83f41fbee40f700168910160405180910390a35050505050565b6112306040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b031681525090565b506001600160a01b039081166000818152600760209081526040808320338452825280832054938352600680835292819020815160e0810183528154815260018201549381019390935260028101549183019190915260038101546060830152600481015460808301526005810154851660a08301529091015490921660c0830152909160001990911490565b6112ea604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b50604080516060810182526002546001600160a01b0316815260035460208201526004549181019190915290565b611320611694565b600280546001600160a01b0319166001600160a01b0383169081179091556040517f78ef0ef64366f55e36ce7c04060e8bc5846d3651c53909eafc38458922d8a87990600090a250565b336000908152600660208190526040909120908101546001600160a01b03166113c35760405162461bcd60e51b815260206004820152600b60248201526a3737ba1036b0b730b3b2b960a91b60448201526064016105ba565b6113cd338361173e565b5050565b6113d9611694565b6001600160a01b03811661143e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105ba565b611447816116ee565b50565b6001600160a01b03808316600090815260066020819052604090912090810154849216331461148b5760405162461bcd60e51b81526004016105ba90611c35565b610f748484611795565b336000908152600660208190526040909120908101546001600160a01b03166114ee5760405162461bcd60e51b815260206004820152600b60248201526a3737ba1036b0b730b3b2b960a91b60448201526064016105ba565b6113cd3383611795565b6001600160a01b03811661153e5760405162461bcd60e51b815260206004820152600d60248201526c34b73b30b634b21037bbb732b960991b60448201526064016105ba565b33600090815260066020819052604090912001546001600160a01b0316156115985760405162461bcd60e51b815260206004820152600d60248201526c185b1c9958591e481bdddb9959609a1b60448201526064016105ba565b33600081815260066020819052604080832090910180546001600160a01b0319166001600160a01b03861690811790915590519092917f342827c97908e5e2f71151c08502a66d44b6f758e3ac2f1de95f02eb95f0a73591a350565b6040516001600160a01b03831660248201526044810182905261165790849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261186a565b505050565b6040516001600160a01b0380851660248301528316604482015260648101829052610f749085906323b872dd60e01b90608401611620565b6000546001600160a01b03163314610dbd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105ba565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038083166000818152600760209081526040808320948616808452949091528082206000199055517fe292c4f6e9f34c975f4958cd5650a8111352feae914a67b064079571054210219190a35050565b6001600160a01b0380831660009081526007602090815260408083209385168352929052208054600019146118015760405162461bcd60e51b81526020600482015260126024820152711a1d58881b9bdd08185d5d1a1bdc9a5e995960721b60448201526064016105ba565b6001600160a01b0383166000908152600660205260409020600101546118279042611c58565b8082556040519081526001600160a01b0383811691908516907f8d941c9b73ba7e59671a59eed85054004624684182b0e4bdb56c35937bac65a690602001611062565b60006118bf826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661193c9092919063ffffffff16565b80519091501561165757808060200190518101906118dd9190611b54565b6116575760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016105ba565b606061194b8484600085611953565b949350505050565b6060824710156119b45760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016105ba565b6001600160a01b0385163b611a0b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016105ba565b600080866001600160a01b03168587604051611a279190611be6565b60006040518083038185875af1925050503d8060008114611a64576040519150601f19603f3d011682016040523d82523d6000602084013e611a69565b606091505b5091509150611a79828286611a84565b979650505050505050565b60608315611a93575081610ae6565b825115611aa35782518084602001fd5b8160405162461bcd60e51b81526004016105ba9190611c02565b600060208284031215611acf57600080fd5b8135610ae681611d26565b60008060408385031215611aed57600080fd5b8235611af881611d26565b91506020830135611b0881611d26565b809150509250929050565b600080600060608486031215611b2857600080fd5b8335611b3381611d26565b92506020840135611b4381611d26565b929592945050506040919091013590565b600060208284031215611b6657600080fd5b81518015158114610ae657600080fd5b600060208284031215611b8857600080fd5b81356001600160e01b031981168114610ae657600080fd5b60008060008060808587031215611bb657600080fd5b8435611bc181611d26565b93506020850135611bd181611d26565b93969395505050506040820135916060013590565b60008251611bf8818460208701611ca9565b9190910192915050565b6020815260008251806020840152611c21816040850160208701611ca9565b601f01601f19169190910160400192915050565b6020808252600990820152683737ba1037bbb732b960b91b604082015260600190565b60008219821115611c6b57611c6b611d10565b500190565b600082611c8d57634e487b7160e01b600052601260045260246000fd5b500490565b600082821015611ca457611ca4611d10565b500390565b60005b83811015611cc4578181015183820152602001611cac565b83811115610f745750506000910152565b600181811c90821680611ce957607f821691505b60208210811415611d0a57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461144757600080fdfea26469706673582212209b27694d4d37038377581ccd27c9506e9c31641392a42835cfd0ed89866e7ff464736f6c63430008070033",
    "immutableReferences": {
        "3354": [
            {
                "length": 32,
                "start": 972
            },
            {
                "length": 32,
                "start": 2106
            }
        ],
        "3361": [
            {
                "length": 32,
                "start": 665
            }
        ]
    },
    "sourceMap": "801:84:5:-:0;706:10118;801:84;;706:10118;801:84;;;706:10118;801:84;;;;;;;;;;;;;;;:::i;:::-;;2644:571;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;936:32:47;719:10:55;936:18:47;:32::i;:::-;-1:-1:-1;;;;;2843:26:5;;2835:71;;;;-1:-1:-1;;;2835:71:5;;1242:2:63;2835:71:5;;;1224:21:63;;;1261:18;;;1254:30;1320:34;1300:18;;;1293:62;1372:18;;2835:71:5;;;;;;;;;2916:28;2931:12;2916:14;:28::i;:::-;2954:26;2968:11;2954:13;:26::i;:::-;-1:-1:-1;;3006:12:5;2990:28;;3028:34;;;;;3072:43;:63;3145:43;:63;706:10118;;2433:187:47;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:47;;;-1:-1:-1;;;;;;2541:17:47;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;1559:157:5:-;1094:13:47;:11;:13::i;:::-;1641:11:5::1;:26:::0;;-1:-1:-1;;;;;;1641:26:5::1;-1:-1:-1::0;;;;;1641:26:5;::::1;::::0;;::::1;::::0;;;1682:27:::1;::::0;::::1;::::0;-1:-1:-1;;1682:27:5::1;1559:157:::0;:::o;1898:205::-;1094:13:47;:11;:13::i;:::-;1978:26:5::1;:51:::0;;-1:-1:-1;;;;;;1978:51:5::1;-1:-1:-1::0;;;;;1978:51:5;::::1;::::0;;::::1;::::0;;;2044:52:::1;::::0;::::1;::::0;-1:-1:-1;;2044:52:5::1;1898:205:::0;:::o;1359:130:47:-;1247:7;1273:6;-1:-1:-1;;;;;1273:6:47;719:10:55;1422:23:47;1414:68;;;;-1:-1:-1;;;1414:68:47;;881:2:63;1414:68:47;;;863:21:63;;;900:18;;;893:30;959:34;939:18;;;932:62;1011:18;;1414:68:47;679:356:63;1414:68:47;1359:130::o;706:10118:5:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;706:10118:5;;;-1:-1:-1;706:10118:5;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:177:63;93:13;;-1:-1:-1;;;;;135:31:63;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:478::-;302:6;310;318;326;334;387:3;375:9;366:7;362:23;358:33;355:53;;;404:1;401;394:12;355:53;433:9;427:16;417:26;;483:2;472:9;468:18;462:25;452:35;;527:2;516:9;512:18;506:25;496:35;;550:49;595:2;584:9;580:18;550:49;:::i;:::-;540:59;;618:50;663:3;652:9;648:19;618:50;:::i;:::-;608:60;;196:478;;;;;;;;:::o;1401:380::-;1480:1;1476:12;;;;1523;;;1544:61;;1598:4;1590:6;1586:17;1576:27;;1544:61;1651:2;1643:6;1640:14;1620:18;1617:38;1614:161;;;1697:10;1692:3;1688:20;1685:1;1678:31;1732:4;1729:1;1722:15;1760:4;1757:1;1750:15;1614:161;;1401:380;;;:::o;:::-;706:10118:5;;;;;;;;;;;;;;",
    "deployedSourceMap": "706:10118:5:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3249:226;;;;;;:::i;:::-;;:::i;:::-;;;3550:14:63;;3543:22;3525:41;;3513:2;3498:18;3249:226:5;;;;;;;;7881:919;;;;;;:::i;:::-;;:::i;:::-;;3983:970;;;;;;:::i;:::-;;:::i;1134:43::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1134:43:5;;;;;;;;;;;15001:25:63;;;15057:2;15042:18;;15035:34;;;;15085:18;;;15078:34;;;;15143:2;15128:18;;15121:34;;;;15186:3;15171:19;;15164:35;-1:-1:-1;;;;;15274:15:63;;;15226:3;15253:19;;15246:44;15327:15;15321:3;15306:19;;15299:44;14988:3;14973:19;1134:43:5;14670:679:63;3515:105:5;3600:13;3515:105;;;14634:25:63;;;14622:2;14607:18;3515:105:5;14488:177:63;1756:102:5;1840:11;;-1:-1:-1;;;;;1840:11:5;1756:102;;;-1:-1:-1;;;;;2682:32:63;;;2664:51;;2652:2;2637:18;1756:102:5;2518:203:63;8840:302:5;;;;;;:::i;:::-;;:::i;10295:527::-;;;;;;:::i;:::-;;:::i;801:84::-;;;:::i;:::-;;;;;;;:::i;4993:350::-;;;;;;:::i;:::-;;:::i;1559:157::-;;;;;;:::i;:::-;;:::i;1831:101:47:-;;;:::i;9182:530:5:-;;;;;;:::i;:::-;;:::i;6489:170::-;;;;;;:::i;:::-;;:::i;2563:74::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;1201:85:47;1247:7;1273:6;-1:-1:-1;;;;;1273:6:47;1201:85;;9752:503:5;;;;;;:::i;:::-;;:::i;2341:110::-;2429:15;2341:110;;5383:525;;;;;;:::i;:::-;;:::i;1218:301::-;;;;;;:::i;:::-;;:::i;:::-;;;;13928:13:63;;13910:32;;13998:4;13986:17;;;13980:24;13958:20;;;13951:54;14049:17;;;14043:24;14021:20;;;14014:54;;;;14124:4;14112:17;;;14106:24;14084:20;;;14077:54;14187:4;14175:17;;;14169:24;14147:20;;;14140:54;14241:4;14229:17;;;14223:24;-1:-1:-1;;;;;14323:21:63;;;14301:20;;;14294:51;;;;14405:4;14393:17;;;14387:24;14383:33;14361:20;;;14354:63;;;;14461:14;14454:22;14448:3;14433:19;;14426:51;13897:3;13882:19;1218:301:5;13687:796:63;2143:158:5;;;:::i;:::-;;;;13514:13:63;;-1:-1:-1;;;;;13510:39:63;13492:58;;13606:4;13594:17;;;13588:24;13566:20;;;13559:54;13657:17;;;13651:24;13629:20;;;13622:54;13480:2;13465:18;2143:158:5;13258:424:63;1898:205:5;;;;;;:::i;:::-;;:::i;6699:131::-;;;;;;:::i;:::-;;:::i;2081:198:47:-;;;;;;:::i;:::-;;:::i;7087:174:5:-;;;;;;:::i;:::-;;:::i;7301:135::-;;;;;;:::i;:::-;;:::i;3660:283::-;;;;;;:::i;:::-;;:::i;3249:226::-;3351:4;-1:-1:-1;;;;;;3374:46:5;;-1:-1:-1;;;3374:46:5;;:94;;-1:-1:-1;;;;;;;;;;937:40:58;;;3432:36:5;3367:101;3249:226;-1:-1:-1;;3249:226:5:o;7881:919::-;-1:-1:-1;;;;;8020:28:5;;7998:19;8020:28;;;:14;:28;;;;;;;;8049:10;8020:40;;;;;;;:52;8090:16;8082:47;;;;-1:-1:-1;;;8082:47:5;;9892:2:63;8082:47:5;;;9874:21:63;9931:2;9911:18;;;9904:30;-1:-1:-1;;;9950:18:63;;;9943:48;10008:18;;8082:47:5;;;;;;;;;8161:15;8147:11;:29;8139:67;;;;-1:-1:-1;;;8139:67:5;;8474:2:63;8139:67:5;;;8456:21:63;8513:2;8493:18;;;8486:30;8552:27;8532:18;;;8525:55;8597:18;;8139:67:5;8272:349:63;8139:67:5;-1:-1:-1;;;;;8289:20:5;;;;;;:6;:20;;;;;:26;:36;-1:-1:-1;8289:36:5;8281:70;;;;-1:-1:-1;;;8281:70:5;;10956:2:63;8281:70:5;;;10938:21:63;10995:2;10975:18;;;10968:30;-1:-1:-1;;;11014:18:63;;;11007:51;11075:18;;8281:70:5;10754:345:63;8281:70:5;-1:-1:-1;;;;;8389:20:5;;;;;;:6;:20;;;;;:26;:35;;8418:6;;8389:35;:::i;:::-;-1:-1:-1;;;;;8361:20:5;;;;;;:6;:20;;;;;:63;;;;8452:10;8461:1;8452:6;:10;:::i;:::-;8435:27;-1:-1:-1;8472:14:5;8489:15;8435:27;8489:6;:15;:::i;:::-;8611:11;;;-1:-1:-1;;;;;8571:20:5;;;8611:11;8571:20;;;:6;:20;;;;;:26;;;;8472:32;;-1:-1:-1;8571:60:5;;:26;;;8611:11;8624:6;8571:39;:60::i;:::-;-1:-1:-1;;;;;8641:20:5;;;;;;;:6;:20;;;;;:26;;;:60;;:26;8681:11;8694:6;8641:39;:60::i;:::-;-1:-1:-1;;;;;8716:77:5;;;8758:20;;;;:6;:20;;;;;;;;;:26;;;8716:77;;8758:26;;;3280:51:63;;3347:18;;;3340:34;;;8716:77:5;;;;;;3253:18:63;8716:77:5;;;;;;;;7988:812;;;7881:919;;;:::o;3983:970::-;-1:-1:-1;;;;;6095:20:5;;;6070:22;6095:20;;;:6;:20;;;;;;;;6133:10;;;;4120:12;;6133:10;6147;6133:24;6125:46;;;;-1:-1:-1;;;6125:46:5;;;;;;;:::i;:::-;-1:-1:-1;;;;;4168:20:5;::::1;;::::0;;;:6:::1;:20;::::0;;;;:33:::1;;::::0;4152:49;::::1;;4144:94;;;::::0;-1:-1:-1;;;4144:94:5;;9531:2:63;4144:94:5::1;::::0;::::1;9513:21:63::0;;;9550:18;;;9543:30;9609:34;9589:18;;;9582:62;9661:18;;4144:94:5::1;9329:356:63::0;4144:94:5::1;4272:15;4256:12;:31;;4248:64;;;::::0;-1:-1:-1;;;4248:64:5;;12434:2:63;4248:64:5::1;::::0;::::1;12416:21:63::0;12473:2;12453:18;;;12446:30;-1:-1:-1;;;12492:18:63;;;12485:50;12552:18;;4248:64:5::1;12232:344:63::0;4248:64:5::1;-1:-1:-1::0;;;;;4330:27:5;::::1;4322:72;;;::::0;-1:-1:-1;;;4322:72:5;;5188:2:63;4322:72:5::1;::::0;::::1;5170:21:63::0;;;5207:18;;;5200:30;5266:34;5246:18;;;5239:62;5318:18;;4322:72:5::1;4986:356:63::0;4322:72:5::1;-1:-1:-1::0;;;;;4425:20:5;;::::1;4470:1;4425:20:::0;;;:6:::1;:20;::::0;;;;:26:::1;;::::0;::::1;:48:::0;;:99:::1;;-1:-1:-1::0;;;;;;4489:20:5;;::::1;;::::0;;;:6:::1;:20;::::0;;;;:26:::1;;::::0;;::::1;:35:::0;;::::1;;4425:99;4404:169;;;::::0;-1:-1:-1;;;4404:169:5;;5549:2:63;4404:169:5::1;::::0;::::1;5531:21:63::0;;;5568:18;;;5561:30;5627:34;5607:18;;;5600:62;5679:18;;4404:169:5::1;5347:356:63::0;4404:169:5::1;4583:57;-1:-1:-1::0;;;;;4583:22:5;::::1;4606:10;4626:4;4633:6:::0;4583:22:::1;:57::i;:::-;-1:-1:-1::0;;;;;4650:20:5;;::::1;;::::0;;;:6:::1;:20;::::0;;;;:26:::1;::::0;::::1;:34:::0;;-1:-1:-1;;;;;;4650:34:5::1;::::0;;::::1;::::0;;;::::1;::::0;;;4694:36;;4724:6;;4650:20;;4694:36:::1;::::0;4724:6;;4694:36:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;4740:20:5;;::::1;;::::0;;;:6:::1;:20;::::0;;;;;;;;:33:::1;::::0;::::1;:48:::0;;;4828:26;;::::1;::::0;4856::::1;::::0;::::1;::::0;4884;;4803:143;;4856:26;;::::1;4090:51:63::0;;4157:18;;;4150:34;;;;4200:18;;;4193:34;;;4828:26:5;::::1;::::0;4803:143:::1;::::0;4078:2:63;4063:18;4803:143:5::1;3872:361:63::0;8840:302:5;-1:-1:-1;;;;;8979:20:5;;;8920:4;8979:20;;;:6;:20;;;;;;;;8936:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8920:4;;8936:63;9016:28;;;;:119;;-1:-1:-1;9074:43:5;;9048:23;;;;9120:15;;9048:69;;;:::i;:::-;:87;9016:119;9009:126;8840:302;-1:-1:-1;;;8840:302:5:o;10295:527::-;-1:-1:-1;;;;;10404:20:5;;;10379:22;10404:20;;;:6;:20;;;;;;;;10457:14;:28;;;;;10486:10;10457:40;;;;;;;:52;10560:10;;;;10404:20;;-1:-1:-1;;10457:73:5;;;;10560:10;;;:24;10457:73;;10602:31;;;10621:12;10602:31;10594:74;;;;-1:-1:-1;;;10594:74:5;;12075:2:63;10594:74:5;;;12057:21:63;12114:2;12094:18;;;12087:30;12153:32;12133:18;;;12126:60;12203:18;;10594:74:5;11873:354:63;10594:74:5;10699:1;10678:18;;;:22;10731:15;10710:18;;;:36;;;10761:54;;14634:25:63;;;-1:-1:-1;;;;;10761:54:5;;;;;14622:2:63;14607:18;10761:54:5;;;;;;;10369:453;;;10295:527;:::o;801:84::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4993:350::-;-1:-1:-1;;;;;6095:20:5;;;6070:22;6095:20;;;:6;:20;;;;;;;;6133:10;;;;5069:12;;6133:10;6147;6133:24;6125:46;;;;-1:-1:-1;;;6125:46:5;;;;;;;:::i;:::-;-1:-1:-1;;;;;5118:20:5;::::1;5093:22;5118:20:::0;;;:6:::1;:20;::::0;;;;5156:17:::1;::::0;::::1;::::0;:22;5148:50:::1;;;::::0;-1:-1:-1;;;5148:50:5;;6678:2:63;5148:50:5::1;::::0;::::1;6660:21:63::0;6717:2;6697:18;;;6690:30;-1:-1:-1;;;6736:18:63;;;6729:45;6791:18;;5148:50:5::1;6476:339:63::0;5148:50:5::1;5246:17;::::0;::::1;::::0;5228:35:::1;::::0;:15:::1;:35;:::i;:::-;5208:17;::::0;::::1;:55:::0;;;5278:58:::1;::::0;14634:25:63;;;5306:10:5::1;::::0;-1:-1:-1;;;;;5278:58:5;::::1;::::0;::::1;::::0;14622:2:63;14607:18;5278:58:5::1;;;;;;;5083:260;6060:129:::0;4993:350;;:::o;1559:157::-;1094:13:47;:11;:13::i;:::-;1641:11:5::1;:26:::0;;-1:-1:-1;;;;;;1641:26:5::1;-1:-1:-1::0;;;;;1641:26:5;::::1;::::0;;::::1;::::0;;;1682:27:::1;::::0;::::1;::::0;-1:-1:-1;;1682:27:5::1;1559:157:::0;:::o;1831:101:47:-;1094:13;:11;:13::i;:::-;1895:30:::1;1922:1;1895:18;:30::i;:::-;1831:101::o:0;9182:530:5:-;1094:13:47;:11;:13::i;:::-;-1:-1:-1;;;;;9295:20:5;::::1;9270:22;9295:20:::0;;;:6:::1;:20;::::0;;;;9333:10;;9325:51:::1;;;::::0;-1:-1:-1;;;9325:51:5;;8121:2:63;9325:51:5::1;::::0;::::1;8103:21:63::0;8160:2;8140:18;;;8133:30;8199:26;8179:18;;;8172:54;8243:18;;9325:51:5::1;7919:348:63::0;9325:51:5::1;9394:18;::::0;::::1;::::0;:23;9386:67:::1;;;::::0;-1:-1:-1;;;9386:67:5;;4828:2:63;9386:67:5::1;::::0;::::1;4810:21:63::0;4867:2;4847:18;;;4840:30;4906:33;4886:18;;;4879:61;4957:18;;9386:67:5::1;4626:355:63::0;9386:67:5::1;9492:43:::0;;9471:18:::1;::::0;::::1;::::0;9538:15:::1;::::0;9471:64:::1;::::0;::::1;:::i;:::-;:82;9463:127;;;::::0;-1:-1:-1;;;9463:127:5;;8828:2:63;9463:127:5::1;::::0;::::1;8810:21:63::0;;;8847:18;;;8840:30;8906:34;8886:18;;;8879:62;8958:18;;9463:127:5::1;8626:356:63::0;9463:127:5::1;9621:15;9600:18;::::0;::::1;:36:::0;;;9651:54:::1;::::0;14634:25:63;;;-1:-1:-1;;;;;9651:54:5;::::1;::::0;::::1;::::0;14622:2:63;14607:18;9651:54:5::1;;;;;;;9260:452;9182:530:::0;:::o;6489:170::-;-1:-1:-1;;;;;6095:20:5;;;6070:22;6095:20;;;:6;:20;;;;;;;;6133:10;;;;6582:12;;6133:10;6147;6133:24;6125:46;;;;-1:-1:-1;;;6125:46:5;;;;;;;:::i;:::-;6615:37:::1;6629:12;6643:8;6615:13;:37::i;:::-;6060:129:::0;6489:170;;;:::o;9752:503::-;1094:13:47;:11;:13::i;:::-;-1:-1:-1;;;;;9873:20:5;::::1;9848:22;9873:20:::0;;;:6:::1;:20;::::0;;;;9911:32:::1;9880:12:::0;9911:18:::1;:32::i;:::-;9903:77;;;::::0;-1:-1:-1;;;9903:77:5;;6317:2:63;9903:77:5::1;::::0;::::1;6299:21:63::0;;;6336:18;;;6329:30;6395:34;6375:18;;;6368:62;6447:18;;9903:77:5::1;6115:356:63::0;9903:77:5::1;10007:10:::0;;9990:14:::1;10027::::0;;;10051:17:::1;::::0;;::::1;:21:::0;;;;10106:37;10082:10:::1;::::0;::::1;::::0;:70:::1;::::0;-1:-1:-1;;;;;10082:10:5;;::::1;::::0;10106:37:::1;10007:10:::0;10082:23:::1;:70::i;:::-;10229:10;::::0;::::1;::::0;10167:81:::1;::::0;;-1:-1:-1;;;;;10229:10:5;;::::1;3280:51:63::0;;3362:2;3347:18;;3340:34;;;10217:10:5::1;::::0;10167:81;::::1;::::0;::::1;::::0;3253:18:63;10167:81:5::1;;;;;;;;9838:417;;9752:503:::0;:::o;5383:525::-;-1:-1:-1;;;;;6095:20:5;;;6070:22;6095:20;;;:6;:20;;;;;;;;6133:10;;;;5461:12;;6133:10;6147;6133:24;6125:46;;;;-1:-1:-1;;;6125:46:5;;;;;;;:::i;:::-;-1:-1:-1;;;;;5510:20:5;::::1;5485:22;5510:20:::0;;;:6:::1;:20;::::0;;;;5548:17:::1;::::0;::::1;::::0;5540:61:::1;;;::::0;-1:-1:-1;;;5540:61:5;;10239:2:63;5540:61:5::1;::::0;::::1;10221:21:63::0;10278:2;10258:18;;;10251:30;10317:29;10297:18;;;10290:57;10364:18;;5540:61:5::1;10037:351:63::0;5540:61:5::1;5640:15;5619:4;:17;;;:36;;5611:70;;;::::0;-1:-1:-1;;;5611:70:5;;7022:2:63;5611:70:5::1;::::0;::::1;7004:21:63::0;7061:2;7041:18;;;7034:30;-1:-1:-1;;;7080:18:63;;;7073:51;7141:18;;5611:70:5::1;6820:345:63::0;5611:70:5::1;5708:10:::0;;5691:14:::1;5728::::0;;;5752:17:::1;::::0;::::1;:21:::0;5783:10:::1;::::0;::::1;::::0;:43:::1;::::0;-1:-1:-1;;;;;5783:10:5::1;5807;5708::::0;5783:23:::1;:43::i;:::-;5882:10;::::0;::::1;::::0;5841:60:::1;::::0;;-1:-1:-1;;;;;5882:10:5;;::::1;3280:51:63::0;;3362:2;3347:18;;3340:34;;;5870:10:5::1;::::0;5841:60;::::1;::::0;::::1;::::0;3253:18:63;5841:60:5::1;;;;;;;5475:433;;6060:129:::0;5383:525;;:::o;1218:301::-;1294:26;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1294:26:5;-1:-1:-1;;;;;;1383:28:5;;;1322:26;1383:28;;;:14;:28;;;;;;;;1412:10;1383:40;;;;;;;:52;1474:20;;;:6;:20;;;;;;;1466:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1383:73:5;;;;1218:301::o;2143:158::-;2216:33;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2216:33:5;-1:-1:-1;2261:33:5;;;;;;;;2268:26;2261:33;-1:-1:-1;;;;;2261:33:5;;;;;;;;;;;;;;;;;;;2143:158::o;1898:205::-;1094:13:47;:11;:13::i;:::-;1978:26:5::1;:51:::0;;-1:-1:-1;;;;;;1978:51:5::1;-1:-1:-1::0;;;;;1978:51:5;::::1;::::0;;::::1;::::0;;;2044:52:::1;::::0;::::1;::::0;-1:-1:-1;;2044:52:5::1;1898:205:::0;:::o;6699:131::-;6362:10;6330:22;6355:18;;;:6;:18;;;;;;;;6391:10;;;;-1:-1:-1;;;;;6391:10:5;6383:48;;;;-1:-1:-1;;;6383:48:5;;12783:2:63;6383:48:5;;;12765:21:63;12822:2;12802:18;;;12795:30;-1:-1:-1;;;12841:18:63;;;12834:41;12892:18;;6383:48:5;12581:335:63;6383:48:5;6788:35:::1;6802:10;6814:8;6788:13;:35::i;:::-;6320:129:::0;6699:131;:::o;2081:198:47:-;1094:13;:11;:13::i;:::-;-1:-1:-1;;;;;2169:22:47;::::1;2161:73;;;::::0;-1:-1:-1;;;2161:73:47;;5910:2:63;2161:73:47::1;::::0;::::1;5892:21:63::0;5949:2;5929:18;;;5922:30;5988:34;5968:18;;;5961:62;-1:-1:-1;;;6039:18:63;;;6032:36;6085:19;;2161:73:47::1;5708:402:63::0;2161:73:47::1;2244:28;2263:8;2244:18;:28::i;:::-;2081:198:::0;:::o;7087:174:5:-;-1:-1:-1;;;;;6095:20:5;;;6070:22;6095:20;;;:6;:20;;;;;;;;6133:10;;;;7191:12;;6133:10;6147;6133:24;6125:46;;;;-1:-1:-1;;;6125:46:5;;;;;;;:::i;:::-;7215:39:::1;7231:12;7245:8;7215:15;:39::i;7301:135::-:0;6362:10;6330:22;6355:18;;;:6;:18;;;;;;;;6391:10;;;;-1:-1:-1;;;;;6391:10:5;6383:48;;;;-1:-1:-1;;;6383:48:5;;12783:2:63;6383:48:5;;;12765:21:63;12822:2;12802:18;;;12795:30;-1:-1:-1;;;12841:18:63;;;12834:41;12892:18;;6383:48:5;12581:335:63;6383:48:5;7392:37:::1;7408:10;7420:8;7392:15;:37::i;3660:283::-:0;-1:-1:-1;;;;;3741:19:5;;3733:45;;;;-1:-1:-1;;;3733:45:5;;9189:2:63;3733:45:5;;;9171:21:63;9228:2;9208:18;;;9201:30;-1:-1:-1;;;9247:18:63;;;9240:43;9300:18;;3733:45:5;8987:337:63;3733:45:5;3803:10;3832:1;3796:18;;;:6;:18;;;;;;;;:24;;-1:-1:-1;;;;;3796:24:5;:38;3788:64;;;;-1:-1:-1;;;3788:64:5;;7372:2:63;3788:64:5;;;7354:21:63;7411:2;7391:18;;;7384:30;-1:-1:-1;;;7430:18:63;;;7423:43;7483:18;;3788:64:5;7170:337:63;3788:64:5;3869:10;3862:18;;;;:6;:18;;;;;;;;:24;;;:32;;-1:-1:-1;;;;;;3862:32:5;-1:-1:-1;;;;;3862:32:5;;;;;;;;3909:27;;3862:32;;3869:10;3909:27;;;3660:283;:::o;763:205:53:-;902:58;;-1:-1:-1;;;;;3298:32:63;;902:58:53;;;3280:51:63;3347:18;;;3340:34;;;875:86:53;;895:5;;-1:-1:-1;;;925:23:53;3253:18:63;;902:58:53;;;;-1:-1:-1;;902:58:53;;;;;;;;;;;;;;-1:-1:-1;;;;;902:58:53;-1:-1:-1;;;;;;902:58:53;;;;;;;;;;875:19;:86::i;:::-;763:205;;;:::o;974:241::-;1139:68;;-1:-1:-1;;;;;2984:15:63;;;1139:68:53;;;2966:34:63;3036:15;;3016:18;;;3009:43;3068:18;;;3061:34;;;1112:96:53;;1132:5;;-1:-1:-1;;;1162:27:53;2901:18:63;;1139:68:53;2726:375:63;1359:130:47;1247:7;1273:6;-1:-1:-1;;;;;1273:6:47;719:10:55;1422:23:47;1414:68;;;;-1:-1:-1;;;1414:68:47;;10595:2:63;1414:68:47;;;10577:21:63;;;10614:18;;;10607:30;10673:34;10653:18;;;10646:62;10725:18;;1414:68:47;10393:356:63;2433:187:47;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:47;;;-1:-1:-1;;;;;;2541:17:47;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;6836:211:5:-;-1:-1:-1;;;;;6918:28:5;;;;;;;:14;:28;;;;;;;;:38;;;;;;;;;;;;;-1:-1:-1;;6918:70:5;;7003:37;;;6918:28;7003:37;6836:211;;:::o;7442:399::-;-1:-1:-1;;;;;7557:28:5;;;7526;7557;;;:14;:28;;;;;;;;:38;;;;;;;;;7613:19;;-1:-1:-1;;7613:40:5;7605:71;;;;-1:-1:-1;;;7605:71:5;;9892:2:63;7605:71:5;;;9874:21:63;9931:2;9911:18;;;9904:30;-1:-1:-1;;;9950:18:63;;;9943:48;10008:18;;7605:71:5;9690:342:63;7605:71:5;-1:-1:-1;;;;;7726:20:5;;;;;;:6;:20;;;;;:33;;;7708:51;;:15;:51;:::i;:::-;7686:73;;;7774:60;;14634:25:63;;;-1:-1:-1;;;;;7774:60:5;;;;;;;;;;14622:2:63;14607:18;7774:60:5;14488:177:63;3747:706:53;4166:23;4192:69;4220:4;4192:69;;;;;;;;;;;;;;;;;4200:5;-1:-1:-1;;;;;4192:27:53;;;:69;;;;;:::i;:::-;4275:17;;4166:95;;-1:-1:-1;4275:21:53;4271:176;;4370:10;4359:30;;;;;;;;;;;;:::i;:::-;4351:85;;;;-1:-1:-1;;;4351:85:53;;11664:2:63;4351:85:53;;;11646:21:63;11703:2;11683:18;;;11676:30;11742:34;11722:18;;;11715:62;-1:-1:-1;;;11793:18:63;;;11786:40;11843:19;;4351:85:53;11462:406:63;3861:223:54;3994:12;4025:52;4047:6;4055:4;4061:1;4064:12;4025:21;:52::i;:::-;4018:59;3861:223;-1:-1:-1;;;;3861:223:54:o;4948:499::-;5113:12;5170:5;5145:21;:30;;5137:81;;;;-1:-1:-1;;;5137:81:54;;7714:2:63;5137:81:54;;;7696:21:63;7753:2;7733:18;;;7726:30;7792:34;7772:18;;;7765:62;-1:-1:-1;;;7843:18:63;;;7836:36;7889:19;;5137:81:54;7512:402:63;5137:81:54;-1:-1:-1;;;;;1465:19:54;;;5228:60;;;;-1:-1:-1;;;5228:60:54;;11306:2:63;5228:60:54;;;11288:21:63;11345:2;11325:18;;;11318:30;11384:31;11364:18;;;11357:59;11433:18;;5228:60:54;11104:353:63;5228:60:54;5300:12;5314:23;5341:6;-1:-1:-1;;;;;5341:11:54;5360:5;5367:4;5341:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5299:73;;;;5389:51;5406:7;5415:10;5427:12;5389:16;:51::i;:::-;5382:58;4948:499;-1:-1:-1;;;;;;;4948:499:54:o;7561:742::-;7707:12;7735:7;7731:566;;;-1:-1:-1;7765:10:54;7758:17;;7731:566;7876:17;;:21;7872:415;;8120:10;8114:17;8180:15;8167:10;8163:2;8159:19;8152:44;7872:415;8259:12;8252:20;;-1:-1:-1;;;8252:20:54;;;;;;;;:::i;14:247:63:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;181:9;168:23;200:31;225:5;200:31;:::i;266:388::-;334:6;342;395:2;383:9;374:7;370:23;366:32;363:52;;;411:1;408;401:12;363:52;450:9;437:23;469:31;494:5;469:31;:::i;:::-;519:5;-1:-1:-1;576:2:63;561:18;;548:32;589:33;548:32;589:33;:::i;:::-;641:7;631:17;;;266:388;;;;;:::o;659:456::-;736:6;744;752;805:2;793:9;784:7;780:23;776:32;773:52;;;821:1;818;811:12;773:52;860:9;847:23;879:31;904:5;879:31;:::i;:::-;929:5;-1:-1:-1;986:2:63;971:18;;958:32;999:33;958:32;999:33;:::i;:::-;659:456;;1051:7;;-1:-1:-1;;;1105:2:63;1090:18;;;;1077:32;;659:456::o;1120:277::-;1187:6;1240:2;1228:9;1219:7;1215:23;1211:32;1208:52;;;1256:1;1253;1246:12;1208:52;1288:9;1282:16;1341:5;1334:13;1327:21;1320:5;1317:32;1307:60;;1363:1;1360;1353:12;1402:286;1460:6;1513:2;1501:9;1492:7;1488:23;1484:32;1481:52;;;1529:1;1526;1519:12;1481:52;1555:23;;-1:-1:-1;;;;;;1607:32:63;;1597:43;;1587:71;;1654:1;1651;1644:12;1693:541;1795:6;1803;1811;1819;1872:3;1860:9;1851:7;1847:23;1843:33;1840:53;;;1889:1;1886;1879:12;1840:53;1928:9;1915:23;1947:31;1972:5;1947:31;:::i;:::-;1997:5;-1:-1:-1;2054:2:63;2039:18;;2026:32;2067:33;2026:32;2067:33;:::i;:::-;1693:541;;2119:7;;-1:-1:-1;;;;2173:2:63;2158:18;;2145:32;;2224:2;2209:18;2196:32;;1693:541::o;2239:274::-;2368:3;2406:6;2400:13;2422:53;2468:6;2463:3;2456:4;2448:6;2444:17;2422:53;:::i;:::-;2491:16;;;;;2239:274;-1:-1:-1;;2239:274:63:o;4238:383::-;4387:2;4376:9;4369:21;4350:4;4419:6;4413:13;4462:6;4457:2;4446:9;4442:18;4435:34;4478:66;4537:6;4532:2;4521:9;4517:18;4512:2;4504:6;4500:15;4478:66;:::i;:::-;4605:2;4584:15;-1:-1:-1;;4580:29:63;4565:45;;;;4612:2;4561:54;;4238:383;-1:-1:-1;;4238:383:63:o;12921:332::-;13123:2;13105:21;;;13162:1;13142:18;;;13135:29;-1:-1:-1;;;13195:2:63;13180:18;;13173:39;13244:2;13229:18;;12921:332::o;15354:128::-;15394:3;15425:1;15421:6;15418:1;15415:13;15412:39;;;15431:18;;:::i;:::-;-1:-1:-1;15467:9:63;;15354:128::o;15487:217::-;15527:1;15553;15543:132;;15597:10;15592:3;15588:20;15585:1;15578:31;15632:4;15629:1;15622:15;15660:4;15657:1;15650:15;15543:132;-1:-1:-1;15689:9:63;;15487:217::o;15709:125::-;15749:4;15777:1;15774;15771:8;15768:34;;;15782:18;;:::i;:::-;-1:-1:-1;15819:9:63;;15709:125::o;15839:258::-;15911:1;15921:113;15935:6;15932:1;15929:13;15921:113;;;16011:11;;;16005:18;15992:11;;;15985:39;15957:2;15950:10;15921:113;;;16052:6;16049:1;16046:13;16043:48;;;-1:-1:-1;;16087:1:63;16069:16;;16062:27;15839:258::o;16102:380::-;16181:1;16177:12;;;;16224;;;16245:61;;16299:4;16291:6;16287:17;16277:27;;16245:61;16352:2;16344:6;16341:14;16321:18;16318:38;16315:161;;;16398:10;16393:3;16389:20;16386:1;16379:31;16433:4;16430:1;16423:15;16461:4;16458:1;16451:15;16315:161;;16102:380;;;:::o;16487:127::-;16548:10;16543:3;16539:20;16536:1;16529:31;16579:4;16576:1;16569:15;16603:4;16600:1;16593:15;16619:131;-1:-1:-1;;;;;16694:31:63;;16684:42;;16674:70;;16740:1;16737;16730:12",
    "source": "pragma solidity ^0.8.0;\npragma abicoder v2;\n\n// solhint-disable not-rely-on-time\n// SPDX-License-Identifier: GPL-3.0-only\n\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\nimport \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport \"@openzeppelin/contracts/utils/introspection/ERC165.sol\";\n\nimport \"./interfaces/IStakeManager.sol\";\n\n/**\n * @title The StakeManager implementation\n * @notice An IStakeManager instance that accepts stakes in any ERC-20 token.\n *\n * @notice Single StakeInfo of a single RelayManager can only have one token address assigned to it.\n *\n * @notice It cannot be changed after the first time 'stakeForRelayManager' is called as it is equivalent to withdrawal.\n */\ncontract StakeManager is IStakeManager, Ownable, ERC165 {\n    using SafeERC20 for IERC20;\n\n    string public override versionSM = \"3.0.0-beta.3+opengsn.stakemanager.istakemanager\";\n    uint256 internal immutable maxUnstakeDelay;\n\n    AbandonedRelayServerConfig internal abandonedRelayServerConfig;\n\n    address internal burnAddress;\n    uint256 internal immutable creationBlock;\n\n    /// maps relay managers to their stakes\n    mapping(address => StakeInfo) public stakes;\n\n    /// @inheritdoc IStakeManager\n    function getStakeInfo(address relayManager) external override view returns (StakeInfo memory stakeInfo, bool isSenderAuthorizedHub) {\n        bool isHubAuthorized = authorizedHubs[relayManager][msg.sender].removalTime == type(uint256).max;\n        return (stakes[relayManager], isHubAuthorized);\n    }\n\n    /// @inheritdoc IStakeManager\n    function setBurnAddress(address _burnAddress) public override onlyOwner {\n        burnAddress = _burnAddress;\n        emit BurnAddressSet(burnAddress);\n    }\n\n    /// @inheritdoc IStakeManager\n    function getBurnAddress() external override view returns (address) {\n        return burnAddress;\n    }\n\n    /// @inheritdoc IStakeManager\n    function setDevAddress(address _devAddress) public override onlyOwner {\n        abandonedRelayServerConfig.devAddress = _devAddress;\n        emit DevAddressSet(abandonedRelayServerConfig.devAddress);\n    }\n\n    /// @inheritdoc IStakeManager\n    function getAbandonedRelayServerConfig() external override view returns (AbandonedRelayServerConfig memory) {\n        return abandonedRelayServerConfig;\n    }\n\n    /// @inheritdoc IStakeManager\n    function getMaxUnstakeDelay() external override view returns (uint256) {\n        return maxUnstakeDelay;\n    }\n\n    /// maps relay managers to a map of addressed of their authorized hubs to the information on that hub\n    mapping(address => mapping(address => RelayHubInfo)) public authorizedHubs;\n\n    constructor(\n        uint256 _maxUnstakeDelay,\n        uint256 _abandonmentDelay,\n        uint256 _escheatmentDelay,\n        address _burnAddress,\n        address _devAddress\n    ) {\n        require(_burnAddress != address(0), \"transfers to address(0) may fail\");\n        setBurnAddress(_burnAddress);\n        setDevAddress(_devAddress);\n        creationBlock = block.number;\n        maxUnstakeDelay = _maxUnstakeDelay;\n        abandonedRelayServerConfig.abandonmentDelay = _abandonmentDelay;\n        abandonedRelayServerConfig.escheatmentDelay = _escheatmentDelay;\n    }\n\n    /// @inheritdoc IERC165\n    function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC165) returns (bool) {\n        return interfaceId == type(IStakeManager).interfaceId ||\n        super.supportsInterface(interfaceId);\n    }\n\n    /// @inheritdoc IStakeManager\n    function getCreationBlock() external override view returns (uint256){\n        return creationBlock;\n    }\n\n    /// @inheritdoc IStakeManager\n    function setRelayManagerOwner(address owner) external override {\n        require(owner != address(0), \"invalid owner\");\n        require(stakes[msg.sender].owner == address(0), \"already owned\");\n        stakes[msg.sender].owner = owner;\n        emit OwnerSet(msg.sender, owner);\n    }\n\n    /// @inheritdoc IStakeManager\n    function stakeForRelayManager(IERC20 token, address relayManager, uint256 unstakeDelay, uint256 amount) external override relayOwnerOnly(relayManager) {\n        require(unstakeDelay >= stakes[relayManager].unstakeDelay, \"unstakeDelay cannot be decreased\");\n        require(unstakeDelay <= maxUnstakeDelay, \"unstakeDelay too big\");\n        require(token != IERC20(address(0)), \"must specify stake token address\");\n        require(\n            stakes[relayManager].token == IERC20(address(0)) ||\n            stakes[relayManager].token == token,\n            \"stake token address is incorrect\");\n        token.safeTransferFrom(msg.sender, address(this), amount);\n        stakes[relayManager].token = token;\n        stakes[relayManager].stake += amount;\n        stakes[relayManager].unstakeDelay = unstakeDelay;\n        emit StakeAdded(relayManager, stakes[relayManager].owner, stakes[relayManager].token, stakes[relayManager].stake, stakes[relayManager].unstakeDelay);\n    }\n\n    /// @inheritdoc IStakeManager\n    function unlockStake(address relayManager) external override relayOwnerOnly(relayManager) {\n        StakeInfo storage info = stakes[relayManager];\n        require(info.withdrawTime == 0, \"already pending\");\n        info.withdrawTime = block.timestamp + info.unstakeDelay;\n        emit StakeUnlocked(relayManager, msg.sender, info.withdrawTime);\n    }\n\n    /// @inheritdoc IStakeManager\n    function withdrawStake(address relayManager) external override relayOwnerOnly(relayManager) {\n        StakeInfo storage info = stakes[relayManager];\n        require(info.withdrawTime > 0, \"Withdrawal is not scheduled\");\n        require(info.withdrawTime <= block.timestamp, \"Withdrawal is not due\");\n        uint256 amount = info.stake;\n        info.stake = 0;\n        info.withdrawTime = 0;\n        info.token.safeTransfer(msg.sender, amount);\n        emit StakeWithdrawn(relayManager, msg.sender, info.token, amount);\n    }\n\n    /// @notice Prevents any address other than a registered Relay Owner from calling this method.\n    modifier relayOwnerOnly (address relayManager) {\n        StakeInfo storage info = stakes[relayManager];\n        require(info.owner == msg.sender, \"not owner\");\n        _;\n    }\n\n    /// @notice Prevents any address other than a registered Relay Manager from calling this method.\n    modifier managerOnly () {\n        StakeInfo storage info = stakes[msg.sender];\n        require(info.owner != address(0), \"not manager\");\n        _;\n    }\n\n    /// @inheritdoc IStakeManager\n    function authorizeHubByOwner(address relayManager, address relayHub) external relayOwnerOnly(relayManager) override {\n        _authorizeHub(relayManager, relayHub);\n    }\n\n    /// @inheritdoc IStakeManager\n    function authorizeHubByManager(address relayHub) external managerOnly override {\n        _authorizeHub(msg.sender, relayHub);\n    }\n\n    function _authorizeHub(address relayManager, address relayHub) internal {\n        authorizedHubs[relayManager][relayHub].removalTime = type(uint256).max;\n        emit HubAuthorized(relayManager, relayHub);\n    }\n\n    /// @inheritdoc IStakeManager\n    function unauthorizeHubByOwner(address relayManager, address relayHub) external override relayOwnerOnly(relayManager) {\n        _unauthorizeHub(relayManager, relayHub);\n    }\n\n    /// @inheritdoc IStakeManager\n    function unauthorizeHubByManager(address relayHub) external override managerOnly {\n        _unauthorizeHub(msg.sender, relayHub);\n    }\n\n    function _unauthorizeHub(address relayManager, address relayHub) internal {\n        RelayHubInfo storage hubInfo = authorizedHubs[relayManager][relayHub];\n        require(hubInfo.removalTime == type(uint256).max, \"hub not authorized\");\n        hubInfo.removalTime = block.timestamp + stakes[relayManager].unstakeDelay;\n        emit HubUnauthorized(relayManager, relayHub, hubInfo.removalTime);\n    }\n\n    /// @inheritdoc IStakeManager\n    function penalizeRelayManager(address relayManager, address beneficiary, uint256 amount) external override {\n        uint256 removalTime = authorizedHubs[relayManager][msg.sender].removalTime;\n        require(removalTime != 0, \"hub not authorized\");\n        require(removalTime > block.timestamp, \"hub authorization expired\");\n\n        // Half of the stake will be burned (sent to address 0)\n        require(stakes[relayManager].stake >= amount, \"penalty exceeds stake\");\n        stakes[relayManager].stake =stakes[relayManager].stake - amount;\n\n        uint256 toBurn = amount / 2;\n        uint256 reward = amount - toBurn;\n\n        // Stake ERC-20 token is burned and transferred\n        stakes[relayManager].token.safeTransfer(burnAddress, toBurn);\n        stakes[relayManager].token.safeTransfer(beneficiary, reward);\n        emit StakePenalized(relayManager, beneficiary, stakes[relayManager].token, reward);\n    }\n\n    /// @inheritdoc IStakeManager\n    function isRelayEscheatable(address relayManager) public view override returns (bool) {\n        IStakeManager.StakeInfo memory stakeInfo = stakes[relayManager];\n        return stakeInfo.abandonedTime != 0 && stakeInfo.abandonedTime + abandonedRelayServerConfig.escheatmentDelay < block.timestamp;\n    }\n\n    /// @inheritdoc IStakeManager\n    function markRelayAbandoned(address relayManager) external override onlyOwner {\n        StakeInfo storage info = stakes[relayManager];\n        require(info.stake > 0, \"relay manager not staked\");\n        require(info.abandonedTime == 0, \"relay manager already abandoned\");\n        require(info.keepaliveTime + abandonedRelayServerConfig.abandonmentDelay < block.timestamp, \"relay manager was alive recently\");\n        info.abandonedTime = block.timestamp;\n        emit RelayServerAbandoned(relayManager, info.abandonedTime);\n    }\n\n    /// @inheritdoc IStakeManager\n    function escheatAbandonedRelayStake(address relayManager) external override onlyOwner {\n        StakeInfo storage info = stakes[relayManager];\n        require(isRelayEscheatable(relayManager), \"relay server not escheatable yet\");\n        uint256 amount = info.stake;\n        info.stake = 0;\n        info.withdrawTime = 0;\n        info.token.safeTransfer(abandonedRelayServerConfig.devAddress, amount);\n        emit AbandonedRelayManagerStakeEscheated(relayManager, msg.sender, info.token, amount);\n    }\n\n    /// @inheritdoc IStakeManager\n    function updateRelayKeepaliveTime(address relayManager) external override {\n        StakeInfo storage info = stakes[relayManager];\n        bool isHubAuthorized = authorizedHubs[relayManager][msg.sender].removalTime == type(uint256).max;\n        bool isRelayOwner = info.owner == msg.sender;\n        require(isHubAuthorized || isRelayOwner, \"must be called by owner or hub\");\n        info.abandonedTime = 0;\n        info.keepaliveTime = block.timestamp;\n        emit RelayServerKeepalive(relayManager, info.keepaliveTime);\n    }\n}",
    "sourcePath": "/Users/alexf/gsn2/packages/contracts/solpp/StakeManager.sol",
    "ast": {
        "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/StakeManager.sol",
        "exportedSymbols": {
            "Address": [
                11486
            ],
            "Context": [
                11508
            ],
            "ERC165": [
                12146
            ],
            "IERC165": [
                12352
            ],
            "IERC20": [
                10849
            ],
            "IERC20Permit": [
                10910
            ],
            "IStakeManager": [
                6284
            ],
            "Ownable": [
                10182
            ],
            "SafeERC20": [
                11191
            ],
            "StakeManager": [
                4355
            ]
        },
        "id": 4356,
        "license": "GPL-3.0-only",
        "nodeType": "SourceUnit",
        "nodes": [
            {
                "id": 3332,
                "literals": [
                    "solidity",
                    "^",
                    "0.8",
                    ".0"
                ],
                "nodeType": "PragmaDirective",
                "src": "0:23:5"
            },
            {
                "id": 3333,
                "literals": [
                    "abicoder",
                    "v2"
                ],
                "nodeType": "PragmaDirective",
                "src": "24:19:5"
            },
            {
                "absolutePath": "@openzeppelin/contracts/access/Ownable.sol",
                "file": "@openzeppelin/contracts/access/Ownable.sol",
                "id": 3334,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 4356,
                "sourceUnit": 10183,
                "src": "123:52:5",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol",
                "file": "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol",
                "id": 3335,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 4356,
                "sourceUnit": 11192,
                "src": "176:65:5",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "@openzeppelin/contracts/utils/introspection/ERC165.sol",
                "file": "@openzeppelin/contracts/utils/introspection/ERC165.sol",
                "id": 3336,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 4356,
                "sourceUnit": 12147,
                "src": "242:64:5",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/interfaces/IStakeManager.sol",
                "file": "./interfaces/IStakeManager.sol",
                "id": 3337,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 4356,
                "sourceUnit": 6285,
                "src": "308:40:5",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "abstract": false,
                "baseContracts": [
                    {
                        "baseName": {
                            "id": 3339,
                            "name": "IStakeManager",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 6284,
                            "src": "731:13:5"
                        },
                        "id": 3340,
                        "nodeType": "InheritanceSpecifier",
                        "src": "731:13:5"
                    },
                    {
                        "baseName": {
                            "id": 3341,
                            "name": "Ownable",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 10182,
                            "src": "746:7:5"
                        },
                        "id": 3342,
                        "nodeType": "InheritanceSpecifier",
                        "src": "746:7:5"
                    },
                    {
                        "baseName": {
                            "id": 3343,
                            "name": "ERC165",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 12146,
                            "src": "755:6:5"
                        },
                        "id": 3344,
                        "nodeType": "InheritanceSpecifier",
                        "src": "755:6:5"
                    }
                ],
                "contractDependencies": [],
                "contractKind": "contract",
                "documentation": {
                    "id": 3338,
                    "nodeType": "StructuredDocumentation",
                    "src": "350:355:5",
                    "text": " @title The StakeManager implementation\n @notice An IStakeManager instance that accepts stakes in any ERC-20 token.\n @notice Single StakeInfo of a single RelayManager can only have one token address assigned to it.\n @notice It cannot be changed after the first time 'stakeForRelayManager' is called as it is equivalent to withdrawal."
                },
                "fullyImplemented": true,
                "id": 4355,
                "linearizedBaseContracts": [
                    4355,
                    12146,
                    10182,
                    11508,
                    6284,
                    12352
                ],
                "name": "StakeManager",
                "nameLocation": "715:12:5",
                "nodeType": "ContractDefinition",
                "nodes": [
                    {
                        "id": 3348,
                        "libraryName": {
                            "id": 3345,
                            "name": "SafeERC20",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 11191,
                            "src": "774:9:5"
                        },
                        "nodeType": "UsingForDirective",
                        "src": "768:27:5",
                        "typeName": {
                            "id": 3347,
                            "nodeType": "UserDefinedTypeName",
                            "pathNode": {
                                "id": 3346,
                                "name": "IERC20",
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 10849,
                                "src": "788:6:5"
                            },
                            "referencedDeclaration": 10849,
                            "src": "788:6:5",
                            "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$10849",
                                "typeString": "contract IERC20"
                            }
                        }
                    },
                    {
                        "baseFunctions": [
                            6283
                        ],
                        "constant": false,
                        "functionSelector": "47116c6e",
                        "id": 3352,
                        "mutability": "mutable",
                        "name": "versionSM",
                        "nameLocation": "824:9:5",
                        "nodeType": "VariableDeclaration",
                        "overrides": {
                            "id": 3350,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "815:8:5"
                        },
                        "scope": 4355,
                        "src": "801:84:5",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string"
                        },
                        "typeName": {
                            "id": 3349,
                            "name": "string",
                            "nodeType": "ElementaryTypeName",
                            "src": "801:6:5",
                            "typeDescriptions": {
                                "typeIdentifier": "t_string_storage_ptr",
                                "typeString": "string"
                            }
                        },
                        "value": {
                            "hexValue": "332e302e302d626574612e332b6f70656e67736e2e7374616b656d616e616765722e697374616b656d616e61676572",
                            "id": 3351,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "836:49:5",
                            "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_bc773edf1efbe7316ae756fc9bf1a90b13a83f1771da440d20beac916ff7aa0a",
                                "typeString": "literal_string \"3.0.0-beta.3+opengsn.stakemanager.istakemanager\""
                            },
                            "value": "3.0.0-beta.3+opengsn.stakemanager.istakemanager"
                        },
                        "visibility": "public"
                    },
                    {
                        "constant": false,
                        "id": 3354,
                        "mutability": "immutable",
                        "name": "maxUnstakeDelay",
                        "nameLocation": "918:15:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 4355,
                        "src": "891:42:5",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                        },
                        "typeName": {
                            "id": 3353,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "891:7:5",
                            "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                            }
                        },
                        "visibility": "internal"
                    },
                    {
                        "constant": false,
                        "id": 3357,
                        "mutability": "mutable",
                        "name": "abandonedRelayServerConfig",
                        "nameLocation": "976:26:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 4355,
                        "src": "940:62:5",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_struct$_AbandonedRelayServerConfig_$6134_storage",
                            "typeString": "struct IStakeManager.AbandonedRelayServerConfig"
                        },
                        "typeName": {
                            "id": 3356,
                            "nodeType": "UserDefinedTypeName",
                            "pathNode": {
                                "id": 3355,
                                "name": "AbandonedRelayServerConfig",
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 6134,
                                "src": "940:26:5"
                            },
                            "referencedDeclaration": 6134,
                            "src": "940:26:5",
                            "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AbandonedRelayServerConfig_$6134_storage_ptr",
                                "typeString": "struct IStakeManager.AbandonedRelayServerConfig"
                            }
                        },
                        "visibility": "internal"
                    },
                    {
                        "constant": false,
                        "id": 3359,
                        "mutability": "mutable",
                        "name": "burnAddress",
                        "nameLocation": "1026:11:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 4355,
                        "src": "1009:28:5",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                        },
                        "typeName": {
                            "id": 3358,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1009:7:5",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                            }
                        },
                        "visibility": "internal"
                    },
                    {
                        "constant": false,
                        "id": 3361,
                        "mutability": "immutable",
                        "name": "creationBlock",
                        "nameLocation": "1070:13:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 4355,
                        "src": "1043:40:5",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                        },
                        "typeName": {
                            "id": 3360,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "1043:7:5",
                            "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                            }
                        },
                        "visibility": "internal"
                    },
                    {
                        "constant": false,
                        "documentation": {
                            "id": 3362,
                            "nodeType": "StructuredDocumentation",
                            "src": "1090:39:5",
                            "text": "maps relay managers to their stakes"
                        },
                        "functionSelector": "16934fc4",
                        "id": 3367,
                        "mutability": "mutable",
                        "name": "stakes",
                        "nameLocation": "1171:6:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 4355,
                        "src": "1134:43:5",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$6124_storage_$",
                            "typeString": "mapping(address => struct IStakeManager.StakeInfo)"
                        },
                        "typeName": {
                            "id": 3366,
                            "keyType": {
                                "id": 3363,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "1142:7:5",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                }
                            },
                            "nodeType": "Mapping",
                            "src": "1134:29:5",
                            "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$6124_storage_$",
                                "typeString": "mapping(address => struct IStakeManager.StakeInfo)"
                            },
                            "valueType": {
                                "id": 3365,
                                "nodeType": "UserDefinedTypeName",
                                "pathNode": {
                                    "id": 3364,
                                    "name": "StakeInfo",
                                    "nodeType": "IdentifierPath",
                                    "referencedDeclaration": 6124,
                                    "src": "1153:9:5"
                                },
                                "referencedDeclaration": 6124,
                                "src": "1153:9:5",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                    "typeString": "struct IStakeManager.StakeInfo"
                                }
                            }
                        },
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            6240
                        ],
                        "body": {
                            "id": 3401,
                            "nodeType": "Block",
                            "src": "1350:169:5",
                            "statements": [
                                {
                                    "assignments": [
                                        3380
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 3380,
                                            "mutability": "mutable",
                                            "name": "isHubAuthorized",
                                            "nameLocation": "1365:15:5",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 3401,
                                            "src": "1360:20:5",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            },
                                            "typeName": {
                                                "id": 3379,
                                                "name": "bool",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "1360:4:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 3394,
                                    "initialValue": {
                                        "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        },
                                        "id": 3393,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "expression": {
                                                "baseExpression": {
                                                    "baseExpression": {
                                                        "id": 3381,
                                                        "name": "authorizedHubs",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3480,
                                                        "src": "1383:14:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_struct$_RelayHubInfo_$6127_storage_$_$",
                                                            "typeString": "mapping(address => mapping(address => struct IStakeManager.RelayHubInfo storage ref))"
                                                        }
                                                    },
                                                    "id": 3383,
                                                    "indexExpression": {
                                                        "id": 3382,
                                                        "name": "relayManager",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3370,
                                                        "src": "1398:12:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "1383:28:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_RelayHubInfo_$6127_storage_$",
                                                        "typeString": "mapping(address => struct IStakeManager.RelayHubInfo storage ref)"
                                                    }
                                                },
                                                "id": 3386,
                                                "indexExpression": {
                                                    "expression": {
                                                        "id": 3384,
                                                        "name": "msg",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967281,
                                                        "src": "1412:3:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_message",
                                                            "typeString": "msg"
                                                        }
                                                    },
                                                    "id": 3385,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "sender",
                                                    "nodeType": "MemberAccess",
                                                    "src": "1412:10:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "IndexAccess",
                                                "src": "1383:40:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_RelayHubInfo_$6127_storage",
                                                    "typeString": "struct IStakeManager.RelayHubInfo storage ref"
                                                }
                                            },
                                            "id": 3387,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "removalTime",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6126,
                                            "src": "1383:52:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "==",
                                        "rightExpression": {
                                            "expression": {
                                                "arguments": [
                                                    {
                                                        "id": 3390,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "ElementaryTypeNameExpression",
                                                        "src": "1444:7:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_uint256_$",
                                                            "typeString": "type(uint256)"
                                                        },
                                                        "typeName": {
                                                            "id": 3389,
                                                            "name": "uint256",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "1444:7:5",
                                                            "typeDescriptions": {}
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_type$_t_uint256_$",
                                                            "typeString": "type(uint256)"
                                                        }
                                                    ],
                                                    "id": 3388,
                                                    "name": "type",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967269,
                                                    "src": "1439:4:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                                        "typeString": "function () pure"
                                                    }
                                                },
                                                "id": 3391,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "1439:13:5",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_magic_meta_type_t_uint256",
                                                    "typeString": "type(uint256)"
                                                }
                                            },
                                            "id": 3392,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "memberName": "max",
                                            "nodeType": "MemberAccess",
                                            "src": "1439:17:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "1383:73:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "1360:96:5"
                                },
                                {
                                    "expression": {
                                        "components": [
                                            {
                                                "baseExpression": {
                                                    "id": 3395,
                                                    "name": "stakes",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3367,
                                                    "src": "1474:6:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$6124_storage_$",
                                                        "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                    }
                                                },
                                                "id": 3397,
                                                "indexExpression": {
                                                    "id": 3396,
                                                    "name": "relayManager",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3370,
                                                    "src": "1481:12:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "IndexAccess",
                                                "src": "1474:20:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$6124_storage",
                                                    "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                }
                                            },
                                            {
                                                "id": 3398,
                                                "name": "isHubAuthorized",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3380,
                                                "src": "1496:15:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            }
                                        ],
                                        "id": 3399,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "1473:39:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_struct$_StakeInfo_$6124_storage_$_t_bool_$",
                                            "typeString": "tuple(struct IStakeManager.StakeInfo storage ref,bool)"
                                        }
                                    },
                                    "functionReturnParameters": 3378,
                                    "id": 3400,
                                    "nodeType": "Return",
                                    "src": "1466:46:5"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 3368,
                            "nodeType": "StructuredDocumentation",
                            "src": "1184:29:5",
                            "text": "@inheritdoc IStakeManager"
                        },
                        "functionSelector": "c3453153",
                        "id": 3402,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getStakeInfo",
                        "nameLocation": "1227:12:5",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 3372,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "1271:8:5"
                        },
                        "parameters": {
                            "id": 3371,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 3370,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "1248:12:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3402,
                                    "src": "1240:20:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 3369,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1240:7:5",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1239:22:5"
                        },
                        "returnParameters": {
                            "id": 3378,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 3375,
                                    "mutability": "mutable",
                                    "name": "stakeInfo",
                                    "nameLocation": "1311:9:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3402,
                                    "src": "1294:26:5",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_StakeInfo_$6124_memory_ptr",
                                        "typeString": "struct IStakeManager.StakeInfo"
                                    },
                                    "typeName": {
                                        "id": 3374,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 3373,
                                            "name": "StakeInfo",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 6124,
                                            "src": "1294:9:5"
                                        },
                                        "referencedDeclaration": 6124,
                                        "src": "1294:9:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                            "typeString": "struct IStakeManager.StakeInfo"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 3377,
                                    "mutability": "mutable",
                                    "name": "isSenderAuthorizedHub",
                                    "nameLocation": "1327:21:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3402,
                                    "src": "1322:26:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 3376,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1322:4:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1293:56:5"
                        },
                        "scope": 4355,
                        "src": "1218:301:5",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            6252
                        ],
                        "body": {
                            "id": 3419,
                            "nodeType": "Block",
                            "src": "1631:85:5",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 3413,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 3411,
                                            "name": "burnAddress",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3359,
                                            "src": "1641:11:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 3412,
                                            "name": "_burnAddress",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3405,
                                            "src": "1655:12:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "src": "1641:26:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "id": 3414,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1641:26:5"
                                },
                                {
                                    "eventCall": {
                                        "arguments": [
                                            {
                                                "id": 3416,
                                                "name": "burnAddress",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3359,
                                                "src": "1697:11:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "id": 3415,
                                            "name": "BurnAddressSet",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6077,
                                            "src": "1682:14:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                                                "typeString": "function (address)"
                                            }
                                        },
                                        "id": 3417,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1682:27:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3418,
                                    "nodeType": "EmitStatement",
                                    "src": "1677:32:5"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 3403,
                            "nodeType": "StructuredDocumentation",
                            "src": "1525:29:5",
                            "text": "@inheritdoc IStakeManager"
                        },
                        "functionSelector": "4b0e7216",
                        "id": 3420,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [
                            {
                                "id": 3409,
                                "kind": "modifierInvocation",
                                "modifierName": {
                                    "id": 3408,
                                    "name": "onlyOwner",
                                    "nodeType": "IdentifierPath",
                                    "referencedDeclaration": 10101,
                                    "src": "1621:9:5"
                                },
                                "nodeType": "ModifierInvocation",
                                "src": "1621:9:5"
                            }
                        ],
                        "name": "setBurnAddress",
                        "nameLocation": "1568:14:5",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 3407,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "1612:8:5"
                        },
                        "parameters": {
                            "id": 3406,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 3405,
                                    "mutability": "mutable",
                                    "name": "_burnAddress",
                                    "nameLocation": "1591:12:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3420,
                                    "src": "1583:20:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 3404,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1583:7:5",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1582:22:5"
                        },
                        "returnParameters": {
                            "id": 3410,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1631:0:5"
                        },
                        "scope": 4355,
                        "src": "1559:157:5",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            6258
                        ],
                        "body": {
                            "id": 3429,
                            "nodeType": "Block",
                            "src": "1823:35:5",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 3427,
                                        "name": "burnAddress",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3359,
                                        "src": "1840:11:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "functionReturnParameters": 3426,
                                    "id": 3428,
                                    "nodeType": "Return",
                                    "src": "1833:18:5"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 3421,
                            "nodeType": "StructuredDocumentation",
                            "src": "1722:29:5",
                            "text": "@inheritdoc IStakeManager"
                        },
                        "functionSelector": "38b39d29",
                        "id": 3430,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getBurnAddress",
                        "nameLocation": "1765:14:5",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 3423,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "1791:8:5"
                        },
                        "parameters": {
                            "id": 3422,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1779:2:5"
                        },
                        "returnParameters": {
                            "id": 3426,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 3425,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3430,
                                    "src": "1814:7:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 3424,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1814:7:5",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1813:9:5"
                        },
                        "scope": 4355,
                        "src": "1756:102:5",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            6264
                        ],
                        "body": {
                            "id": 3450,
                            "nodeType": "Block",
                            "src": "1968:135:5",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 3443,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "expression": {
                                                "id": 3439,
                                                "name": "abandonedRelayServerConfig",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3357,
                                                "src": "1978:26:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_AbandonedRelayServerConfig_$6134_storage",
                                                    "typeString": "struct IStakeManager.AbandonedRelayServerConfig storage ref"
                                                }
                                            },
                                            "id": 3441,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "devAddress",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6129,
                                            "src": "1978:37:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 3442,
                                            "name": "_devAddress",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3433,
                                            "src": "2018:11:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "src": "1978:51:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "id": 3444,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1978:51:5"
                                },
                                {
                                    "eventCall": {
                                        "arguments": [
                                            {
                                                "expression": {
                                                    "id": 3446,
                                                    "name": "abandonedRelayServerConfig",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3357,
                                                    "src": "2058:26:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_AbandonedRelayServerConfig_$6134_storage",
                                                        "typeString": "struct IStakeManager.AbandonedRelayServerConfig storage ref"
                                                    }
                                                },
                                                "id": 3447,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "devAddress",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 6129,
                                                "src": "2058:37:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "id": 3445,
                                            "name": "DevAddressSet",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6082,
                                            "src": "2044:13:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                                                "typeString": "function (address)"
                                            }
                                        },
                                        "id": 3448,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2044:52:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3449,
                                    "nodeType": "EmitStatement",
                                    "src": "2039:57:5"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 3431,
                            "nodeType": "StructuredDocumentation",
                            "src": "1864:29:5",
                            "text": "@inheritdoc IStakeManager"
                        },
                        "functionSelector": "d0d41fe1",
                        "id": 3451,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [
                            {
                                "id": 3437,
                                "kind": "modifierInvocation",
                                "modifierName": {
                                    "id": 3436,
                                    "name": "onlyOwner",
                                    "nodeType": "IdentifierPath",
                                    "referencedDeclaration": 10101,
                                    "src": "1958:9:5"
                                },
                                "nodeType": "ModifierInvocation",
                                "src": "1958:9:5"
                            }
                        ],
                        "name": "setDevAddress",
                        "nameLocation": "1907:13:5",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 3435,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "1949:8:5"
                        },
                        "parameters": {
                            "id": 3434,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 3433,
                                    "mutability": "mutable",
                                    "name": "_devAddress",
                                    "nameLocation": "1929:11:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3451,
                                    "src": "1921:19:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 3432,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1921:7:5",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1920:21:5"
                        },
                        "returnParameters": {
                            "id": 3438,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1968:0:5"
                        },
                        "scope": 4355,
                        "src": "1898:205:5",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            6271
                        ],
                        "body": {
                            "id": 3461,
                            "nodeType": "Block",
                            "src": "2251:50:5",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 3459,
                                        "name": "abandonedRelayServerConfig",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3357,
                                        "src": "2268:26:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_AbandonedRelayServerConfig_$6134_storage",
                                            "typeString": "struct IStakeManager.AbandonedRelayServerConfig storage ref"
                                        }
                                    },
                                    "functionReturnParameters": 3458,
                                    "id": 3460,
                                    "nodeType": "Return",
                                    "src": "2261:33:5"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 3452,
                            "nodeType": "StructuredDocumentation",
                            "src": "2109:29:5",
                            "text": "@inheritdoc IStakeManager"
                        },
                        "functionSelector": "c5f06743",
                        "id": 3462,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getAbandonedRelayServerConfig",
                        "nameLocation": "2152:29:5",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 3454,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "2193:8:5"
                        },
                        "parameters": {
                            "id": 3453,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "2181:2:5"
                        },
                        "returnParameters": {
                            "id": 3458,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 3457,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3462,
                                    "src": "2216:33:5",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_AbandonedRelayServerConfig_$6134_memory_ptr",
                                        "typeString": "struct IStakeManager.AbandonedRelayServerConfig"
                                    },
                                    "typeName": {
                                        "id": 3456,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 3455,
                                            "name": "AbandonedRelayServerConfig",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 6134,
                                            "src": "2216:26:5"
                                        },
                                        "referencedDeclaration": 6134,
                                        "src": "2216:26:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_AbandonedRelayServerConfig_$6134_storage_ptr",
                                            "typeString": "struct IStakeManager.AbandonedRelayServerConfig"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2215:35:5"
                        },
                        "scope": 4355,
                        "src": "2143:158:5",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            6246
                        ],
                        "body": {
                            "id": 3471,
                            "nodeType": "Block",
                            "src": "2412:39:5",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 3469,
                                        "name": "maxUnstakeDelay",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3354,
                                        "src": "2429:15:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "functionReturnParameters": 3468,
                                    "id": 3470,
                                    "nodeType": "Return",
                                    "src": "2422:22:5"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 3463,
                            "nodeType": "StructuredDocumentation",
                            "src": "2307:29:5",
                            "text": "@inheritdoc IStakeManager"
                        },
                        "functionSelector": "afcb7752",
                        "id": 3472,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getMaxUnstakeDelay",
                        "nameLocation": "2350:18:5",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 3465,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "2380:8:5"
                        },
                        "parameters": {
                            "id": 3464,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "2368:2:5"
                        },
                        "returnParameters": {
                            "id": 3468,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 3467,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3472,
                                    "src": "2403:7:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 3466,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2403:7:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2402:9:5"
                        },
                        "scope": 4355,
                        "src": "2341:110:5",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "constant": false,
                        "documentation": {
                            "id": 3473,
                            "nodeType": "StructuredDocumentation",
                            "src": "2457:101:5",
                            "text": "maps relay managers to a map of addressed of their authorized hubs to the information on that hub"
                        },
                        "functionSelector": "7aeb642a",
                        "id": 3480,
                        "mutability": "mutable",
                        "name": "authorizedHubs",
                        "nameLocation": "2623:14:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 4355,
                        "src": "2563:74:5",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_struct$_RelayHubInfo_$6127_storage_$_$",
                            "typeString": "mapping(address => mapping(address => struct IStakeManager.RelayHubInfo))"
                        },
                        "typeName": {
                            "id": 3479,
                            "keyType": {
                                "id": 3474,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "2571:7:5",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                }
                            },
                            "nodeType": "Mapping",
                            "src": "2563:52:5",
                            "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_struct$_RelayHubInfo_$6127_storage_$_$",
                                "typeString": "mapping(address => mapping(address => struct IStakeManager.RelayHubInfo))"
                            },
                            "valueType": {
                                "id": 3478,
                                "keyType": {
                                    "id": 3475,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "2590:7:5",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    }
                                },
                                "nodeType": "Mapping",
                                "src": "2582:32:5",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_RelayHubInfo_$6127_storage_$",
                                    "typeString": "mapping(address => struct IStakeManager.RelayHubInfo)"
                                },
                                "valueType": {
                                    "id": 3477,
                                    "nodeType": "UserDefinedTypeName",
                                    "pathNode": {
                                        "id": 3476,
                                        "name": "RelayHubInfo",
                                        "nodeType": "IdentifierPath",
                                        "referencedDeclaration": 6127,
                                        "src": "2601:12:5"
                                    },
                                    "referencedDeclaration": 6127,
                                    "src": "2601:12:5",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RelayHubInfo_$6127_storage_ptr",
                                        "typeString": "struct IStakeManager.RelayHubInfo"
                                    }
                                }
                            }
                        },
                        "visibility": "public"
                    },
                    {
                        "body": {
                            "id": 3532,
                            "nodeType": "Block",
                            "src": "2825:390:5",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                "id": 3499,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "id": 3494,
                                                    "name": "_burnAddress",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3488,
                                                    "src": "2843:12:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "!=",
                                                "rightExpression": {
                                                    "arguments": [
                                                        {
                                                            "hexValue": "30",
                                                            "id": 3497,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "number",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "2867:1:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_rational_0_by_1",
                                                                "typeString": "int_const 0"
                                                            },
                                                            "value": "0"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_rational_0_by_1",
                                                                "typeString": "int_const 0"
                                                            }
                                                        ],
                                                        "id": 3496,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "ElementaryTypeNameExpression",
                                                        "src": "2859:7:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_address_$",
                                                            "typeString": "type(address)"
                                                        },
                                                        "typeName": {
                                                            "id": 3495,
                                                            "name": "address",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "2859:7:5",
                                                            "typeDescriptions": {}
                                                        }
                                                    },
                                                    "id": 3498,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "typeConversion",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "2859:10:5",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "src": "2843:26:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "7472616e736665727320746f2061646472657373283029206d6179206661696c",
                                                "id": 3500,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "2871:34:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_d2dc68a55195058c4ef5abab06e9a921d08b8ebfa4c5afa7811d1212089e7e32",
                                                    "typeString": "literal_string \"transfers to address(0) may fail\""
                                                },
                                                "value": "transfers to address(0) may fail"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_d2dc68a55195058c4ef5abab06e9a921d08b8ebfa4c5afa7811d1212089e7e32",
                                                    "typeString": "literal_string \"transfers to address(0) may fail\""
                                                }
                                            ],
                                            "id": 3493,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "2835:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 3501,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2835:71:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3502,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2835:71:5"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 3504,
                                                "name": "_burnAddress",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3488,
                                                "src": "2931:12:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "id": 3503,
                                            "name": "setBurnAddress",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3420,
                                            "src": "2916:14:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                                                "typeString": "function (address)"
                                            }
                                        },
                                        "id": 3505,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2916:28:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3506,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2916:28:5"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 3508,
                                                "name": "_devAddress",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3490,
                                                "src": "2968:11:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "id": 3507,
                                            "name": "setDevAddress",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3451,
                                            "src": "2954:13:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                                                "typeString": "function (address)"
                                            }
                                        },
                                        "id": 3509,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2954:26:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3510,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2954:26:5"
                                },
                                {
                                    "expression": {
                                        "id": 3514,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 3511,
                                            "name": "creationBlock",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3361,
                                            "src": "2990:13:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "expression": {
                                                "id": 3512,
                                                "name": "block",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4294967292,
                                                "src": "3006:5:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_magic_block",
                                                    "typeString": "block"
                                                }
                                            },
                                            "id": 3513,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "number",
                                            "nodeType": "MemberAccess",
                                            "src": "3006:12:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "2990:28:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 3515,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2990:28:5"
                                },
                                {
                                    "expression": {
                                        "id": 3518,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 3516,
                                            "name": "maxUnstakeDelay",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3354,
                                            "src": "3028:15:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 3517,
                                            "name": "_maxUnstakeDelay",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3482,
                                            "src": "3046:16:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "3028:34:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 3519,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3028:34:5"
                                },
                                {
                                    "expression": {
                                        "id": 3524,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "expression": {
                                                "id": 3520,
                                                "name": "abandonedRelayServerConfig",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3357,
                                                "src": "3072:26:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_AbandonedRelayServerConfig_$6134_storage",
                                                    "typeString": "struct IStakeManager.AbandonedRelayServerConfig storage ref"
                                                }
                                            },
                                            "id": 3522,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "abandonmentDelay",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6131,
                                            "src": "3072:43:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 3523,
                                            "name": "_abandonmentDelay",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3484,
                                            "src": "3118:17:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "3072:63:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 3525,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3072:63:5"
                                },
                                {
                                    "expression": {
                                        "id": 3530,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "expression": {
                                                "id": 3526,
                                                "name": "abandonedRelayServerConfig",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3357,
                                                "src": "3145:26:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_AbandonedRelayServerConfig_$6134_storage",
                                                    "typeString": "struct IStakeManager.AbandonedRelayServerConfig storage ref"
                                                }
                                            },
                                            "id": 3528,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "escheatmentDelay",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6133,
                                            "src": "3145:43:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 3529,
                                            "name": "_escheatmentDelay",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3486,
                                            "src": "3191:17:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "3145:63:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 3531,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3145:63:5"
                                }
                            ]
                        },
                        "id": 3533,
                        "implemented": true,
                        "kind": "constructor",
                        "modifiers": [],
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 3491,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 3482,
                                    "mutability": "mutable",
                                    "name": "_maxUnstakeDelay",
                                    "nameLocation": "2673:16:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3533,
                                    "src": "2665:24:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 3481,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2665:7:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 3484,
                                    "mutability": "mutable",
                                    "name": "_abandonmentDelay",
                                    "nameLocation": "2707:17:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3533,
                                    "src": "2699:25:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 3483,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2699:7:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 3486,
                                    "mutability": "mutable",
                                    "name": "_escheatmentDelay",
                                    "nameLocation": "2742:17:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3533,
                                    "src": "2734:25:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 3485,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2734:7:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 3488,
                                    "mutability": "mutable",
                                    "name": "_burnAddress",
                                    "nameLocation": "2777:12:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3533,
                                    "src": "2769:20:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 3487,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2769:7:5",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 3490,
                                    "mutability": "mutable",
                                    "name": "_devAddress",
                                    "nameLocation": "2807:11:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3533,
                                    "src": "2799:19:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 3489,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2799:7:5",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2655:169:5"
                        },
                        "returnParameters": {
                            "id": 3492,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "2825:0:5"
                        },
                        "scope": 4355,
                        "src": "2644:571:5",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            12145,
                            12351
                        ],
                        "body": {
                            "id": 3556,
                            "nodeType": "Block",
                            "src": "3357:118:5",
                            "statements": [
                                {
                                    "expression": {
                                        "commonType": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        },
                                        "id": 3554,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "commonType": {
                                                "typeIdentifier": "t_bytes4",
                                                "typeString": "bytes4"
                                            },
                                            "id": 3549,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                                "id": 3544,
                                                "name": "interfaceId",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3536,
                                                "src": "3374:11:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes4",
                                                    "typeString": "bytes4"
                                                }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "==",
                                            "rightExpression": {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "id": 3546,
                                                            "name": "IStakeManager",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 6284,
                                                            "src": "3394:13:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_type$_t_contract$_IStakeManager_$6284_$",
                                                                "typeString": "type(contract IStakeManager)"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_type$_t_contract$_IStakeManager_$6284_$",
                                                                "typeString": "type(contract IStakeManager)"
                                                            }
                                                        ],
                                                        "id": 3545,
                                                        "name": "type",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967269,
                                                        "src": "3389:4:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                                            "typeString": "function () pure"
                                                        }
                                                    },
                                                    "id": 3547,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "3389:19:5",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_meta_type_t_contract$_IStakeManager_$6284",
                                                        "typeString": "type(contract IStakeManager)"
                                                    }
                                                },
                                                "id": 3548,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "memberName": "interfaceId",
                                                "nodeType": "MemberAccess",
                                                "src": "3389:31:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes4",
                                                    "typeString": "bytes4"
                                                }
                                            },
                                            "src": "3374:46:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "||",
                                        "rightExpression": {
                                            "arguments": [
                                                {
                                                    "id": 3552,
                                                    "name": "interfaceId",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3536,
                                                    "src": "3456:11:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes4",
                                                        "typeString": "bytes4"
                                                    }
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_bytes4",
                                                        "typeString": "bytes4"
                                                    }
                                                ],
                                                "expression": {
                                                    "id": 3550,
                                                    "name": "super",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967271,
                                                    "src": "3432:5:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_super$_StakeManager_$4355_$",
                                                        "typeString": "type(contract super StakeManager)"
                                                    }
                                                },
                                                "id": 3551,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "supportsInterface",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 12145,
                                                "src": "3432:23:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_internal_view$_t_bytes4_$returns$_t_bool_$",
                                                    "typeString": "function (bytes4) view returns (bool)"
                                                }
                                            },
                                            "id": 3553,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "3432:36:5",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "src": "3374:94:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "functionReturnParameters": 3543,
                                    "id": 3555,
                                    "nodeType": "Return",
                                    "src": "3367:101:5"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 3534,
                            "nodeType": "StructuredDocumentation",
                            "src": "3221:23:5",
                            "text": "@inheritdoc IERC165"
                        },
                        "functionSelector": "01ffc9a7",
                        "id": 3557,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "supportsInterface",
                        "nameLocation": "3258:17:5",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 3540,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [
                                {
                                    "id": 3538,
                                    "name": "IERC165",
                                    "nodeType": "IdentifierPath",
                                    "referencedDeclaration": 12352,
                                    "src": "3325:7:5"
                                },
                                {
                                    "id": 3539,
                                    "name": "ERC165",
                                    "nodeType": "IdentifierPath",
                                    "referencedDeclaration": 12146,
                                    "src": "3334:6:5"
                                }
                            ],
                            "src": "3316:25:5"
                        },
                        "parameters": {
                            "id": 3537,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 3536,
                                    "mutability": "mutable",
                                    "name": "interfaceId",
                                    "nameLocation": "3283:11:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3557,
                                    "src": "3276:18:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes4",
                                        "typeString": "bytes4"
                                    },
                                    "typeName": {
                                        "id": 3535,
                                        "name": "bytes4",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3276:6:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes4",
                                            "typeString": "bytes4"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3275:20:5"
                        },
                        "returnParameters": {
                            "id": 3543,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 3542,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3557,
                                    "src": "3351:4:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 3541,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3351:4:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3350:6:5"
                        },
                        "scope": 4355,
                        "src": "3249:226:5",
                        "stateMutability": "view",
                        "virtual": true,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            6277
                        ],
                        "body": {
                            "id": 3566,
                            "nodeType": "Block",
                            "src": "3583:37:5",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 3564,
                                        "name": "creationBlock",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3361,
                                        "src": "3600:13:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "functionReturnParameters": 3563,
                                    "id": 3565,
                                    "nodeType": "Return",
                                    "src": "3593:20:5"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 3558,
                            "nodeType": "StructuredDocumentation",
                            "src": "3481:29:5",
                            "text": "@inheritdoc IStakeManager"
                        },
                        "functionSelector": "20ffd56d",
                        "id": 3567,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getCreationBlock",
                        "nameLocation": "3524:16:5",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 3560,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "3552:8:5"
                        },
                        "parameters": {
                            "id": 3559,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "3540:2:5"
                        },
                        "returnParameters": {
                            "id": 3563,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 3562,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3567,
                                    "src": "3575:7:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 3561,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3575:7:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3574:9:5"
                        },
                        "scope": 4355,
                        "src": "3515:105:5",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            6140
                        ],
                        "body": {
                            "id": 3612,
                            "nodeType": "Block",
                            "src": "3723:220:5",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                "id": 3580,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "id": 3575,
                                                    "name": "owner",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3570,
                                                    "src": "3741:5:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "!=",
                                                "rightExpression": {
                                                    "arguments": [
                                                        {
                                                            "hexValue": "30",
                                                            "id": 3578,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "number",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "3758:1:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_rational_0_by_1",
                                                                "typeString": "int_const 0"
                                                            },
                                                            "value": "0"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_rational_0_by_1",
                                                                "typeString": "int_const 0"
                                                            }
                                                        ],
                                                        "id": 3577,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "ElementaryTypeNameExpression",
                                                        "src": "3750:7:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_address_$",
                                                            "typeString": "type(address)"
                                                        },
                                                        "typeName": {
                                                            "id": 3576,
                                                            "name": "address",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "3750:7:5",
                                                            "typeDescriptions": {}
                                                        }
                                                    },
                                                    "id": 3579,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "typeConversion",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "3750:10:5",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "src": "3741:19:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "696e76616c6964206f776e6572",
                                                "id": 3581,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "3762:15:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_6a6ef3f1d272b3597b09ac81b6aef3488a40db4c809157d1f8878aa09a43bb14",
                                                    "typeString": "literal_string \"invalid owner\""
                                                },
                                                "value": "invalid owner"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_6a6ef3f1d272b3597b09ac81b6aef3488a40db4c809157d1f8878aa09a43bb14",
                                                    "typeString": "literal_string \"invalid owner\""
                                                }
                                            ],
                                            "id": 3574,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "3733:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 3582,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3733:45:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3583,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3733:45:5"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                "id": 3594,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "baseExpression": {
                                                            "id": 3585,
                                                            "name": "stakes",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 3367,
                                                            "src": "3796:6:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$6124_storage_$",
                                                                "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                            }
                                                        },
                                                        "id": 3588,
                                                        "indexExpression": {
                                                            "expression": {
                                                                "id": 3586,
                                                                "name": "msg",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 4294967281,
                                                                "src": "3803:3:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_magic_message",
                                                                    "typeString": "msg"
                                                                }
                                                            },
                                                            "id": 3587,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "sender",
                                                            "nodeType": "MemberAccess",
                                                            "src": "3803:10:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        },
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "nodeType": "IndexAccess",
                                                        "src": "3796:18:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_StakeInfo_$6124_storage",
                                                            "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                        }
                                                    },
                                                    "id": 3589,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "owner",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 6123,
                                                    "src": "3796:24:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "==",
                                                "rightExpression": {
                                                    "arguments": [
                                                        {
                                                            "hexValue": "30",
                                                            "id": 3592,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "number",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "3832:1:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_rational_0_by_1",
                                                                "typeString": "int_const 0"
                                                            },
                                                            "value": "0"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_rational_0_by_1",
                                                                "typeString": "int_const 0"
                                                            }
                                                        ],
                                                        "id": 3591,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "ElementaryTypeNameExpression",
                                                        "src": "3824:7:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_address_$",
                                                            "typeString": "type(address)"
                                                        },
                                                        "typeName": {
                                                            "id": 3590,
                                                            "name": "address",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "3824:7:5",
                                                            "typeDescriptions": {}
                                                        }
                                                    },
                                                    "id": 3593,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "typeConversion",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "3824:10:5",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "src": "3796:38:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "616c7265616479206f776e6564",
                                                "id": 3595,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "3836:15:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_46f43e841038f5ff412d64ec61a61aec1d880cade23b15ca2b66ed39d330ab30",
                                                    "typeString": "literal_string \"already owned\""
                                                },
                                                "value": "already owned"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_46f43e841038f5ff412d64ec61a61aec1d880cade23b15ca2b66ed39d330ab30",
                                                    "typeString": "literal_string \"already owned\""
                                                }
                                            ],
                                            "id": 3584,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "3788:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 3596,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3788:64:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3597,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3788:64:5"
                                },
                                {
                                    "expression": {
                                        "id": 3604,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "expression": {
                                                "baseExpression": {
                                                    "id": 3598,
                                                    "name": "stakes",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3367,
                                                    "src": "3862:6:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$6124_storage_$",
                                                        "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                    }
                                                },
                                                "id": 3601,
                                                "indexExpression": {
                                                    "expression": {
                                                        "id": 3599,
                                                        "name": "msg",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967281,
                                                        "src": "3869:3:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_message",
                                                            "typeString": "msg"
                                                        }
                                                    },
                                                    "id": 3600,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "sender",
                                                    "nodeType": "MemberAccess",
                                                    "src": "3869:10:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "IndexAccess",
                                                "src": "3862:18:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$6124_storage",
                                                    "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                }
                                            },
                                            "id": 3602,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "owner",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6123,
                                            "src": "3862:24:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 3603,
                                            "name": "owner",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3570,
                                            "src": "3889:5:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "src": "3862:32:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "id": 3605,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3862:32:5"
                                },
                                {
                                    "eventCall": {
                                        "arguments": [
                                            {
                                                "expression": {
                                                    "id": 3607,
                                                    "name": "msg",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967281,
                                                    "src": "3918:3:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_message",
                                                        "typeString": "msg"
                                                    }
                                                },
                                                "id": 3608,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "sender",
                                                "nodeType": "MemberAccess",
                                                "src": "3918:10:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 3609,
                                                "name": "owner",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3570,
                                                "src": "3930:5:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "id": 3606,
                                            "name": "OwnerSet",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6072,
                                            "src": "3909:8:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                                                "typeString": "function (address,address)"
                                            }
                                        },
                                        "id": 3610,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3909:27:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3611,
                                    "nodeType": "EmitStatement",
                                    "src": "3904:32:5"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 3568,
                            "nodeType": "StructuredDocumentation",
                            "src": "3626:29:5",
                            "text": "@inheritdoc IStakeManager"
                        },
                        "functionSelector": "fece3dd4",
                        "id": 3613,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "setRelayManagerOwner",
                        "nameLocation": "3669:20:5",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 3572,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "3714:8:5"
                        },
                        "parameters": {
                            "id": 3571,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 3570,
                                    "mutability": "mutable",
                                    "name": "owner",
                                    "nameLocation": "3698:5:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3613,
                                    "src": "3690:13:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 3569,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3690:7:5",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3689:15:5"
                        },
                        "returnParameters": {
                            "id": 3573,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "3723:0:5"
                        },
                        "scope": 4355,
                        "src": "3660:283:5",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            6153
                        ],
                        "body": {
                            "id": 3734,
                            "nodeType": "Block",
                            "src": "4134:819:5",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 3636,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "id": 3631,
                                                    "name": "unstakeDelay",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3621,
                                                    "src": "4152:12:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": ">=",
                                                "rightExpression": {
                                                    "expression": {
                                                        "baseExpression": {
                                                            "id": 3632,
                                                            "name": "stakes",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 3367,
                                                            "src": "4168:6:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$6124_storage_$",
                                                                "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                            }
                                                        },
                                                        "id": 3634,
                                                        "indexExpression": {
                                                            "id": 3633,
                                                            "name": "relayManager",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 3619,
                                                            "src": "4175:12:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        },
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "nodeType": "IndexAccess",
                                                        "src": "4168:20:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_StakeInfo_$6124_storage",
                                                            "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                        }
                                                    },
                                                    "id": 3635,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "unstakeDelay",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 6112,
                                                    "src": "4168:33:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "4152:49:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "756e7374616b6544656c61792063616e6e6f7420626520646563726561736564",
                                                "id": 3637,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "4203:34:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_749d5bbd53bace98ba14f95790d5ecf9e4e76bab2242c078da371e573b111366",
                                                    "typeString": "literal_string \"unstakeDelay cannot be decreased\""
                                                },
                                                "value": "unstakeDelay cannot be decreased"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_749d5bbd53bace98ba14f95790d5ecf9e4e76bab2242c078da371e573b111366",
                                                    "typeString": "literal_string \"unstakeDelay cannot be decreased\""
                                                }
                                            ],
                                            "id": 3630,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "4144:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 3638,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4144:94:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3639,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4144:94:5"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 3643,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "id": 3641,
                                                    "name": "unstakeDelay",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3621,
                                                    "src": "4256:12:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "<=",
                                                "rightExpression": {
                                                    "id": 3642,
                                                    "name": "maxUnstakeDelay",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3354,
                                                    "src": "4272:15:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "4256:31:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "756e7374616b6544656c617920746f6f20626967",
                                                "id": 3644,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "4289:22:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_eb6dc4588d5d7660db3d138d0cff4255dfc2b5f417a29a9f214c07e955ffacb1",
                                                    "typeString": "literal_string \"unstakeDelay too big\""
                                                },
                                                "value": "unstakeDelay too big"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_eb6dc4588d5d7660db3d138d0cff4255dfc2b5f417a29a9f214c07e955ffacb1",
                                                    "typeString": "literal_string \"unstakeDelay too big\""
                                                }
                                            ],
                                            "id": 3640,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "4248:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 3645,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4248:64:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3646,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4248:64:5"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_contract$_IERC20_$10849",
                                                    "typeString": "contract IERC20"
                                                },
                                                "id": 3655,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "id": 3648,
                                                    "name": "token",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3617,
                                                    "src": "4330:5:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_contract$_IERC20_$10849",
                                                        "typeString": "contract IERC20"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "!=",
                                                "rightExpression": {
                                                    "arguments": [
                                                        {
                                                            "arguments": [
                                                                {
                                                                    "hexValue": "30",
                                                                    "id": 3652,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "kind": "number",
                                                                    "lValueRequested": false,
                                                                    "nodeType": "Literal",
                                                                    "src": "4354:1:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_rational_0_by_1",
                                                                        "typeString": "int_const 0"
                                                                    },
                                                                    "value": "0"
                                                                }
                                                            ],
                                                            "expression": {
                                                                "argumentTypes": [
                                                                    {
                                                                        "typeIdentifier": "t_rational_0_by_1",
                                                                        "typeString": "int_const 0"
                                                                    }
                                                                ],
                                                                "id": 3651,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "lValueRequested": false,
                                                                "nodeType": "ElementaryTypeNameExpression",
                                                                "src": "4346:7:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_type$_t_address_$",
                                                                    "typeString": "type(address)"
                                                                },
                                                                "typeName": {
                                                                    "id": 3650,
                                                                    "name": "address",
                                                                    "nodeType": "ElementaryTypeName",
                                                                    "src": "4346:7:5",
                                                                    "typeDescriptions": {}
                                                                }
                                                            },
                                                            "id": 3653,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "typeConversion",
                                                            "lValueRequested": false,
                                                            "names": [],
                                                            "nodeType": "FunctionCall",
                                                            "src": "4346:10:5",
                                                            "tryCall": false,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        ],
                                                        "id": 3649,
                                                        "name": "IERC20",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 10849,
                                                        "src": "4339:6:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_contract$_IERC20_$10849_$",
                                                            "typeString": "type(contract IERC20)"
                                                        }
                                                    },
                                                    "id": 3654,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "typeConversion",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "4339:18:5",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_contract$_IERC20_$10849",
                                                        "typeString": "contract IERC20"
                                                    }
                                                },
                                                "src": "4330:27:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "6d7573742073706563696679207374616b6520746f6b656e2061646472657373",
                                                "id": 3656,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "4359:34:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_17d8b08de59e0ecf3937a802652341930b45c73000bafc2ebb6369e674e017b9",
                                                    "typeString": "literal_string \"must specify stake token address\""
                                                },
                                                "value": "must specify stake token address"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_17d8b08de59e0ecf3937a802652341930b45c73000bafc2ebb6369e674e017b9",
                                                    "typeString": "literal_string \"must specify stake token address\""
                                                }
                                            ],
                                            "id": 3647,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "4322:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 3657,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4322:72:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3658,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4322:72:5"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                "id": 3677,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "commonType": {
                                                        "typeIdentifier": "t_contract$_IERC20_$10849",
                                                        "typeString": "contract IERC20"
                                                    },
                                                    "id": 3670,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "expression": {
                                                            "baseExpression": {
                                                                "id": 3660,
                                                                "name": "stakes",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 3367,
                                                                "src": "4425:6:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$6124_storage_$",
                                                                    "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                                }
                                                            },
                                                            "id": 3662,
                                                            "indexExpression": {
                                                                "id": 3661,
                                                                "name": "relayManager",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 3619,
                                                                "src": "4432:12:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "nodeType": "IndexAccess",
                                                            "src": "4425:20:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_StakeInfo_$6124_storage",
                                                                "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                            }
                                                        },
                                                        "id": 3663,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "token",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 6121,
                                                        "src": "4425:26:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_contract$_IERC20_$10849",
                                                            "typeString": "contract IERC20"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "==",
                                                    "rightExpression": {
                                                        "arguments": [
                                                            {
                                                                "arguments": [
                                                                    {
                                                                        "hexValue": "30",
                                                                        "id": 3667,
                                                                        "isConstant": false,
                                                                        "isLValue": false,
                                                                        "isPure": true,
                                                                        "kind": "number",
                                                                        "lValueRequested": false,
                                                                        "nodeType": "Literal",
                                                                        "src": "4470:1:5",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_rational_0_by_1",
                                                                            "typeString": "int_const 0"
                                                                        },
                                                                        "value": "0"
                                                                    }
                                                                ],
                                                                "expression": {
                                                                    "argumentTypes": [
                                                                        {
                                                                            "typeIdentifier": "t_rational_0_by_1",
                                                                            "typeString": "int_const 0"
                                                                        }
                                                                    ],
                                                                    "id": 3666,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "nodeType": "ElementaryTypeNameExpression",
                                                                    "src": "4462:7:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_type$_t_address_$",
                                                                        "typeString": "type(address)"
                                                                    },
                                                                    "typeName": {
                                                                        "id": 3665,
                                                                        "name": "address",
                                                                        "nodeType": "ElementaryTypeName",
                                                                        "src": "4462:7:5",
                                                                        "typeDescriptions": {}
                                                                    }
                                                                },
                                                                "id": 3668,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "kind": "typeConversion",
                                                                "lValueRequested": false,
                                                                "names": [],
                                                                "nodeType": "FunctionCall",
                                                                "src": "4462:10:5",
                                                                "tryCall": false,
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            ],
                                                            "id": 3664,
                                                            "name": "IERC20",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 10849,
                                                            "src": "4455:6:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_type$_t_contract$_IERC20_$10849_$",
                                                                "typeString": "type(contract IERC20)"
                                                            }
                                                        },
                                                        "id": 3669,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "typeConversion",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "4455:18:5",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_contract$_IERC20_$10849",
                                                            "typeString": "contract IERC20"
                                                        }
                                                    },
                                                    "src": "4425:48:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "||",
                                                "rightExpression": {
                                                    "commonType": {
                                                        "typeIdentifier": "t_contract$_IERC20_$10849",
                                                        "typeString": "contract IERC20"
                                                    },
                                                    "id": 3676,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "expression": {
                                                            "baseExpression": {
                                                                "id": 3671,
                                                                "name": "stakes",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 3367,
                                                                "src": "4489:6:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$6124_storage_$",
                                                                    "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                                }
                                                            },
                                                            "id": 3673,
                                                            "indexExpression": {
                                                                "id": 3672,
                                                                "name": "relayManager",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 3619,
                                                                "src": "4496:12:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "nodeType": "IndexAccess",
                                                            "src": "4489:20:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_StakeInfo_$6124_storage",
                                                                "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                            }
                                                        },
                                                        "id": 3674,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "token",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 6121,
                                                        "src": "4489:26:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_contract$_IERC20_$10849",
                                                            "typeString": "contract IERC20"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "==",
                                                    "rightExpression": {
                                                        "id": 3675,
                                                        "name": "token",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3617,
                                                        "src": "4519:5:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_contract$_IERC20_$10849",
                                                            "typeString": "contract IERC20"
                                                        }
                                                    },
                                                    "src": "4489:35:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "src": "4425:99:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "7374616b6520746f6b656e206164647265737320697320696e636f7272656374",
                                                "id": 3678,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "4538:34:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_1cdeb25be65392daf4aa2c8c8fc771c3559b304269152c1b078f61a1d19fb7f1",
                                                    "typeString": "literal_string \"stake token address is incorrect\""
                                                },
                                                "value": "stake token address is incorrect"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_1cdeb25be65392daf4aa2c8c8fc771c3559b304269152c1b078f61a1d19fb7f1",
                                                    "typeString": "literal_string \"stake token address is incorrect\""
                                                }
                                            ],
                                            "id": 3659,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "4404:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 3679,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4404:169:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3680,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4404:169:5"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "expression": {
                                                    "id": 3684,
                                                    "name": "msg",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967281,
                                                    "src": "4606:3:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_message",
                                                        "typeString": "msg"
                                                    }
                                                },
                                                "id": 3685,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "sender",
                                                "nodeType": "MemberAccess",
                                                "src": "4606:10:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "arguments": [
                                                    {
                                                        "id": 3688,
                                                        "name": "this",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967268,
                                                        "src": "4626:4:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_contract$_StakeManager_$4355",
                                                            "typeString": "contract StakeManager"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_contract$_StakeManager_$4355",
                                                            "typeString": "contract StakeManager"
                                                        }
                                                    ],
                                                    "id": 3687,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "ElementaryTypeNameExpression",
                                                    "src": "4618:7:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_address_$",
                                                        "typeString": "type(address)"
                                                    },
                                                    "typeName": {
                                                        "id": 3686,
                                                        "name": "address",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "4618:7:5",
                                                        "typeDescriptions": {}
                                                    }
                                                },
                                                "id": 3689,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "typeConversion",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "4618:13:5",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 3690,
                                                "name": "amount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3623,
                                                "src": "4633:6:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "expression": {
                                                "id": 3681,
                                                "name": "token",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3617,
                                                "src": "4583:5:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_IERC20_$10849",
                                                    "typeString": "contract IERC20"
                                                }
                                            },
                                            "id": 3683,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "safeTransferFrom",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 10968,
                                            "src": "4583:22:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$10849_$_t_address_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$10849_$",
                                                "typeString": "function (contract IERC20,address,address,uint256)"
                                            }
                                        },
                                        "id": 3691,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4583:57:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3692,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4583:57:5"
                                },
                                {
                                    "expression": {
                                        "id": 3698,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "expression": {
                                                "baseExpression": {
                                                    "id": 3693,
                                                    "name": "stakes",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3367,
                                                    "src": "4650:6:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$6124_storage_$",
                                                        "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                    }
                                                },
                                                "id": 3695,
                                                "indexExpression": {
                                                    "id": 3694,
                                                    "name": "relayManager",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3619,
                                                    "src": "4657:12:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "IndexAccess",
                                                "src": "4650:20:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$6124_storage",
                                                    "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                }
                                            },
                                            "id": 3696,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "token",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6121,
                                            "src": "4650:26:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_contract$_IERC20_$10849",
                                                "typeString": "contract IERC20"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 3697,
                                            "name": "token",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3617,
                                            "src": "4679:5:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_contract$_IERC20_$10849",
                                                "typeString": "contract IERC20"
                                            }
                                        },
                                        "src": "4650:34:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IERC20_$10849",
                                            "typeString": "contract IERC20"
                                        }
                                    },
                                    "id": 3699,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4650:34:5"
                                },
                                {
                                    "expression": {
                                        "id": 3705,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "expression": {
                                                "baseExpression": {
                                                    "id": 3700,
                                                    "name": "stakes",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3367,
                                                    "src": "4694:6:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$6124_storage_$",
                                                        "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                    }
                                                },
                                                "id": 3702,
                                                "indexExpression": {
                                                    "id": 3701,
                                                    "name": "relayManager",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3619,
                                                    "src": "4701:12:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "IndexAccess",
                                                "src": "4694:20:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$6124_storage",
                                                    "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                }
                                            },
                                            "id": 3703,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "stake",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6110,
                                            "src": "4694:26:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "+=",
                                        "rightHandSide": {
                                            "id": 3704,
                                            "name": "amount",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3623,
                                            "src": "4724:6:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "4694:36:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 3706,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4694:36:5"
                                },
                                {
                                    "expression": {
                                        "id": 3712,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "expression": {
                                                "baseExpression": {
                                                    "id": 3707,
                                                    "name": "stakes",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3367,
                                                    "src": "4740:6:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$6124_storage_$",
                                                        "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                    }
                                                },
                                                "id": 3709,
                                                "indexExpression": {
                                                    "id": 3708,
                                                    "name": "relayManager",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3619,
                                                    "src": "4747:12:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "IndexAccess",
                                                "src": "4740:20:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$6124_storage",
                                                    "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                }
                                            },
                                            "id": 3710,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "unstakeDelay",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6112,
                                            "src": "4740:33:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 3711,
                                            "name": "unstakeDelay",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3621,
                                            "src": "4776:12:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "4740:48:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 3713,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4740:48:5"
                                },
                                {
                                    "eventCall": {
                                        "arguments": [
                                            {
                                                "id": 3715,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3619,
                                                "src": "4814:12:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "expression": {
                                                    "baseExpression": {
                                                        "id": 3716,
                                                        "name": "stakes",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3367,
                                                        "src": "4828:6:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$6124_storage_$",
                                                            "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                        }
                                                    },
                                                    "id": 3718,
                                                    "indexExpression": {
                                                        "id": 3717,
                                                        "name": "relayManager",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3619,
                                                        "src": "4835:12:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "4828:20:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_StakeInfo_$6124_storage",
                                                        "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                    }
                                                },
                                                "id": 3719,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "owner",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 6123,
                                                "src": "4828:26:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "expression": {
                                                    "baseExpression": {
                                                        "id": 3720,
                                                        "name": "stakes",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3367,
                                                        "src": "4856:6:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$6124_storage_$",
                                                            "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                        }
                                                    },
                                                    "id": 3722,
                                                    "indexExpression": {
                                                        "id": 3721,
                                                        "name": "relayManager",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3619,
                                                        "src": "4863:12:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "4856:20:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_StakeInfo_$6124_storage",
                                                        "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                    }
                                                },
                                                "id": 3723,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "token",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 6121,
                                                "src": "4856:26:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_IERC20_$10849",
                                                    "typeString": "contract IERC20"
                                                }
                                            },
                                            {
                                                "expression": {
                                                    "baseExpression": {
                                                        "id": 3724,
                                                        "name": "stakes",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3367,
                                                        "src": "4884:6:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$6124_storage_$",
                                                            "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                        }
                                                    },
                                                    "id": 3726,
                                                    "indexExpression": {
                                                        "id": 3725,
                                                        "name": "relayManager",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3619,
                                                        "src": "4891:12:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "4884:20:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_StakeInfo_$6124_storage",
                                                        "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                    }
                                                },
                                                "id": 3727,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "stake",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 6110,
                                                "src": "4884:26:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            {
                                                "expression": {
                                                    "baseExpression": {
                                                        "id": 3728,
                                                        "name": "stakes",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3367,
                                                        "src": "4912:6:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$6124_storage_$",
                                                            "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                        }
                                                    },
                                                    "id": 3730,
                                                    "indexExpression": {
                                                        "id": 3729,
                                                        "name": "relayManager",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3619,
                                                        "src": "4919:12:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "4912:20:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_StakeInfo_$6124_storage",
                                                        "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                    }
                                                },
                                                "id": 3731,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "unstakeDelay",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 6112,
                                                "src": "4912:33:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_contract$_IERC20_$10849",
                                                    "typeString": "contract IERC20"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 3714,
                                            "name": "StakeAdded",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6016,
                                            "src": "4803:10:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_contract$_IERC20_$10849_$_t_uint256_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,address,contract IERC20,uint256,uint256)"
                                            }
                                        },
                                        "id": 3732,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4803:143:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3733,
                                    "nodeType": "EmitStatement",
                                    "src": "4798:148:5"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 3614,
                            "nodeType": "StructuredDocumentation",
                            "src": "3949:29:5",
                            "text": "@inheritdoc IStakeManager"
                        },
                        "functionSelector": "14080fac",
                        "id": 3735,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [
                            {
                                "arguments": [
                                    {
                                        "id": 3627,
                                        "name": "relayManager",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3619,
                                        "src": "4120:12:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    }
                                ],
                                "id": 3628,
                                "kind": "modifierInvocation",
                                "modifierName": {
                                    "id": 3626,
                                    "name": "relayOwnerOnly",
                                    "nodeType": "IdentifierPath",
                                    "referencedDeclaration": 3873,
                                    "src": "4105:14:5"
                                },
                                "nodeType": "ModifierInvocation",
                                "src": "4105:28:5"
                            }
                        ],
                        "name": "stakeForRelayManager",
                        "nameLocation": "3992:20:5",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 3625,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "4096:8:5"
                        },
                        "parameters": {
                            "id": 3624,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 3617,
                                    "mutability": "mutable",
                                    "name": "token",
                                    "nameLocation": "4020:5:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3735,
                                    "src": "4013:12:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IERC20_$10849",
                                        "typeString": "contract IERC20"
                                    },
                                    "typeName": {
                                        "id": 3616,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 3615,
                                            "name": "IERC20",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 10849,
                                            "src": "4013:6:5"
                                        },
                                        "referencedDeclaration": 10849,
                                        "src": "4013:6:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IERC20_$10849",
                                            "typeString": "contract IERC20"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 3619,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "4035:12:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3735,
                                    "src": "4027:20:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 3618,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4027:7:5",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 3621,
                                    "mutability": "mutable",
                                    "name": "unstakeDelay",
                                    "nameLocation": "4057:12:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3735,
                                    "src": "4049:20:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 3620,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4049:7:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 3623,
                                    "mutability": "mutable",
                                    "name": "amount",
                                    "nameLocation": "4079:6:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3735,
                                    "src": "4071:14:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 3622,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4071:7:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4012:74:5"
                        },
                        "returnParameters": {
                            "id": 3629,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "4134:0:5"
                        },
                        "scope": 4355,
                        "src": "3983:970:5",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            6159
                        ],
                        "body": {
                            "id": 3778,
                            "nodeType": "Block",
                            "src": "5083:260:5",
                            "statements": [
                                {
                                    "assignments": [
                                        3747
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 3747,
                                            "mutability": "mutable",
                                            "name": "info",
                                            "nameLocation": "5111:4:5",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 3778,
                                            "src": "5093:22:5",
                                            "stateVariable": false,
                                            "storageLocation": "storage",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                "typeString": "struct IStakeManager.StakeInfo"
                                            },
                                            "typeName": {
                                                "id": 3746,
                                                "nodeType": "UserDefinedTypeName",
                                                "pathNode": {
                                                    "id": 3745,
                                                    "name": "StakeInfo",
                                                    "nodeType": "IdentifierPath",
                                                    "referencedDeclaration": 6124,
                                                    "src": "5093:9:5"
                                                },
                                                "referencedDeclaration": 6124,
                                                "src": "5093:9:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                    "typeString": "struct IStakeManager.StakeInfo"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 3751,
                                    "initialValue": {
                                        "baseExpression": {
                                            "id": 3748,
                                            "name": "stakes",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3367,
                                            "src": "5118:6:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$6124_storage_$",
                                                "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                            }
                                        },
                                        "id": 3750,
                                        "indexExpression": {
                                            "id": 3749,
                                            "name": "relayManager",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3738,
                                            "src": "5125:12:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "5118:20:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_StakeInfo_$6124_storage",
                                            "typeString": "struct IStakeManager.StakeInfo storage ref"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "5093:45:5"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 3756,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "id": 3753,
                                                        "name": "info",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3747,
                                                        "src": "5156:4:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                            "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                        }
                                                    },
                                                    "id": 3754,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "withdrawTime",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 6114,
                                                    "src": "5156:17:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "==",
                                                "rightExpression": {
                                                    "hexValue": "30",
                                                    "id": 3755,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "5177:1:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_0_by_1",
                                                        "typeString": "int_const 0"
                                                    },
                                                    "value": "0"
                                                },
                                                "src": "5156:22:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "616c72656164792070656e64696e67",
                                                "id": 3757,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "5180:17:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_3d5ba8f9dacf92169ef29c031ef5f7de7dc5c46d1c2ce428a52e8c4e934a46c0",
                                                    "typeString": "literal_string \"already pending\""
                                                },
                                                "value": "already pending"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_3d5ba8f9dacf92169ef29c031ef5f7de7dc5c46d1c2ce428a52e8c4e934a46c0",
                                                    "typeString": "literal_string \"already pending\""
                                                }
                                            ],
                                            "id": 3752,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "5148:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 3758,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5148:50:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3759,
                                    "nodeType": "ExpressionStatement",
                                    "src": "5148:50:5"
                                },
                                {
                                    "expression": {
                                        "id": 3768,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "expression": {
                                                "id": 3760,
                                                "name": "info",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3747,
                                                "src": "5208:4:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                    "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                }
                                            },
                                            "id": 3762,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "withdrawTime",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6114,
                                            "src": "5208:17:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "id": 3767,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                                "expression": {
                                                    "id": 3763,
                                                    "name": "block",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967292,
                                                    "src": "5228:5:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_block",
                                                        "typeString": "block"
                                                    }
                                                },
                                                "id": 3764,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "timestamp",
                                                "nodeType": "MemberAccess",
                                                "src": "5228:15:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "+",
                                            "rightExpression": {
                                                "expression": {
                                                    "id": 3765,
                                                    "name": "info",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3747,
                                                    "src": "5246:4:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                        "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                    }
                                                },
                                                "id": 3766,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "unstakeDelay",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 6112,
                                                "src": "5246:17:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "src": "5228:35:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "5208:55:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 3769,
                                    "nodeType": "ExpressionStatement",
                                    "src": "5208:55:5"
                                },
                                {
                                    "eventCall": {
                                        "arguments": [
                                            {
                                                "id": 3771,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3738,
                                                "src": "5292:12:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "expression": {
                                                    "id": 3772,
                                                    "name": "msg",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967281,
                                                    "src": "5306:3:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_message",
                                                        "typeString": "msg"
                                                    }
                                                },
                                                "id": 3773,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "sender",
                                                "nodeType": "MemberAccess",
                                                "src": "5306:10:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "expression": {
                                                    "id": 3774,
                                                    "name": "info",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3747,
                                                    "src": "5318:4:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                        "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                    }
                                                },
                                                "id": 3775,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "withdrawTime",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 6114,
                                                "src": "5318:17:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 3770,
                                            "name": "StakeUnlocked",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6025,
                                            "src": "5278:13:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,address,uint256)"
                                            }
                                        },
                                        "id": 3776,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5278:58:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3777,
                                    "nodeType": "EmitStatement",
                                    "src": "5273:63:5"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 3736,
                            "nodeType": "StructuredDocumentation",
                            "src": "4959:29:5",
                            "text": "@inheritdoc IStakeManager"
                        },
                        "functionSelector": "4a1ce599",
                        "id": 3779,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [
                            {
                                "arguments": [
                                    {
                                        "id": 3742,
                                        "name": "relayManager",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3738,
                                        "src": "5069:12:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    }
                                ],
                                "id": 3743,
                                "kind": "modifierInvocation",
                                "modifierName": {
                                    "id": 3741,
                                    "name": "relayOwnerOnly",
                                    "nodeType": "IdentifierPath",
                                    "referencedDeclaration": 3873,
                                    "src": "5054:14:5"
                                },
                                "nodeType": "ModifierInvocation",
                                "src": "5054:28:5"
                            }
                        ],
                        "name": "unlockStake",
                        "nameLocation": "5002:11:5",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 3740,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "5045:8:5"
                        },
                        "parameters": {
                            "id": 3739,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 3738,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "5022:12:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3779,
                                    "src": "5014:20:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 3737,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5014:7:5",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "5013:22:5"
                        },
                        "returnParameters": {
                            "id": 3744,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "5083:0:5"
                        },
                        "scope": 4355,
                        "src": "4993:350:5",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            6165
                        ],
                        "body": {
                            "id": 3849,
                            "nodeType": "Block",
                            "src": "5475:433:5",
                            "statements": [
                                {
                                    "assignments": [
                                        3791
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 3791,
                                            "mutability": "mutable",
                                            "name": "info",
                                            "nameLocation": "5503:4:5",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 3849,
                                            "src": "5485:22:5",
                                            "stateVariable": false,
                                            "storageLocation": "storage",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                "typeString": "struct IStakeManager.StakeInfo"
                                            },
                                            "typeName": {
                                                "id": 3790,
                                                "nodeType": "UserDefinedTypeName",
                                                "pathNode": {
                                                    "id": 3789,
                                                    "name": "StakeInfo",
                                                    "nodeType": "IdentifierPath",
                                                    "referencedDeclaration": 6124,
                                                    "src": "5485:9:5"
                                                },
                                                "referencedDeclaration": 6124,
                                                "src": "5485:9:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                    "typeString": "struct IStakeManager.StakeInfo"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 3795,
                                    "initialValue": {
                                        "baseExpression": {
                                            "id": 3792,
                                            "name": "stakes",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3367,
                                            "src": "5510:6:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$6124_storage_$",
                                                "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                            }
                                        },
                                        "id": 3794,
                                        "indexExpression": {
                                            "id": 3793,
                                            "name": "relayManager",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3782,
                                            "src": "5517:12:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "5510:20:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_StakeInfo_$6124_storage",
                                            "typeString": "struct IStakeManager.StakeInfo storage ref"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "5485:45:5"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 3800,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "id": 3797,
                                                        "name": "info",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3791,
                                                        "src": "5548:4:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                            "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                        }
                                                    },
                                                    "id": 3798,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "withdrawTime",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 6114,
                                                    "src": "5548:17:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": ">",
                                                "rightExpression": {
                                                    "hexValue": "30",
                                                    "id": 3799,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "5568:1:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_0_by_1",
                                                        "typeString": "int_const 0"
                                                    },
                                                    "value": "0"
                                                },
                                                "src": "5548:21:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "5769746864726177616c206973206e6f74207363686564756c6564",
                                                "id": 3801,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "5571:29:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_860678e036832132a2f62fd25edcf808e758d18c8e491de65f9720ad20186939",
                                                    "typeString": "literal_string \"Withdrawal is not scheduled\""
                                                },
                                                "value": "Withdrawal is not scheduled"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_860678e036832132a2f62fd25edcf808e758d18c8e491de65f9720ad20186939",
                                                    "typeString": "literal_string \"Withdrawal is not scheduled\""
                                                }
                                            ],
                                            "id": 3796,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "5540:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 3802,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5540:61:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3803,
                                    "nodeType": "ExpressionStatement",
                                    "src": "5540:61:5"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 3809,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "id": 3805,
                                                        "name": "info",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3791,
                                                        "src": "5619:4:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                            "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                        }
                                                    },
                                                    "id": 3806,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "withdrawTime",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 6114,
                                                    "src": "5619:17:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "<=",
                                                "rightExpression": {
                                                    "expression": {
                                                        "id": 3807,
                                                        "name": "block",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967292,
                                                        "src": "5640:5:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_block",
                                                            "typeString": "block"
                                                        }
                                                    },
                                                    "id": 3808,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "timestamp",
                                                    "nodeType": "MemberAccess",
                                                    "src": "5640:15:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "5619:36:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "5769746864726177616c206973206e6f7420647565",
                                                "id": 3810,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "5657:23:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_46cbffc6f5f26c20016abce85a0f05559724f8ec834b994ca7d9b2a2d9539ce2",
                                                    "typeString": "literal_string \"Withdrawal is not due\""
                                                },
                                                "value": "Withdrawal is not due"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_46cbffc6f5f26c20016abce85a0f05559724f8ec834b994ca7d9b2a2d9539ce2",
                                                    "typeString": "literal_string \"Withdrawal is not due\""
                                                }
                                            ],
                                            "id": 3804,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "5611:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 3811,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5611:70:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3812,
                                    "nodeType": "ExpressionStatement",
                                    "src": "5611:70:5"
                                },
                                {
                                    "assignments": [
                                        3814
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 3814,
                                            "mutability": "mutable",
                                            "name": "amount",
                                            "nameLocation": "5699:6:5",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 3849,
                                            "src": "5691:14:5",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 3813,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "5691:7:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 3817,
                                    "initialValue": {
                                        "expression": {
                                            "id": 3815,
                                            "name": "info",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3791,
                                            "src": "5708:4:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                            }
                                        },
                                        "id": 3816,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "stake",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 6110,
                                        "src": "5708:10:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "5691:27:5"
                                },
                                {
                                    "expression": {
                                        "id": 3822,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "expression": {
                                                "id": 3818,
                                                "name": "info",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3791,
                                                "src": "5728:4:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                    "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                }
                                            },
                                            "id": 3820,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "stake",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6110,
                                            "src": "5728:10:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "hexValue": "30",
                                            "id": 3821,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "5741:1:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_rational_0_by_1",
                                                "typeString": "int_const 0"
                                            },
                                            "value": "0"
                                        },
                                        "src": "5728:14:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 3823,
                                    "nodeType": "ExpressionStatement",
                                    "src": "5728:14:5"
                                },
                                {
                                    "expression": {
                                        "id": 3828,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "expression": {
                                                "id": 3824,
                                                "name": "info",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3791,
                                                "src": "5752:4:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                    "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                }
                                            },
                                            "id": 3826,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "withdrawTime",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6114,
                                            "src": "5752:17:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "hexValue": "30",
                                            "id": 3827,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "5772:1:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_rational_0_by_1",
                                                "typeString": "int_const 0"
                                            },
                                            "value": "0"
                                        },
                                        "src": "5752:21:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 3829,
                                    "nodeType": "ExpressionStatement",
                                    "src": "5752:21:5"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "expression": {
                                                    "id": 3835,
                                                    "name": "msg",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967281,
                                                    "src": "5807:3:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_message",
                                                        "typeString": "msg"
                                                    }
                                                },
                                                "id": 3836,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "sender",
                                                "nodeType": "MemberAccess",
                                                "src": "5807:10:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 3837,
                                                "name": "amount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3814,
                                                "src": "5819:6:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "expression": {
                                                "expression": {
                                                    "id": 3830,
                                                    "name": "info",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3791,
                                                    "src": "5783:4:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                        "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                    }
                                                },
                                                "id": 3833,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "token",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 6121,
                                                "src": "5783:10:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_IERC20_$10849",
                                                    "typeString": "contract IERC20"
                                                }
                                            },
                                            "id": 3834,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "safeTransfer",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 10942,
                                            "src": "5783:23:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$10849_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$10849_$",
                                                "typeString": "function (contract IERC20,address,uint256)"
                                            }
                                        },
                                        "id": 3838,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5783:43:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3839,
                                    "nodeType": "ExpressionStatement",
                                    "src": "5783:43:5"
                                },
                                {
                                    "eventCall": {
                                        "arguments": [
                                            {
                                                "id": 3841,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3782,
                                                "src": "5856:12:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "expression": {
                                                    "id": 3842,
                                                    "name": "msg",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967281,
                                                    "src": "5870:3:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_message",
                                                        "typeString": "msg"
                                                    }
                                                },
                                                "id": 3843,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "sender",
                                                "nodeType": "MemberAccess",
                                                "src": "5870:10:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "expression": {
                                                    "id": 3844,
                                                    "name": "info",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3791,
                                                    "src": "5882:4:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                        "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                    }
                                                },
                                                "id": 3845,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "token",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 6121,
                                                "src": "5882:10:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_IERC20_$10849",
                                                    "typeString": "contract IERC20"
                                                }
                                            },
                                            {
                                                "id": 3846,
                                                "name": "amount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3814,
                                                "src": "5894:6:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_contract$_IERC20_$10849",
                                                    "typeString": "contract IERC20"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 3840,
                                            "name": "StakeWithdrawn",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6037,
                                            "src": "5841:14:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_contract$_IERC20_$10849_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,address,contract IERC20,uint256)"
                                            }
                                        },
                                        "id": 3847,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5841:60:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3848,
                                    "nodeType": "EmitStatement",
                                    "src": "5836:65:5"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 3780,
                            "nodeType": "StructuredDocumentation",
                            "src": "5349:29:5",
                            "text": "@inheritdoc IStakeManager"
                        },
                        "functionSelector": "c23a5cea",
                        "id": 3850,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [
                            {
                                "arguments": [
                                    {
                                        "id": 3786,
                                        "name": "relayManager",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3782,
                                        "src": "5461:12:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    }
                                ],
                                "id": 3787,
                                "kind": "modifierInvocation",
                                "modifierName": {
                                    "id": 3785,
                                    "name": "relayOwnerOnly",
                                    "nodeType": "IdentifierPath",
                                    "referencedDeclaration": 3873,
                                    "src": "5446:14:5"
                                },
                                "nodeType": "ModifierInvocation",
                                "src": "5446:28:5"
                            }
                        ],
                        "name": "withdrawStake",
                        "nameLocation": "5392:13:5",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 3784,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "5437:8:5"
                        },
                        "parameters": {
                            "id": 3783,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 3782,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "5414:12:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3850,
                                    "src": "5406:20:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 3781,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5406:7:5",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "5405:22:5"
                        },
                        "returnParameters": {
                            "id": 3788,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "5475:0:5"
                        },
                        "scope": 4355,
                        "src": "5383:525:5",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "body": {
                            "id": 3872,
                            "nodeType": "Block",
                            "src": "6060:129:5",
                            "statements": [
                                {
                                    "assignments": [
                                        3857
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 3857,
                                            "mutability": "mutable",
                                            "name": "info",
                                            "nameLocation": "6088:4:5",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 3872,
                                            "src": "6070:22:5",
                                            "stateVariable": false,
                                            "storageLocation": "storage",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                "typeString": "struct IStakeManager.StakeInfo"
                                            },
                                            "typeName": {
                                                "id": 3856,
                                                "nodeType": "UserDefinedTypeName",
                                                "pathNode": {
                                                    "id": 3855,
                                                    "name": "StakeInfo",
                                                    "nodeType": "IdentifierPath",
                                                    "referencedDeclaration": 6124,
                                                    "src": "6070:9:5"
                                                },
                                                "referencedDeclaration": 6124,
                                                "src": "6070:9:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                    "typeString": "struct IStakeManager.StakeInfo"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 3861,
                                    "initialValue": {
                                        "baseExpression": {
                                            "id": 3858,
                                            "name": "stakes",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3367,
                                            "src": "6095:6:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$6124_storage_$",
                                                "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                            }
                                        },
                                        "id": 3860,
                                        "indexExpression": {
                                            "id": 3859,
                                            "name": "relayManager",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3853,
                                            "src": "6102:12:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "6095:20:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_StakeInfo_$6124_storage",
                                            "typeString": "struct IStakeManager.StakeInfo storage ref"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "6070:45:5"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                "id": 3867,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "id": 3863,
                                                        "name": "info",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3857,
                                                        "src": "6133:4:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                            "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                        }
                                                    },
                                                    "id": 3864,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "owner",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 6123,
                                                    "src": "6133:10:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "==",
                                                "rightExpression": {
                                                    "expression": {
                                                        "id": 3865,
                                                        "name": "msg",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967281,
                                                        "src": "6147:3:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_message",
                                                            "typeString": "msg"
                                                        }
                                                    },
                                                    "id": 3866,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "sender",
                                                    "nodeType": "MemberAccess",
                                                    "src": "6147:10:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "src": "6133:24:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "6e6f74206f776e6572",
                                                "id": 3868,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "6159:11:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_f2881edc58d5a08d0243d7f8afdab31d949d85825e628e4b88558657a031f74e",
                                                    "typeString": "literal_string \"not owner\""
                                                },
                                                "value": "not owner"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_f2881edc58d5a08d0243d7f8afdab31d949d85825e628e4b88558657a031f74e",
                                                    "typeString": "literal_string \"not owner\""
                                                }
                                            ],
                                            "id": 3862,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "6125:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 3869,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "6125:46:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3870,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6125:46:5"
                                },
                                {
                                    "id": 3871,
                                    "nodeType": "PlaceholderStatement",
                                    "src": "6181:1:5"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 3851,
                            "nodeType": "StructuredDocumentation",
                            "src": "5914:94:5",
                            "text": "@notice Prevents any address other than a registered Relay Owner from calling this method."
                        },
                        "id": 3873,
                        "name": "relayOwnerOnly",
                        "nameLocation": "6022:14:5",
                        "nodeType": "ModifierDefinition",
                        "parameters": {
                            "id": 3854,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 3853,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "6046:12:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3873,
                                    "src": "6038:20:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 3852,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6038:7:5",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "6037:22:5"
                        },
                        "src": "6013:176:5",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 3896,
                            "nodeType": "Block",
                            "src": "6320:129:5",
                            "statements": [
                                {
                                    "assignments": [
                                        3878
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 3878,
                                            "mutability": "mutable",
                                            "name": "info",
                                            "nameLocation": "6348:4:5",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 3896,
                                            "src": "6330:22:5",
                                            "stateVariable": false,
                                            "storageLocation": "storage",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                "typeString": "struct IStakeManager.StakeInfo"
                                            },
                                            "typeName": {
                                                "id": 3877,
                                                "nodeType": "UserDefinedTypeName",
                                                "pathNode": {
                                                    "id": 3876,
                                                    "name": "StakeInfo",
                                                    "nodeType": "IdentifierPath",
                                                    "referencedDeclaration": 6124,
                                                    "src": "6330:9:5"
                                                },
                                                "referencedDeclaration": 6124,
                                                "src": "6330:9:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                    "typeString": "struct IStakeManager.StakeInfo"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 3883,
                                    "initialValue": {
                                        "baseExpression": {
                                            "id": 3879,
                                            "name": "stakes",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3367,
                                            "src": "6355:6:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$6124_storage_$",
                                                "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                            }
                                        },
                                        "id": 3882,
                                        "indexExpression": {
                                            "expression": {
                                                "id": 3880,
                                                "name": "msg",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4294967281,
                                                "src": "6362:3:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_magic_message",
                                                    "typeString": "msg"
                                                }
                                            },
                                            "id": 3881,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "sender",
                                            "nodeType": "MemberAccess",
                                            "src": "6362:10:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "6355:18:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_StakeInfo_$6124_storage",
                                            "typeString": "struct IStakeManager.StakeInfo storage ref"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "6330:43:5"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                "id": 3891,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "id": 3885,
                                                        "name": "info",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3878,
                                                        "src": "6391:4:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                            "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                        }
                                                    },
                                                    "id": 3886,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "owner",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 6123,
                                                    "src": "6391:10:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "!=",
                                                "rightExpression": {
                                                    "arguments": [
                                                        {
                                                            "hexValue": "30",
                                                            "id": 3889,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "number",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "6413:1:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_rational_0_by_1",
                                                                "typeString": "int_const 0"
                                                            },
                                                            "value": "0"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_rational_0_by_1",
                                                                "typeString": "int_const 0"
                                                            }
                                                        ],
                                                        "id": 3888,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "ElementaryTypeNameExpression",
                                                        "src": "6405:7:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_address_$",
                                                            "typeString": "type(address)"
                                                        },
                                                        "typeName": {
                                                            "id": 3887,
                                                            "name": "address",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "6405:7:5",
                                                            "typeDescriptions": {}
                                                        }
                                                    },
                                                    "id": 3890,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "typeConversion",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "6405:10:5",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "src": "6391:24:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "6e6f74206d616e61676572",
                                                "id": 3892,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "6417:13:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_ee7b04b266f275ae66a2fddcbfef24d4ec3a503d9843c534a382f12477498d38",
                                                    "typeString": "literal_string \"not manager\""
                                                },
                                                "value": "not manager"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_ee7b04b266f275ae66a2fddcbfef24d4ec3a503d9843c534a382f12477498d38",
                                                    "typeString": "literal_string \"not manager\""
                                                }
                                            ],
                                            "id": 3884,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "6383:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 3893,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "6383:48:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3894,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6383:48:5"
                                },
                                {
                                    "id": 3895,
                                    "nodeType": "PlaceholderStatement",
                                    "src": "6441:1:5"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 3874,
                            "nodeType": "StructuredDocumentation",
                            "src": "6195:96:5",
                            "text": "@notice Prevents any address other than a registered Relay Manager from calling this method."
                        },
                        "id": 3897,
                        "name": "managerOnly",
                        "nameLocation": "6305:11:5",
                        "nodeType": "ModifierDefinition",
                        "parameters": {
                            "id": 3875,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "6317:2:5"
                        },
                        "src": "6296:153:5",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "baseFunctions": [
                            6173
                        ],
                        "body": {
                            "id": 3914,
                            "nodeType": "Block",
                            "src": "6605:54:5",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 3910,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3900,
                                                "src": "6629:12:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 3911,
                                                "name": "relayHub",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3902,
                                                "src": "6643:8:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "id": 3909,
                                            "name": "_authorizeHub",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3957,
                                            "src": "6615:13:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$",
                                                "typeString": "function (address,address)"
                                            }
                                        },
                                        "id": 3912,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "6615:37:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3913,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6615:37:5"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 3898,
                            "nodeType": "StructuredDocumentation",
                            "src": "6455:29:5",
                            "text": "@inheritdoc IStakeManager"
                        },
                        "functionSelector": "7835d296",
                        "id": 3915,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [
                            {
                                "arguments": [
                                    {
                                        "id": 3905,
                                        "name": "relayManager",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3900,
                                        "src": "6582:12:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    }
                                ],
                                "id": 3906,
                                "kind": "modifierInvocation",
                                "modifierName": {
                                    "id": 3904,
                                    "name": "relayOwnerOnly",
                                    "nodeType": "IdentifierPath",
                                    "referencedDeclaration": 3873,
                                    "src": "6567:14:5"
                                },
                                "nodeType": "ModifierInvocation",
                                "src": "6567:28:5"
                            }
                        ],
                        "name": "authorizeHubByOwner",
                        "nameLocation": "6498:19:5",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 3907,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "6596:8:5"
                        },
                        "parameters": {
                            "id": 3903,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 3900,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "6526:12:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3915,
                                    "src": "6518:20:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 3899,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6518:7:5",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 3902,
                                    "mutability": "mutable",
                                    "name": "relayHub",
                                    "nameLocation": "6548:8:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3915,
                                    "src": "6540:16:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 3901,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6540:7:5",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "6517:40:5"
                        },
                        "returnParameters": {
                            "id": 3908,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "6605:0:5"
                        },
                        "scope": 4355,
                        "src": "6489:170:5",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            6179
                        ],
                        "body": {
                            "id": 3930,
                            "nodeType": "Block",
                            "src": "6778:52:5",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "expression": {
                                                    "id": 3925,
                                                    "name": "msg",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967281,
                                                    "src": "6802:3:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_message",
                                                        "typeString": "msg"
                                                    }
                                                },
                                                "id": 3926,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "sender",
                                                "nodeType": "MemberAccess",
                                                "src": "6802:10:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 3927,
                                                "name": "relayHub",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3918,
                                                "src": "6814:8:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "id": 3924,
                                            "name": "_authorizeHub",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3957,
                                            "src": "6788:13:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$",
                                                "typeString": "function (address,address)"
                                            }
                                        },
                                        "id": 3928,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "6788:35:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3929,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6788:35:5"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 3916,
                            "nodeType": "StructuredDocumentation",
                            "src": "6665:29:5",
                            "text": "@inheritdoc IStakeManager"
                        },
                        "functionSelector": "d48a9d43",
                        "id": 3931,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [
                            {
                                "id": 3921,
                                "kind": "modifierInvocation",
                                "modifierName": {
                                    "id": 3920,
                                    "name": "managerOnly",
                                    "nodeType": "IdentifierPath",
                                    "referencedDeclaration": 3897,
                                    "src": "6757:11:5"
                                },
                                "nodeType": "ModifierInvocation",
                                "src": "6757:11:5"
                            }
                        ],
                        "name": "authorizeHubByManager",
                        "nameLocation": "6708:21:5",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 3922,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "6769:8:5"
                        },
                        "parameters": {
                            "id": 3919,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 3918,
                                    "mutability": "mutable",
                                    "name": "relayHub",
                                    "nameLocation": "6738:8:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3931,
                                    "src": "6730:16:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 3917,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6730:7:5",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "6729:18:5"
                        },
                        "returnParameters": {
                            "id": 3923,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "6778:0:5"
                        },
                        "scope": 4355,
                        "src": "6699:131:5",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "body": {
                            "id": 3956,
                            "nodeType": "Block",
                            "src": "6908:139:5",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 3949,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "expression": {
                                                "baseExpression": {
                                                    "baseExpression": {
                                                        "id": 3938,
                                                        "name": "authorizedHubs",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3480,
                                                        "src": "6918:14:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_struct$_RelayHubInfo_$6127_storage_$_$",
                                                            "typeString": "mapping(address => mapping(address => struct IStakeManager.RelayHubInfo storage ref))"
                                                        }
                                                    },
                                                    "id": 3941,
                                                    "indexExpression": {
                                                        "id": 3939,
                                                        "name": "relayManager",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3933,
                                                        "src": "6933:12:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "6918:28:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_RelayHubInfo_$6127_storage_$",
                                                        "typeString": "mapping(address => struct IStakeManager.RelayHubInfo storage ref)"
                                                    }
                                                },
                                                "id": 3942,
                                                "indexExpression": {
                                                    "id": 3940,
                                                    "name": "relayHub",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3935,
                                                    "src": "6947:8:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "IndexAccess",
                                                "src": "6918:38:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_RelayHubInfo_$6127_storage",
                                                    "typeString": "struct IStakeManager.RelayHubInfo storage ref"
                                                }
                                            },
                                            "id": 3943,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "removalTime",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6126,
                                            "src": "6918:50:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "expression": {
                                                "arguments": [
                                                    {
                                                        "id": 3946,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "ElementaryTypeNameExpression",
                                                        "src": "6976:7:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_uint256_$",
                                                            "typeString": "type(uint256)"
                                                        },
                                                        "typeName": {
                                                            "id": 3945,
                                                            "name": "uint256",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "6976:7:5",
                                                            "typeDescriptions": {}
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_type$_t_uint256_$",
                                                            "typeString": "type(uint256)"
                                                        }
                                                    ],
                                                    "id": 3944,
                                                    "name": "type",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967269,
                                                    "src": "6971:4:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                                        "typeString": "function () pure"
                                                    }
                                                },
                                                "id": 3947,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "6971:13:5",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_magic_meta_type_t_uint256",
                                                    "typeString": "type(uint256)"
                                                }
                                            },
                                            "id": 3948,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "memberName": "max",
                                            "nodeType": "MemberAccess",
                                            "src": "6971:17:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "6918:70:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 3950,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6918:70:5"
                                },
                                {
                                    "eventCall": {
                                        "arguments": [
                                            {
                                                "id": 3952,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3933,
                                                "src": "7017:12:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 3953,
                                                "name": "relayHub",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3935,
                                                "src": "7031:8:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "id": 3951,
                                            "name": "HubAuthorized",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6056,
                                            "src": "7003:13:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                                                "typeString": "function (address,address)"
                                            }
                                        },
                                        "id": 3954,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "7003:37:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3955,
                                    "nodeType": "EmitStatement",
                                    "src": "6998:42:5"
                                }
                            ]
                        },
                        "id": 3957,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "_authorizeHub",
                        "nameLocation": "6845:13:5",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 3936,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 3933,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "6867:12:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3957,
                                    "src": "6859:20:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 3932,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6859:7:5",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 3935,
                                    "mutability": "mutable",
                                    "name": "relayHub",
                                    "nameLocation": "6889:8:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3957,
                                    "src": "6881:16:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 3934,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6881:7:5",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "6858:40:5"
                        },
                        "returnParameters": {
                            "id": 3937,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "6908:0:5"
                        },
                        "scope": 4355,
                        "src": "6836:211:5",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "baseFunctions": [
                            6187
                        ],
                        "body": {
                            "id": 3974,
                            "nodeType": "Block",
                            "src": "7205:56:5",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 3970,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3960,
                                                "src": "7231:12:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 3971,
                                                "name": "relayHub",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3962,
                                                "src": "7245:8:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "id": 3969,
                                            "name": "_unauthorizeHub",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4039,
                                            "src": "7215:15:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$",
                                                "typeString": "function (address,address)"
                                            }
                                        },
                                        "id": 3972,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "7215:39:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3973,
                                    "nodeType": "ExpressionStatement",
                                    "src": "7215:39:5"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 3958,
                            "nodeType": "StructuredDocumentation",
                            "src": "7053:29:5",
                            "text": "@inheritdoc IStakeManager"
                        },
                        "functionSelector": "f48f8ac7",
                        "id": 3975,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [
                            {
                                "arguments": [
                                    {
                                        "id": 3966,
                                        "name": "relayManager",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3960,
                                        "src": "7191:12:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    }
                                ],
                                "id": 3967,
                                "kind": "modifierInvocation",
                                "modifierName": {
                                    "id": 3965,
                                    "name": "relayOwnerOnly",
                                    "nodeType": "IdentifierPath",
                                    "referencedDeclaration": 3873,
                                    "src": "7176:14:5"
                                },
                                "nodeType": "ModifierInvocation",
                                "src": "7176:28:5"
                            }
                        ],
                        "name": "unauthorizeHubByOwner",
                        "nameLocation": "7096:21:5",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 3964,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "7167:8:5"
                        },
                        "parameters": {
                            "id": 3963,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 3960,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "7126:12:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3975,
                                    "src": "7118:20:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 3959,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "7118:7:5",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 3962,
                                    "mutability": "mutable",
                                    "name": "relayHub",
                                    "nameLocation": "7148:8:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3975,
                                    "src": "7140:16:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 3961,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "7140:7:5",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "7117:40:5"
                        },
                        "returnParameters": {
                            "id": 3968,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "7205:0:5"
                        },
                        "scope": 4355,
                        "src": "7087:174:5",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            6193
                        ],
                        "body": {
                            "id": 3990,
                            "nodeType": "Block",
                            "src": "7382:54:5",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "expression": {
                                                    "id": 3985,
                                                    "name": "msg",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967281,
                                                    "src": "7408:3:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_message",
                                                        "typeString": "msg"
                                                    }
                                                },
                                                "id": 3986,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "sender",
                                                "nodeType": "MemberAccess",
                                                "src": "7408:10:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 3987,
                                                "name": "relayHub",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3978,
                                                "src": "7420:8:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "id": 3984,
                                            "name": "_unauthorizeHub",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4039,
                                            "src": "7392:15:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$",
                                                "typeString": "function (address,address)"
                                            }
                                        },
                                        "id": 3988,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "7392:37:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3989,
                                    "nodeType": "ExpressionStatement",
                                    "src": "7392:37:5"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 3976,
                            "nodeType": "StructuredDocumentation",
                            "src": "7267:29:5",
                            "text": "@inheritdoc IStakeManager"
                        },
                        "functionSelector": "f9bce311",
                        "id": 3991,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [
                            {
                                "id": 3982,
                                "kind": "modifierInvocation",
                                "modifierName": {
                                    "id": 3981,
                                    "name": "managerOnly",
                                    "nodeType": "IdentifierPath",
                                    "referencedDeclaration": 3897,
                                    "src": "7370:11:5"
                                },
                                "nodeType": "ModifierInvocation",
                                "src": "7370:11:5"
                            }
                        ],
                        "name": "unauthorizeHubByManager",
                        "nameLocation": "7310:23:5",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 3980,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "7361:8:5"
                        },
                        "parameters": {
                            "id": 3979,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 3978,
                                    "mutability": "mutable",
                                    "name": "relayHub",
                                    "nameLocation": "7342:8:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3991,
                                    "src": "7334:16:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 3977,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "7334:7:5",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "7333:18:5"
                        },
                        "returnParameters": {
                            "id": 3983,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "7382:0:5"
                        },
                        "scope": 4355,
                        "src": "7301:135:5",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "body": {
                            "id": 4038,
                            "nodeType": "Block",
                            "src": "7516:325:5",
                            "statements": [
                                {
                                    "assignments": [
                                        4000
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 4000,
                                            "mutability": "mutable",
                                            "name": "hubInfo",
                                            "nameLocation": "7547:7:5",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 4038,
                                            "src": "7526:28:5",
                                            "stateVariable": false,
                                            "storageLocation": "storage",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_RelayHubInfo_$6127_storage_ptr",
                                                "typeString": "struct IStakeManager.RelayHubInfo"
                                            },
                                            "typeName": {
                                                "id": 3999,
                                                "nodeType": "UserDefinedTypeName",
                                                "pathNode": {
                                                    "id": 3998,
                                                    "name": "RelayHubInfo",
                                                    "nodeType": "IdentifierPath",
                                                    "referencedDeclaration": 6127,
                                                    "src": "7526:12:5"
                                                },
                                                "referencedDeclaration": 6127,
                                                "src": "7526:12:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_RelayHubInfo_$6127_storage_ptr",
                                                    "typeString": "struct IStakeManager.RelayHubInfo"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 4006,
                                    "initialValue": {
                                        "baseExpression": {
                                            "baseExpression": {
                                                "id": 4001,
                                                "name": "authorizedHubs",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3480,
                                                "src": "7557:14:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_struct$_RelayHubInfo_$6127_storage_$_$",
                                                    "typeString": "mapping(address => mapping(address => struct IStakeManager.RelayHubInfo storage ref))"
                                                }
                                            },
                                            "id": 4003,
                                            "indexExpression": {
                                                "id": 4002,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3993,
                                                "src": "7572:12:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "7557:28:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_RelayHubInfo_$6127_storage_$",
                                                "typeString": "mapping(address => struct IStakeManager.RelayHubInfo storage ref)"
                                            }
                                        },
                                        "id": 4005,
                                        "indexExpression": {
                                            "id": 4004,
                                            "name": "relayHub",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3995,
                                            "src": "7586:8:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "7557:38:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayHubInfo_$6127_storage",
                                            "typeString": "struct IStakeManager.RelayHubInfo storage ref"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "7526:69:5"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 4015,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "id": 4008,
                                                        "name": "hubInfo",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4000,
                                                        "src": "7613:7:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayHubInfo_$6127_storage_ptr",
                                                            "typeString": "struct IStakeManager.RelayHubInfo storage pointer"
                                                        }
                                                    },
                                                    "id": 4009,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "removalTime",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 6126,
                                                    "src": "7613:19:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "==",
                                                "rightExpression": {
                                                    "expression": {
                                                        "arguments": [
                                                            {
                                                                "id": 4012,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "lValueRequested": false,
                                                                "nodeType": "ElementaryTypeNameExpression",
                                                                "src": "7641:7:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_type$_t_uint256_$",
                                                                    "typeString": "type(uint256)"
                                                                },
                                                                "typeName": {
                                                                    "id": 4011,
                                                                    "name": "uint256",
                                                                    "nodeType": "ElementaryTypeName",
                                                                    "src": "7641:7:5",
                                                                    "typeDescriptions": {}
                                                                }
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_type$_t_uint256_$",
                                                                    "typeString": "type(uint256)"
                                                                }
                                                            ],
                                                            "id": 4010,
                                                            "name": "type",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 4294967269,
                                                            "src": "7636:4:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                                                "typeString": "function () pure"
                                                            }
                                                        },
                                                        "id": 4013,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "functionCall",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "7636:13:5",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_meta_type_t_uint256",
                                                            "typeString": "type(uint256)"
                                                        }
                                                    },
                                                    "id": 4014,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "memberName": "max",
                                                    "nodeType": "MemberAccess",
                                                    "src": "7636:17:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "7613:40:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "687562206e6f7420617574686f72697a6564",
                                                "id": 4016,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "7655:20:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_833b11fcdf7eb617a5e8e51044818470f61ce1793663032dc99c31429f81a19f",
                                                    "typeString": "literal_string \"hub not authorized\""
                                                },
                                                "value": "hub not authorized"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_833b11fcdf7eb617a5e8e51044818470f61ce1793663032dc99c31429f81a19f",
                                                    "typeString": "literal_string \"hub not authorized\""
                                                }
                                            ],
                                            "id": 4007,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "7605:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 4017,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "7605:71:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4018,
                                    "nodeType": "ExpressionStatement",
                                    "src": "7605:71:5"
                                },
                                {
                                    "expression": {
                                        "id": 4029,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "expression": {
                                                "id": 4019,
                                                "name": "hubInfo",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4000,
                                                "src": "7686:7:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_RelayHubInfo_$6127_storage_ptr",
                                                    "typeString": "struct IStakeManager.RelayHubInfo storage pointer"
                                                }
                                            },
                                            "id": 4021,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "removalTime",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6126,
                                            "src": "7686:19:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "id": 4028,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                                "expression": {
                                                    "id": 4022,
                                                    "name": "block",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967292,
                                                    "src": "7708:5:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_block",
                                                        "typeString": "block"
                                                    }
                                                },
                                                "id": 4023,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "timestamp",
                                                "nodeType": "MemberAccess",
                                                "src": "7708:15:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "+",
                                            "rightExpression": {
                                                "expression": {
                                                    "baseExpression": {
                                                        "id": 4024,
                                                        "name": "stakes",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3367,
                                                        "src": "7726:6:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$6124_storage_$",
                                                            "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                        }
                                                    },
                                                    "id": 4026,
                                                    "indexExpression": {
                                                        "id": 4025,
                                                        "name": "relayManager",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3993,
                                                        "src": "7733:12:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "7726:20:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_StakeInfo_$6124_storage",
                                                        "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                    }
                                                },
                                                "id": 4027,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "unstakeDelay",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 6112,
                                                "src": "7726:33:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "src": "7708:51:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "7686:73:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 4030,
                                    "nodeType": "ExpressionStatement",
                                    "src": "7686:73:5"
                                },
                                {
                                    "eventCall": {
                                        "arguments": [
                                            {
                                                "id": 4032,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3993,
                                                "src": "7790:12:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 4033,
                                                "name": "relayHub",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3995,
                                                "src": "7804:8:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "expression": {
                                                    "id": 4034,
                                                    "name": "hubInfo",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4000,
                                                    "src": "7814:7:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_RelayHubInfo_$6127_storage_ptr",
                                                        "typeString": "struct IStakeManager.RelayHubInfo storage pointer"
                                                    }
                                                },
                                                "id": 4035,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "removalTime",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 6126,
                                                "src": "7814:19:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 4031,
                                            "name": "HubUnauthorized",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6065,
                                            "src": "7774:15:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,address,uint256)"
                                            }
                                        },
                                        "id": 4036,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "7774:60:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4037,
                                    "nodeType": "EmitStatement",
                                    "src": "7769:65:5"
                                }
                            ]
                        },
                        "id": 4039,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "_unauthorizeHub",
                        "nameLocation": "7451:15:5",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 3996,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 3993,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "7475:12:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4039,
                                    "src": "7467:20:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 3992,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "7467:7:5",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 3995,
                                    "mutability": "mutable",
                                    "name": "relayHub",
                                    "nameLocation": "7497:8:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4039,
                                    "src": "7489:16:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 3994,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "7489:7:5",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "7466:40:5"
                        },
                        "returnParameters": {
                            "id": 3997,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "7516:0:5"
                        },
                        "scope": 4355,
                        "src": "7442:399:5",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "baseFunctions": [
                            6203
                        ],
                        "body": {
                            "id": 4137,
                            "nodeType": "Block",
                            "src": "7988:812:5",
                            "statements": [
                                {
                                    "assignments": [
                                        4051
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 4051,
                                            "mutability": "mutable",
                                            "name": "removalTime",
                                            "nameLocation": "8006:11:5",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 4137,
                                            "src": "7998:19:5",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 4050,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "7998:7:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 4059,
                                    "initialValue": {
                                        "expression": {
                                            "baseExpression": {
                                                "baseExpression": {
                                                    "id": 4052,
                                                    "name": "authorizedHubs",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3480,
                                                    "src": "8020:14:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_struct$_RelayHubInfo_$6127_storage_$_$",
                                                        "typeString": "mapping(address => mapping(address => struct IStakeManager.RelayHubInfo storage ref))"
                                                    }
                                                },
                                                "id": 4054,
                                                "indexExpression": {
                                                    "id": 4053,
                                                    "name": "relayManager",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4042,
                                                    "src": "8035:12:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "IndexAccess",
                                                "src": "8020:28:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_RelayHubInfo_$6127_storage_$",
                                                    "typeString": "mapping(address => struct IStakeManager.RelayHubInfo storage ref)"
                                                }
                                            },
                                            "id": 4057,
                                            "indexExpression": {
                                                "expression": {
                                                    "id": 4055,
                                                    "name": "msg",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967281,
                                                    "src": "8049:3:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_message",
                                                        "typeString": "msg"
                                                    }
                                                },
                                                "id": 4056,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "sender",
                                                "nodeType": "MemberAccess",
                                                "src": "8049:10:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "8020:40:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_RelayHubInfo_$6127_storage",
                                                "typeString": "struct IStakeManager.RelayHubInfo storage ref"
                                            }
                                        },
                                        "id": 4058,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "removalTime",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 6126,
                                        "src": "8020:52:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "7998:74:5"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 4063,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "id": 4061,
                                                    "name": "removalTime",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4051,
                                                    "src": "8090:11:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "!=",
                                                "rightExpression": {
                                                    "hexValue": "30",
                                                    "id": 4062,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "8105:1:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_0_by_1",
                                                        "typeString": "int_const 0"
                                                    },
                                                    "value": "0"
                                                },
                                                "src": "8090:16:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "687562206e6f7420617574686f72697a6564",
                                                "id": 4064,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "8108:20:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_833b11fcdf7eb617a5e8e51044818470f61ce1793663032dc99c31429f81a19f",
                                                    "typeString": "literal_string \"hub not authorized\""
                                                },
                                                "value": "hub not authorized"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_833b11fcdf7eb617a5e8e51044818470f61ce1793663032dc99c31429f81a19f",
                                                    "typeString": "literal_string \"hub not authorized\""
                                                }
                                            ],
                                            "id": 4060,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "8082:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 4065,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "8082:47:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4066,
                                    "nodeType": "ExpressionStatement",
                                    "src": "8082:47:5"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 4071,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "id": 4068,
                                                    "name": "removalTime",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4051,
                                                    "src": "8147:11:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": ">",
                                                "rightExpression": {
                                                    "expression": {
                                                        "id": 4069,
                                                        "name": "block",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967292,
                                                        "src": "8161:5:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_block",
                                                            "typeString": "block"
                                                        }
                                                    },
                                                    "id": 4070,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "timestamp",
                                                    "nodeType": "MemberAccess",
                                                    "src": "8161:15:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "8147:29:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "68756220617574686f72697a6174696f6e2065787069726564",
                                                "id": 4072,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "8178:27:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_5a90317ad5eb065da8284e8902c4393ff73ad0f286b027487eb55a338442c023",
                                                    "typeString": "literal_string \"hub authorization expired\""
                                                },
                                                "value": "hub authorization expired"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_5a90317ad5eb065da8284e8902c4393ff73ad0f286b027487eb55a338442c023",
                                                    "typeString": "literal_string \"hub authorization expired\""
                                                }
                                            ],
                                            "id": 4067,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "8139:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 4073,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "8139:67:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4074,
                                    "nodeType": "ExpressionStatement",
                                    "src": "8139:67:5"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 4081,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "baseExpression": {
                                                            "id": 4076,
                                                            "name": "stakes",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 3367,
                                                            "src": "8289:6:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$6124_storage_$",
                                                                "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                            }
                                                        },
                                                        "id": 4078,
                                                        "indexExpression": {
                                                            "id": 4077,
                                                            "name": "relayManager",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 4042,
                                                            "src": "8296:12:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        },
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "nodeType": "IndexAccess",
                                                        "src": "8289:20:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_StakeInfo_$6124_storage",
                                                            "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                        }
                                                    },
                                                    "id": 4079,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "stake",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 6110,
                                                    "src": "8289:26:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": ">=",
                                                "rightExpression": {
                                                    "id": 4080,
                                                    "name": "amount",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4046,
                                                    "src": "8319:6:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "8289:36:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "70656e616c74792065786365656473207374616b65",
                                                "id": 4082,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "8327:23:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_c65b35d1a6ad66cabf69e4201547cf2b95ef7d46f8c643c825a1657c98b3e5c6",
                                                    "typeString": "literal_string \"penalty exceeds stake\""
                                                },
                                                "value": "penalty exceeds stake"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_c65b35d1a6ad66cabf69e4201547cf2b95ef7d46f8c643c825a1657c98b3e5c6",
                                                    "typeString": "literal_string \"penalty exceeds stake\""
                                                }
                                            ],
                                            "id": 4075,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "8281:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 4083,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "8281:70:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4084,
                                    "nodeType": "ExpressionStatement",
                                    "src": "8281:70:5"
                                },
                                {
                                    "expression": {
                                        "id": 4095,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "expression": {
                                                "baseExpression": {
                                                    "id": 4085,
                                                    "name": "stakes",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3367,
                                                    "src": "8361:6:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$6124_storage_$",
                                                        "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                    }
                                                },
                                                "id": 4087,
                                                "indexExpression": {
                                                    "id": 4086,
                                                    "name": "relayManager",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4042,
                                                    "src": "8368:12:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "IndexAccess",
                                                "src": "8361:20:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$6124_storage",
                                                    "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                }
                                            },
                                            "id": 4088,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "stake",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6110,
                                            "src": "8361:26:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "id": 4094,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                                "expression": {
                                                    "baseExpression": {
                                                        "id": 4089,
                                                        "name": "stakes",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3367,
                                                        "src": "8389:6:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$6124_storage_$",
                                                            "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                        }
                                                    },
                                                    "id": 4091,
                                                    "indexExpression": {
                                                        "id": 4090,
                                                        "name": "relayManager",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4042,
                                                        "src": "8396:12:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "8389:20:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_StakeInfo_$6124_storage",
                                                        "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                    }
                                                },
                                                "id": 4092,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "stake",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 6110,
                                                "src": "8389:26:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "-",
                                            "rightExpression": {
                                                "id": 4093,
                                                "name": "amount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4046,
                                                "src": "8418:6:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "src": "8389:35:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "8361:63:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 4096,
                                    "nodeType": "ExpressionStatement",
                                    "src": "8361:63:5"
                                },
                                {
                                    "assignments": [
                                        4098
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 4098,
                                            "mutability": "mutable",
                                            "name": "toBurn",
                                            "nameLocation": "8443:6:5",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 4137,
                                            "src": "8435:14:5",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 4097,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "8435:7:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 4102,
                                    "initialValue": {
                                        "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        },
                                        "id": 4101,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "id": 4099,
                                            "name": "amount",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4046,
                                            "src": "8452:6:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "/",
                                        "rightExpression": {
                                            "hexValue": "32",
                                            "id": 4100,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "8461:1:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_rational_2_by_1",
                                                "typeString": "int_const 2"
                                            },
                                            "value": "2"
                                        },
                                        "src": "8452:10:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "8435:27:5"
                                },
                                {
                                    "assignments": [
                                        4104
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 4104,
                                            "mutability": "mutable",
                                            "name": "reward",
                                            "nameLocation": "8480:6:5",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 4137,
                                            "src": "8472:14:5",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 4103,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "8472:7:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 4108,
                                    "initialValue": {
                                        "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        },
                                        "id": 4107,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "id": 4105,
                                            "name": "amount",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4046,
                                            "src": "8489:6:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "-",
                                        "rightExpression": {
                                            "id": 4106,
                                            "name": "toBurn",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4098,
                                            "src": "8498:6:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "8489:15:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "8472:32:5"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 4114,
                                                "name": "burnAddress",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3359,
                                                "src": "8611:11:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 4115,
                                                "name": "toBurn",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4098,
                                                "src": "8624:6:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "expression": {
                                                "expression": {
                                                    "baseExpression": {
                                                        "id": 4109,
                                                        "name": "stakes",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3367,
                                                        "src": "8571:6:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$6124_storage_$",
                                                            "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                        }
                                                    },
                                                    "id": 4111,
                                                    "indexExpression": {
                                                        "id": 4110,
                                                        "name": "relayManager",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4042,
                                                        "src": "8578:12:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "8571:20:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_StakeInfo_$6124_storage",
                                                        "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                    }
                                                },
                                                "id": 4112,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "token",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 6121,
                                                "src": "8571:26:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_IERC20_$10849",
                                                    "typeString": "contract IERC20"
                                                }
                                            },
                                            "id": 4113,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "safeTransfer",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 10942,
                                            "src": "8571:39:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$10849_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$10849_$",
                                                "typeString": "function (contract IERC20,address,uint256)"
                                            }
                                        },
                                        "id": 4116,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "8571:60:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4117,
                                    "nodeType": "ExpressionStatement",
                                    "src": "8571:60:5"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 4123,
                                                "name": "beneficiary",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4044,
                                                "src": "8681:11:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 4124,
                                                "name": "reward",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4104,
                                                "src": "8694:6:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "expression": {
                                                "expression": {
                                                    "baseExpression": {
                                                        "id": 4118,
                                                        "name": "stakes",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3367,
                                                        "src": "8641:6:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$6124_storage_$",
                                                            "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                        }
                                                    },
                                                    "id": 4120,
                                                    "indexExpression": {
                                                        "id": 4119,
                                                        "name": "relayManager",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4042,
                                                        "src": "8648:12:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "8641:20:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_StakeInfo_$6124_storage",
                                                        "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                    }
                                                },
                                                "id": 4121,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "token",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 6121,
                                                "src": "8641:26:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_IERC20_$10849",
                                                    "typeString": "contract IERC20"
                                                }
                                            },
                                            "id": 4122,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "safeTransfer",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 10942,
                                            "src": "8641:39:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$10849_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$10849_$",
                                                "typeString": "function (contract IERC20,address,uint256)"
                                            }
                                        },
                                        "id": 4125,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "8641:60:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4126,
                                    "nodeType": "ExpressionStatement",
                                    "src": "8641:60:5"
                                },
                                {
                                    "eventCall": {
                                        "arguments": [
                                            {
                                                "id": 4128,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4042,
                                                "src": "8731:12:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 4129,
                                                "name": "beneficiary",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4044,
                                                "src": "8745:11:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "expression": {
                                                    "baseExpression": {
                                                        "id": 4130,
                                                        "name": "stakes",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3367,
                                                        "src": "8758:6:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$6124_storage_$",
                                                            "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                        }
                                                    },
                                                    "id": 4132,
                                                    "indexExpression": {
                                                        "id": 4131,
                                                        "name": "relayManager",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4042,
                                                        "src": "8765:12:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "8758:20:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_StakeInfo_$6124_storage",
                                                        "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                    }
                                                },
                                                "id": 4133,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "token",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 6121,
                                                "src": "8758:26:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_IERC20_$10849",
                                                    "typeString": "contract IERC20"
                                                }
                                            },
                                            {
                                                "id": 4134,
                                                "name": "reward",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4104,
                                                "src": "8786:6:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_contract$_IERC20_$10849",
                                                    "typeString": "contract IERC20"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 4127,
                                            "name": "StakePenalized",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6049,
                                            "src": "8716:14:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_contract$_IERC20_$10849_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,address,contract IERC20,uint256)"
                                            }
                                        },
                                        "id": 4135,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "8716:77:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4136,
                                    "nodeType": "EmitStatement",
                                    "src": "8711:82:5"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 4040,
                            "nodeType": "StructuredDocumentation",
                            "src": "7847:29:5",
                            "text": "@inheritdoc IStakeManager"
                        },
                        "functionSelector": "09a08af4",
                        "id": 4138,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "penalizeRelayManager",
                        "nameLocation": "7890:20:5",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 4048,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "7979:8:5"
                        },
                        "parameters": {
                            "id": 4047,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4042,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "7919:12:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4138,
                                    "src": "7911:20:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 4041,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "7911:7:5",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4044,
                                    "mutability": "mutable",
                                    "name": "beneficiary",
                                    "nameLocation": "7941:11:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4138,
                                    "src": "7933:19:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 4043,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "7933:7:5",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4046,
                                    "mutability": "mutable",
                                    "name": "amount",
                                    "nameLocation": "7962:6:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4138,
                                    "src": "7954:14:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 4045,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "7954:7:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "7910:59:5"
                        },
                        "returnParameters": {
                            "id": 4049,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "7988:0:5"
                        },
                        "scope": 4355,
                        "src": "7881:919:5",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            6229
                        ],
                        "body": {
                            "id": 4170,
                            "nodeType": "Block",
                            "src": "8926:216:5",
                            "statements": [
                                {
                                    "assignments": [
                                        4151
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 4151,
                                            "mutability": "mutable",
                                            "name": "stakeInfo",
                                            "nameLocation": "8967:9:5",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 4170,
                                            "src": "8936:40:5",
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_StakeInfo_$6124_memory_ptr",
                                                "typeString": "struct IStakeManager.StakeInfo"
                                            },
                                            "typeName": {
                                                "id": 4150,
                                                "nodeType": "UserDefinedTypeName",
                                                "pathNode": {
                                                    "id": 4149,
                                                    "name": "IStakeManager.StakeInfo",
                                                    "nodeType": "IdentifierPath",
                                                    "referencedDeclaration": 6124,
                                                    "src": "8936:23:5"
                                                },
                                                "referencedDeclaration": 6124,
                                                "src": "8936:23:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                    "typeString": "struct IStakeManager.StakeInfo"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 4155,
                                    "initialValue": {
                                        "baseExpression": {
                                            "id": 4152,
                                            "name": "stakes",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3367,
                                            "src": "8979:6:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$6124_storage_$",
                                                "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                            }
                                        },
                                        "id": 4154,
                                        "indexExpression": {
                                            "id": 4153,
                                            "name": "relayManager",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4141,
                                            "src": "8986:12:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "8979:20:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_StakeInfo_$6124_storage",
                                            "typeString": "struct IStakeManager.StakeInfo storage ref"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "8936:63:5"
                                },
                                {
                                    "expression": {
                                        "commonType": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        },
                                        "id": 4168,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "id": 4159,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                                "expression": {
                                                    "id": 4156,
                                                    "name": "stakeInfo",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4151,
                                                    "src": "9016:9:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_StakeInfo_$6124_memory_ptr",
                                                        "typeString": "struct IStakeManager.StakeInfo memory"
                                                    }
                                                },
                                                "id": 4157,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "abandonedTime",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 6116,
                                                "src": "9016:23:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "!=",
                                            "rightExpression": {
                                                "hexValue": "30",
                                                "id": 4158,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "number",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "9043:1:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_rational_0_by_1",
                                                    "typeString": "int_const 0"
                                                },
                                                "value": "0"
                                            },
                                            "src": "9016:28:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "&&",
                                        "rightExpression": {
                                            "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "id": 4167,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 4164,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "id": 4160,
                                                        "name": "stakeInfo",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4151,
                                                        "src": "9048:9:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_StakeInfo_$6124_memory_ptr",
                                                            "typeString": "struct IStakeManager.StakeInfo memory"
                                                        }
                                                    },
                                                    "id": 4161,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "abandonedTime",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 6116,
                                                    "src": "9048:23:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "+",
                                                "rightExpression": {
                                                    "expression": {
                                                        "id": 4162,
                                                        "name": "abandonedRelayServerConfig",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3357,
                                                        "src": "9074:26:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_AbandonedRelayServerConfig_$6134_storage",
                                                            "typeString": "struct IStakeManager.AbandonedRelayServerConfig storage ref"
                                                        }
                                                    },
                                                    "id": 4163,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "escheatmentDelay",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 6133,
                                                    "src": "9074:43:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "9048:69:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "<",
                                            "rightExpression": {
                                                "expression": {
                                                    "id": 4165,
                                                    "name": "block",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967292,
                                                    "src": "9120:5:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_block",
                                                        "typeString": "block"
                                                    }
                                                },
                                                "id": 4166,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "timestamp",
                                                "nodeType": "MemberAccess",
                                                "src": "9120:15:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "src": "9048:87:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "src": "9016:119:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "functionReturnParameters": 4146,
                                    "id": 4169,
                                    "nodeType": "Return",
                                    "src": "9009:126:5"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 4139,
                            "nodeType": "StructuredDocumentation",
                            "src": "8806:29:5",
                            "text": "@inheritdoc IStakeManager"
                        },
                        "functionSelector": "39622167",
                        "id": 4171,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "isRelayEscheatable",
                        "nameLocation": "8849:18:5",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 4143,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "8902:8:5"
                        },
                        "parameters": {
                            "id": 4142,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4141,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "8876:12:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4171,
                                    "src": "8868:20:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 4140,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "8868:7:5",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "8867:22:5"
                        },
                        "returnParameters": {
                            "id": 4146,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4145,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4171,
                                    "src": "8920:4:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 4144,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "8920:4:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "8919:6:5"
                        },
                        "scope": 4355,
                        "src": "8840:302:5",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            6209
                        ],
                        "body": {
                            "id": 4228,
                            "nodeType": "Block",
                            "src": "9260:452:5",
                            "statements": [
                                {
                                    "assignments": [
                                        4182
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 4182,
                                            "mutability": "mutable",
                                            "name": "info",
                                            "nameLocation": "9288:4:5",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 4228,
                                            "src": "9270:22:5",
                                            "stateVariable": false,
                                            "storageLocation": "storage",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                "typeString": "struct IStakeManager.StakeInfo"
                                            },
                                            "typeName": {
                                                "id": 4181,
                                                "nodeType": "UserDefinedTypeName",
                                                "pathNode": {
                                                    "id": 4180,
                                                    "name": "StakeInfo",
                                                    "nodeType": "IdentifierPath",
                                                    "referencedDeclaration": 6124,
                                                    "src": "9270:9:5"
                                                },
                                                "referencedDeclaration": 6124,
                                                "src": "9270:9:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                    "typeString": "struct IStakeManager.StakeInfo"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 4186,
                                    "initialValue": {
                                        "baseExpression": {
                                            "id": 4183,
                                            "name": "stakes",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3367,
                                            "src": "9295:6:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$6124_storage_$",
                                                "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                            }
                                        },
                                        "id": 4185,
                                        "indexExpression": {
                                            "id": 4184,
                                            "name": "relayManager",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4174,
                                            "src": "9302:12:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "9295:20:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_StakeInfo_$6124_storage",
                                            "typeString": "struct IStakeManager.StakeInfo storage ref"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "9270:45:5"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 4191,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "id": 4188,
                                                        "name": "info",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4182,
                                                        "src": "9333:4:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                            "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                        }
                                                    },
                                                    "id": 4189,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "stake",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 6110,
                                                    "src": "9333:10:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": ">",
                                                "rightExpression": {
                                                    "hexValue": "30",
                                                    "id": 4190,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "9346:1:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_0_by_1",
                                                        "typeString": "int_const 0"
                                                    },
                                                    "value": "0"
                                                },
                                                "src": "9333:14:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "72656c6179206d616e61676572206e6f74207374616b6564",
                                                "id": 4192,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "9349:26:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_592d26f578f5171fd051bd3166e9719e81e7117edaf832f3d73ecadebe4995c3",
                                                    "typeString": "literal_string \"relay manager not staked\""
                                                },
                                                "value": "relay manager not staked"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_592d26f578f5171fd051bd3166e9719e81e7117edaf832f3d73ecadebe4995c3",
                                                    "typeString": "literal_string \"relay manager not staked\""
                                                }
                                            ],
                                            "id": 4187,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "9325:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 4193,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "9325:51:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4194,
                                    "nodeType": "ExpressionStatement",
                                    "src": "9325:51:5"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 4199,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "id": 4196,
                                                        "name": "info",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4182,
                                                        "src": "9394:4:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                            "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                        }
                                                    },
                                                    "id": 4197,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "abandonedTime",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 6116,
                                                    "src": "9394:18:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "==",
                                                "rightExpression": {
                                                    "hexValue": "30",
                                                    "id": 4198,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "9416:1:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_0_by_1",
                                                        "typeString": "int_const 0"
                                                    },
                                                    "value": "0"
                                                },
                                                "src": "9394:23:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "72656c6179206d616e6167657220616c7265616479206162616e646f6e6564",
                                                "id": 4200,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "9419:33:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_1186719b3be237917cd86b4142d2a85df34d0a02f44ec311010b76039d5ceb01",
                                                    "typeString": "literal_string \"relay manager already abandoned\""
                                                },
                                                "value": "relay manager already abandoned"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_1186719b3be237917cd86b4142d2a85df34d0a02f44ec311010b76039d5ceb01",
                                                    "typeString": "literal_string \"relay manager already abandoned\""
                                                }
                                            ],
                                            "id": 4195,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "9386:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 4201,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "9386:67:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4202,
                                    "nodeType": "ExpressionStatement",
                                    "src": "9386:67:5"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 4211,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    "id": 4208,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "expression": {
                                                            "id": 4204,
                                                            "name": "info",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 4182,
                                                            "src": "9471:4:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                                "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                            }
                                                        },
                                                        "id": 4205,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "keepaliveTime",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 6118,
                                                        "src": "9471:18:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "+",
                                                    "rightExpression": {
                                                        "expression": {
                                                            "id": 4206,
                                                            "name": "abandonedRelayServerConfig",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 3357,
                                                            "src": "9492:26:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_AbandonedRelayServerConfig_$6134_storage",
                                                                "typeString": "struct IStakeManager.AbandonedRelayServerConfig storage ref"
                                                            }
                                                        },
                                                        "id": 4207,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "abandonmentDelay",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 6131,
                                                        "src": "9492:43:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "src": "9471:64:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "<",
                                                "rightExpression": {
                                                    "expression": {
                                                        "id": 4209,
                                                        "name": "block",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967292,
                                                        "src": "9538:5:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_block",
                                                            "typeString": "block"
                                                        }
                                                    },
                                                    "id": 4210,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "timestamp",
                                                    "nodeType": "MemberAccess",
                                                    "src": "9538:15:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "9471:82:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "72656c6179206d616e616765722077617320616c69766520726563656e746c79",
                                                "id": 4212,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "9555:34:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_66db75ff41a656c4a01b23b20c2dd3f7fdd08392d23e31ceb54592bf7fe8e58c",
                                                    "typeString": "literal_string \"relay manager was alive recently\""
                                                },
                                                "value": "relay manager was alive recently"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_66db75ff41a656c4a01b23b20c2dd3f7fdd08392d23e31ceb54592bf7fe8e58c",
                                                    "typeString": "literal_string \"relay manager was alive recently\""
                                                }
                                            ],
                                            "id": 4203,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "9463:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 4213,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "9463:127:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4214,
                                    "nodeType": "ExpressionStatement",
                                    "src": "9463:127:5"
                                },
                                {
                                    "expression": {
                                        "id": 4220,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "expression": {
                                                "id": 4215,
                                                "name": "info",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4182,
                                                "src": "9600:4:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                    "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                }
                                            },
                                            "id": 4217,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "abandonedTime",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6116,
                                            "src": "9600:18:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "expression": {
                                                "id": 4218,
                                                "name": "block",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4294967292,
                                                "src": "9621:5:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_magic_block",
                                                    "typeString": "block"
                                                }
                                            },
                                            "id": 4219,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "timestamp",
                                            "nodeType": "MemberAccess",
                                            "src": "9621:15:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "9600:36:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 4221,
                                    "nodeType": "ExpressionStatement",
                                    "src": "9600:36:5"
                                },
                                {
                                    "eventCall": {
                                        "arguments": [
                                            {
                                                "id": 4223,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4174,
                                                "src": "9672:12:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "expression": {
                                                    "id": 4224,
                                                    "name": "info",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4182,
                                                    "src": "9686:4:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                        "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                    }
                                                },
                                                "id": 4225,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "abandonedTime",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 6116,
                                                "src": "9686:18:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 4222,
                                            "name": "RelayServerAbandoned",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6089,
                                            "src": "9651:20:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,uint256)"
                                            }
                                        },
                                        "id": 4226,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "9651:54:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4227,
                                    "nodeType": "EmitStatement",
                                    "src": "9646:59:5"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 4172,
                            "nodeType": "StructuredDocumentation",
                            "src": "9148:29:5",
                            "text": "@inheritdoc IStakeManager"
                        },
                        "functionSelector": "71fa1faf",
                        "id": 4229,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [
                            {
                                "id": 4178,
                                "kind": "modifierInvocation",
                                "modifierName": {
                                    "id": 4177,
                                    "name": "onlyOwner",
                                    "nodeType": "IdentifierPath",
                                    "referencedDeclaration": 10101,
                                    "src": "9250:9:5"
                                },
                                "nodeType": "ModifierInvocation",
                                "src": "9250:9:5"
                            }
                        ],
                        "name": "markRelayAbandoned",
                        "nameLocation": "9191:18:5",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 4176,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "9241:8:5"
                        },
                        "parameters": {
                            "id": 4175,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4174,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "9218:12:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4229,
                                    "src": "9210:20:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 4173,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "9210:7:5",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "9209:22:5"
                        },
                        "returnParameters": {
                            "id": 4179,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "9260:0:5"
                        },
                        "scope": 4355,
                        "src": "9182:530:5",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            6215
                        ],
                        "body": {
                            "id": 4288,
                            "nodeType": "Block",
                            "src": "9838:417:5",
                            "statements": [
                                {
                                    "assignments": [
                                        4240
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 4240,
                                            "mutability": "mutable",
                                            "name": "info",
                                            "nameLocation": "9866:4:5",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 4288,
                                            "src": "9848:22:5",
                                            "stateVariable": false,
                                            "storageLocation": "storage",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                "typeString": "struct IStakeManager.StakeInfo"
                                            },
                                            "typeName": {
                                                "id": 4239,
                                                "nodeType": "UserDefinedTypeName",
                                                "pathNode": {
                                                    "id": 4238,
                                                    "name": "StakeInfo",
                                                    "nodeType": "IdentifierPath",
                                                    "referencedDeclaration": 6124,
                                                    "src": "9848:9:5"
                                                },
                                                "referencedDeclaration": 6124,
                                                "src": "9848:9:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                    "typeString": "struct IStakeManager.StakeInfo"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 4244,
                                    "initialValue": {
                                        "baseExpression": {
                                            "id": 4241,
                                            "name": "stakes",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3367,
                                            "src": "9873:6:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$6124_storage_$",
                                                "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                            }
                                        },
                                        "id": 4243,
                                        "indexExpression": {
                                            "id": 4242,
                                            "name": "relayManager",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4232,
                                            "src": "9880:12:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "9873:20:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_StakeInfo_$6124_storage",
                                            "typeString": "struct IStakeManager.StakeInfo storage ref"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "9848:45:5"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "id": 4247,
                                                        "name": "relayManager",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4232,
                                                        "src": "9930:12:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    ],
                                                    "id": 4246,
                                                    "name": "isRelayEscheatable",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4171,
                                                    "src": "9911:18:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                                                        "typeString": "function (address) view returns (bool)"
                                                    }
                                                },
                                                "id": 4248,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "9911:32:5",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "72656c617920736572766572206e6f74206573636865617461626c6520796574",
                                                "id": 4249,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "9945:34:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_2c978e0fbce1a22c62b2c5b2822310453b6a7c1ff19ec7ab11d5f02e926038d2",
                                                    "typeString": "literal_string \"relay server not escheatable yet\""
                                                },
                                                "value": "relay server not escheatable yet"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_2c978e0fbce1a22c62b2c5b2822310453b6a7c1ff19ec7ab11d5f02e926038d2",
                                                    "typeString": "literal_string \"relay server not escheatable yet\""
                                                }
                                            ],
                                            "id": 4245,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "9903:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 4250,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "9903:77:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4251,
                                    "nodeType": "ExpressionStatement",
                                    "src": "9903:77:5"
                                },
                                {
                                    "assignments": [
                                        4253
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 4253,
                                            "mutability": "mutable",
                                            "name": "amount",
                                            "nameLocation": "9998:6:5",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 4288,
                                            "src": "9990:14:5",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 4252,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "9990:7:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 4256,
                                    "initialValue": {
                                        "expression": {
                                            "id": 4254,
                                            "name": "info",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4240,
                                            "src": "10007:4:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                            }
                                        },
                                        "id": 4255,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "stake",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 6110,
                                        "src": "10007:10:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "9990:27:5"
                                },
                                {
                                    "expression": {
                                        "id": 4261,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "expression": {
                                                "id": 4257,
                                                "name": "info",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4240,
                                                "src": "10027:4:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                    "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                }
                                            },
                                            "id": 4259,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "stake",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6110,
                                            "src": "10027:10:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "hexValue": "30",
                                            "id": 4260,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "10040:1:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_rational_0_by_1",
                                                "typeString": "int_const 0"
                                            },
                                            "value": "0"
                                        },
                                        "src": "10027:14:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 4262,
                                    "nodeType": "ExpressionStatement",
                                    "src": "10027:14:5"
                                },
                                {
                                    "expression": {
                                        "id": 4267,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "expression": {
                                                "id": 4263,
                                                "name": "info",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4240,
                                                "src": "10051:4:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                    "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                }
                                            },
                                            "id": 4265,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "withdrawTime",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6114,
                                            "src": "10051:17:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "hexValue": "30",
                                            "id": 4266,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "10071:1:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_rational_0_by_1",
                                                "typeString": "int_const 0"
                                            },
                                            "value": "0"
                                        },
                                        "src": "10051:21:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 4268,
                                    "nodeType": "ExpressionStatement",
                                    "src": "10051:21:5"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "expression": {
                                                    "id": 4274,
                                                    "name": "abandonedRelayServerConfig",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3357,
                                                    "src": "10106:26:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_AbandonedRelayServerConfig_$6134_storage",
                                                        "typeString": "struct IStakeManager.AbandonedRelayServerConfig storage ref"
                                                    }
                                                },
                                                "id": 4275,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "devAddress",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 6129,
                                                "src": "10106:37:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 4276,
                                                "name": "amount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4253,
                                                "src": "10145:6:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "expression": {
                                                "expression": {
                                                    "id": 4269,
                                                    "name": "info",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4240,
                                                    "src": "10082:4:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                        "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                    }
                                                },
                                                "id": 4272,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "token",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 6121,
                                                "src": "10082:10:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_IERC20_$10849",
                                                    "typeString": "contract IERC20"
                                                }
                                            },
                                            "id": 4273,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "safeTransfer",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 10942,
                                            "src": "10082:23:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$10849_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$10849_$",
                                                "typeString": "function (contract IERC20,address,uint256)"
                                            }
                                        },
                                        "id": 4277,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "10082:70:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4278,
                                    "nodeType": "ExpressionStatement",
                                    "src": "10082:70:5"
                                },
                                {
                                    "eventCall": {
                                        "arguments": [
                                            {
                                                "id": 4280,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4232,
                                                "src": "10203:12:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "expression": {
                                                    "id": 4281,
                                                    "name": "msg",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967281,
                                                    "src": "10217:3:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_message",
                                                        "typeString": "msg"
                                                    }
                                                },
                                                "id": 4282,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "sender",
                                                "nodeType": "MemberAccess",
                                                "src": "10217:10:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "expression": {
                                                    "id": 4283,
                                                    "name": "info",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4240,
                                                    "src": "10229:4:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                        "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                    }
                                                },
                                                "id": 4284,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "token",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 6121,
                                                "src": "10229:10:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_IERC20_$10849",
                                                    "typeString": "contract IERC20"
                                                }
                                            },
                                            {
                                                "id": 4285,
                                                "name": "amount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4253,
                                                "src": "10241:6:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_contract$_IERC20_$10849",
                                                    "typeString": "contract IERC20"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 4279,
                                            "name": "AbandonedRelayManagerStakeEscheated",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6108,
                                            "src": "10167:35:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_contract$_IERC20_$10849_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,address,contract IERC20,uint256)"
                                            }
                                        },
                                        "id": 4286,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "10167:81:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4287,
                                    "nodeType": "EmitStatement",
                                    "src": "10162:86:5"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 4230,
                            "nodeType": "StructuredDocumentation",
                            "src": "9718:29:5",
                            "text": "@inheritdoc IStakeManager"
                        },
                        "functionSelector": "a9aadcd7",
                        "id": 4289,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [
                            {
                                "id": 4236,
                                "kind": "modifierInvocation",
                                "modifierName": {
                                    "id": 4235,
                                    "name": "onlyOwner",
                                    "nodeType": "IdentifierPath",
                                    "referencedDeclaration": 10101,
                                    "src": "9828:9:5"
                                },
                                "nodeType": "ModifierInvocation",
                                "src": "9828:9:5"
                            }
                        ],
                        "name": "escheatAbandonedRelayStake",
                        "nameLocation": "9761:26:5",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 4234,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "9819:8:5"
                        },
                        "parameters": {
                            "id": 4233,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4232,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "9796:12:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4289,
                                    "src": "9788:20:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 4231,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "9788:7:5",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "9787:22:5"
                        },
                        "returnParameters": {
                            "id": 4237,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "9838:0:5"
                        },
                        "scope": 4355,
                        "src": "9752:503:5",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            6221
                        ],
                        "body": {
                            "id": 4353,
                            "nodeType": "Block",
                            "src": "10369:453:5",
                            "statements": [
                                {
                                    "assignments": [
                                        4298
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 4298,
                                            "mutability": "mutable",
                                            "name": "info",
                                            "nameLocation": "10397:4:5",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 4353,
                                            "src": "10379:22:5",
                                            "stateVariable": false,
                                            "storageLocation": "storage",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                "typeString": "struct IStakeManager.StakeInfo"
                                            },
                                            "typeName": {
                                                "id": 4297,
                                                "nodeType": "UserDefinedTypeName",
                                                "pathNode": {
                                                    "id": 4296,
                                                    "name": "StakeInfo",
                                                    "nodeType": "IdentifierPath",
                                                    "referencedDeclaration": 6124,
                                                    "src": "10379:9:5"
                                                },
                                                "referencedDeclaration": 6124,
                                                "src": "10379:9:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                    "typeString": "struct IStakeManager.StakeInfo"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 4302,
                                    "initialValue": {
                                        "baseExpression": {
                                            "id": 4299,
                                            "name": "stakes",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3367,
                                            "src": "10404:6:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$6124_storage_$",
                                                "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                            }
                                        },
                                        "id": 4301,
                                        "indexExpression": {
                                            "id": 4300,
                                            "name": "relayManager",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4292,
                                            "src": "10411:12:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "10404:20:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_StakeInfo_$6124_storage",
                                            "typeString": "struct IStakeManager.StakeInfo storage ref"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "10379:45:5"
                                },
                                {
                                    "assignments": [
                                        4304
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 4304,
                                            "mutability": "mutable",
                                            "name": "isHubAuthorized",
                                            "nameLocation": "10439:15:5",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 4353,
                                            "src": "10434:20:5",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            },
                                            "typeName": {
                                                "id": 4303,
                                                "name": "bool",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "10434:4:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 4318,
                                    "initialValue": {
                                        "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        },
                                        "id": 4317,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "expression": {
                                                "baseExpression": {
                                                    "baseExpression": {
                                                        "id": 4305,
                                                        "name": "authorizedHubs",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3480,
                                                        "src": "10457:14:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_struct$_RelayHubInfo_$6127_storage_$_$",
                                                            "typeString": "mapping(address => mapping(address => struct IStakeManager.RelayHubInfo storage ref))"
                                                        }
                                                    },
                                                    "id": 4307,
                                                    "indexExpression": {
                                                        "id": 4306,
                                                        "name": "relayManager",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4292,
                                                        "src": "10472:12:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "10457:28:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_RelayHubInfo_$6127_storage_$",
                                                        "typeString": "mapping(address => struct IStakeManager.RelayHubInfo storage ref)"
                                                    }
                                                },
                                                "id": 4310,
                                                "indexExpression": {
                                                    "expression": {
                                                        "id": 4308,
                                                        "name": "msg",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967281,
                                                        "src": "10486:3:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_message",
                                                            "typeString": "msg"
                                                        }
                                                    },
                                                    "id": 4309,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "sender",
                                                    "nodeType": "MemberAccess",
                                                    "src": "10486:10:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "IndexAccess",
                                                "src": "10457:40:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_RelayHubInfo_$6127_storage",
                                                    "typeString": "struct IStakeManager.RelayHubInfo storage ref"
                                                }
                                            },
                                            "id": 4311,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "removalTime",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6126,
                                            "src": "10457:52:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "==",
                                        "rightExpression": {
                                            "expression": {
                                                "arguments": [
                                                    {
                                                        "id": 4314,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "ElementaryTypeNameExpression",
                                                        "src": "10518:7:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_uint256_$",
                                                            "typeString": "type(uint256)"
                                                        },
                                                        "typeName": {
                                                            "id": 4313,
                                                            "name": "uint256",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "10518:7:5",
                                                            "typeDescriptions": {}
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_type$_t_uint256_$",
                                                            "typeString": "type(uint256)"
                                                        }
                                                    ],
                                                    "id": 4312,
                                                    "name": "type",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967269,
                                                    "src": "10513:4:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                                        "typeString": "function () pure"
                                                    }
                                                },
                                                "id": 4315,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "10513:13:5",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_magic_meta_type_t_uint256",
                                                    "typeString": "type(uint256)"
                                                }
                                            },
                                            "id": 4316,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "memberName": "max",
                                            "nodeType": "MemberAccess",
                                            "src": "10513:17:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "10457:73:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "10434:96:5"
                                },
                                {
                                    "assignments": [
                                        4320
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 4320,
                                            "mutability": "mutable",
                                            "name": "isRelayOwner",
                                            "nameLocation": "10545:12:5",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 4353,
                                            "src": "10540:17:5",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            },
                                            "typeName": {
                                                "id": 4319,
                                                "name": "bool",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "10540:4:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 4326,
                                    "initialValue": {
                                        "commonType": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        },
                                        "id": 4325,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "expression": {
                                                "id": 4321,
                                                "name": "info",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4298,
                                                "src": "10560:4:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                    "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                }
                                            },
                                            "id": 4322,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "owner",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6123,
                                            "src": "10560:10:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "==",
                                        "rightExpression": {
                                            "expression": {
                                                "id": 4323,
                                                "name": "msg",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4294967281,
                                                "src": "10574:3:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_magic_message",
                                                    "typeString": "msg"
                                                }
                                            },
                                            "id": 4324,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "sender",
                                            "nodeType": "MemberAccess",
                                            "src": "10574:10:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "src": "10560:24:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "10540:44:5"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                "id": 4330,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "id": 4328,
                                                    "name": "isHubAuthorized",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4304,
                                                    "src": "10602:15:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "||",
                                                "rightExpression": {
                                                    "id": 4329,
                                                    "name": "isRelayOwner",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4320,
                                                    "src": "10621:12:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "src": "10602:31:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "6d7573742062652063616c6c6564206279206f776e6572206f7220687562",
                                                "id": 4331,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "10635:32:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_e51a97fbde765543f86884e45457f0190f0c33e55ccca5e9acd5e8b0a9a6fff9",
                                                    "typeString": "literal_string \"must be called by owner or hub\""
                                                },
                                                "value": "must be called by owner or hub"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_e51a97fbde765543f86884e45457f0190f0c33e55ccca5e9acd5e8b0a9a6fff9",
                                                    "typeString": "literal_string \"must be called by owner or hub\""
                                                }
                                            ],
                                            "id": 4327,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "10594:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 4332,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "10594:74:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4333,
                                    "nodeType": "ExpressionStatement",
                                    "src": "10594:74:5"
                                },
                                {
                                    "expression": {
                                        "id": 4338,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "expression": {
                                                "id": 4334,
                                                "name": "info",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4298,
                                                "src": "10678:4:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                    "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                }
                                            },
                                            "id": 4336,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "abandonedTime",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6116,
                                            "src": "10678:18:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "hexValue": "30",
                                            "id": 4337,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "10699:1:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_rational_0_by_1",
                                                "typeString": "int_const 0"
                                            },
                                            "value": "0"
                                        },
                                        "src": "10678:22:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 4339,
                                    "nodeType": "ExpressionStatement",
                                    "src": "10678:22:5"
                                },
                                {
                                    "expression": {
                                        "id": 4345,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "expression": {
                                                "id": 4340,
                                                "name": "info",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4298,
                                                "src": "10710:4:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                    "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                }
                                            },
                                            "id": 4342,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "keepaliveTime",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6118,
                                            "src": "10710:18:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "expression": {
                                                "id": 4343,
                                                "name": "block",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4294967292,
                                                "src": "10731:5:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_magic_block",
                                                    "typeString": "block"
                                                }
                                            },
                                            "id": 4344,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "timestamp",
                                            "nodeType": "MemberAccess",
                                            "src": "10731:15:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "10710:36:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 4346,
                                    "nodeType": "ExpressionStatement",
                                    "src": "10710:36:5"
                                },
                                {
                                    "eventCall": {
                                        "arguments": [
                                            {
                                                "id": 4348,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4292,
                                                "src": "10782:12:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "expression": {
                                                    "id": 4349,
                                                    "name": "info",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4298,
                                                    "src": "10796:4:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                        "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                    }
                                                },
                                                "id": 4350,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "keepaliveTime",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 6118,
                                                "src": "10796:18:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 4347,
                                            "name": "RelayServerKeepalive",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6096,
                                            "src": "10761:20:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,uint256)"
                                            }
                                        },
                                        "id": 4351,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "10761:54:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4352,
                                    "nodeType": "EmitStatement",
                                    "src": "10756:59:5"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 4290,
                            "nodeType": "StructuredDocumentation",
                            "src": "10261:29:5",
                            "text": "@inheritdoc IStakeManager"
                        },
                        "functionSelector": "46dcbf0b",
                        "id": 4354,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "updateRelayKeepaliveTime",
                        "nameLocation": "10304:24:5",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 4294,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "10360:8:5"
                        },
                        "parameters": {
                            "id": 4293,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4292,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "10337:12:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4354,
                                    "src": "10329:20:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 4291,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "10329:7:5",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "10328:22:5"
                        },
                        "returnParameters": {
                            "id": 4295,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "10369:0:5"
                        },
                        "scope": 4355,
                        "src": "10295:527:5",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    }
                ],
                "scope": 4356,
                "src": "706:10118:5",
                "usedErrors": []
            }
        ],
        "src": "0:10824:5"
    },
    "legacyAST": {
        "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/StakeManager.sol",
        "exportedSymbols": {
            "Address": [
                11486
            ],
            "Context": [
                11508
            ],
            "ERC165": [
                12146
            ],
            "IERC165": [
                12352
            ],
            "IERC20": [
                10849
            ],
            "IERC20Permit": [
                10910
            ],
            "IStakeManager": [
                6284
            ],
            "Ownable": [
                10182
            ],
            "SafeERC20": [
                11191
            ],
            "StakeManager": [
                4355
            ]
        },
        "id": 4356,
        "license": "GPL-3.0-only",
        "nodeType": "SourceUnit",
        "nodes": [
            {
                "id": 3332,
                "literals": [
                    "solidity",
                    "^",
                    "0.8",
                    ".0"
                ],
                "nodeType": "PragmaDirective",
                "src": "0:23:5"
            },
            {
                "id": 3333,
                "literals": [
                    "abicoder",
                    "v2"
                ],
                "nodeType": "PragmaDirective",
                "src": "24:19:5"
            },
            {
                "absolutePath": "@openzeppelin/contracts/access/Ownable.sol",
                "file": "@openzeppelin/contracts/access/Ownable.sol",
                "id": 3334,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 4356,
                "sourceUnit": 10183,
                "src": "123:52:5",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol",
                "file": "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol",
                "id": 3335,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 4356,
                "sourceUnit": 11192,
                "src": "176:65:5",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "@openzeppelin/contracts/utils/introspection/ERC165.sol",
                "file": "@openzeppelin/contracts/utils/introspection/ERC165.sol",
                "id": 3336,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 4356,
                "sourceUnit": 12147,
                "src": "242:64:5",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/interfaces/IStakeManager.sol",
                "file": "./interfaces/IStakeManager.sol",
                "id": 3337,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 4356,
                "sourceUnit": 6285,
                "src": "308:40:5",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "abstract": false,
                "baseContracts": [
                    {
                        "baseName": {
                            "id": 3339,
                            "name": "IStakeManager",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 6284,
                            "src": "731:13:5"
                        },
                        "id": 3340,
                        "nodeType": "InheritanceSpecifier",
                        "src": "731:13:5"
                    },
                    {
                        "baseName": {
                            "id": 3341,
                            "name": "Ownable",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 10182,
                            "src": "746:7:5"
                        },
                        "id": 3342,
                        "nodeType": "InheritanceSpecifier",
                        "src": "746:7:5"
                    },
                    {
                        "baseName": {
                            "id": 3343,
                            "name": "ERC165",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 12146,
                            "src": "755:6:5"
                        },
                        "id": 3344,
                        "nodeType": "InheritanceSpecifier",
                        "src": "755:6:5"
                    }
                ],
                "contractDependencies": [],
                "contractKind": "contract",
                "documentation": {
                    "id": 3338,
                    "nodeType": "StructuredDocumentation",
                    "src": "350:355:5",
                    "text": " @title The StakeManager implementation\n @notice An IStakeManager instance that accepts stakes in any ERC-20 token.\n @notice Single StakeInfo of a single RelayManager can only have one token address assigned to it.\n @notice It cannot be changed after the first time 'stakeForRelayManager' is called as it is equivalent to withdrawal."
                },
                "fullyImplemented": true,
                "id": 4355,
                "linearizedBaseContracts": [
                    4355,
                    12146,
                    10182,
                    11508,
                    6284,
                    12352
                ],
                "name": "StakeManager",
                "nameLocation": "715:12:5",
                "nodeType": "ContractDefinition",
                "nodes": [
                    {
                        "id": 3348,
                        "libraryName": {
                            "id": 3345,
                            "name": "SafeERC20",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 11191,
                            "src": "774:9:5"
                        },
                        "nodeType": "UsingForDirective",
                        "src": "768:27:5",
                        "typeName": {
                            "id": 3347,
                            "nodeType": "UserDefinedTypeName",
                            "pathNode": {
                                "id": 3346,
                                "name": "IERC20",
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 10849,
                                "src": "788:6:5"
                            },
                            "referencedDeclaration": 10849,
                            "src": "788:6:5",
                            "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$10849",
                                "typeString": "contract IERC20"
                            }
                        }
                    },
                    {
                        "baseFunctions": [
                            6283
                        ],
                        "constant": false,
                        "functionSelector": "47116c6e",
                        "id": 3352,
                        "mutability": "mutable",
                        "name": "versionSM",
                        "nameLocation": "824:9:5",
                        "nodeType": "VariableDeclaration",
                        "overrides": {
                            "id": 3350,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "815:8:5"
                        },
                        "scope": 4355,
                        "src": "801:84:5",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string"
                        },
                        "typeName": {
                            "id": 3349,
                            "name": "string",
                            "nodeType": "ElementaryTypeName",
                            "src": "801:6:5",
                            "typeDescriptions": {
                                "typeIdentifier": "t_string_storage_ptr",
                                "typeString": "string"
                            }
                        },
                        "value": {
                            "hexValue": "332e302e302d626574612e332b6f70656e67736e2e7374616b656d616e616765722e697374616b656d616e61676572",
                            "id": 3351,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "836:49:5",
                            "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_bc773edf1efbe7316ae756fc9bf1a90b13a83f1771da440d20beac916ff7aa0a",
                                "typeString": "literal_string \"3.0.0-beta.3+opengsn.stakemanager.istakemanager\""
                            },
                            "value": "3.0.0-beta.3+opengsn.stakemanager.istakemanager"
                        },
                        "visibility": "public"
                    },
                    {
                        "constant": false,
                        "id": 3354,
                        "mutability": "immutable",
                        "name": "maxUnstakeDelay",
                        "nameLocation": "918:15:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 4355,
                        "src": "891:42:5",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                        },
                        "typeName": {
                            "id": 3353,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "891:7:5",
                            "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                            }
                        },
                        "visibility": "internal"
                    },
                    {
                        "constant": false,
                        "id": 3357,
                        "mutability": "mutable",
                        "name": "abandonedRelayServerConfig",
                        "nameLocation": "976:26:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 4355,
                        "src": "940:62:5",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_struct$_AbandonedRelayServerConfig_$6134_storage",
                            "typeString": "struct IStakeManager.AbandonedRelayServerConfig"
                        },
                        "typeName": {
                            "id": 3356,
                            "nodeType": "UserDefinedTypeName",
                            "pathNode": {
                                "id": 3355,
                                "name": "AbandonedRelayServerConfig",
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 6134,
                                "src": "940:26:5"
                            },
                            "referencedDeclaration": 6134,
                            "src": "940:26:5",
                            "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AbandonedRelayServerConfig_$6134_storage_ptr",
                                "typeString": "struct IStakeManager.AbandonedRelayServerConfig"
                            }
                        },
                        "visibility": "internal"
                    },
                    {
                        "constant": false,
                        "id": 3359,
                        "mutability": "mutable",
                        "name": "burnAddress",
                        "nameLocation": "1026:11:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 4355,
                        "src": "1009:28:5",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                        },
                        "typeName": {
                            "id": 3358,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1009:7:5",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                            }
                        },
                        "visibility": "internal"
                    },
                    {
                        "constant": false,
                        "id": 3361,
                        "mutability": "immutable",
                        "name": "creationBlock",
                        "nameLocation": "1070:13:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 4355,
                        "src": "1043:40:5",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                        },
                        "typeName": {
                            "id": 3360,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "1043:7:5",
                            "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                            }
                        },
                        "visibility": "internal"
                    },
                    {
                        "constant": false,
                        "documentation": {
                            "id": 3362,
                            "nodeType": "StructuredDocumentation",
                            "src": "1090:39:5",
                            "text": "maps relay managers to their stakes"
                        },
                        "functionSelector": "16934fc4",
                        "id": 3367,
                        "mutability": "mutable",
                        "name": "stakes",
                        "nameLocation": "1171:6:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 4355,
                        "src": "1134:43:5",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$6124_storage_$",
                            "typeString": "mapping(address => struct IStakeManager.StakeInfo)"
                        },
                        "typeName": {
                            "id": 3366,
                            "keyType": {
                                "id": 3363,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "1142:7:5",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                }
                            },
                            "nodeType": "Mapping",
                            "src": "1134:29:5",
                            "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$6124_storage_$",
                                "typeString": "mapping(address => struct IStakeManager.StakeInfo)"
                            },
                            "valueType": {
                                "id": 3365,
                                "nodeType": "UserDefinedTypeName",
                                "pathNode": {
                                    "id": 3364,
                                    "name": "StakeInfo",
                                    "nodeType": "IdentifierPath",
                                    "referencedDeclaration": 6124,
                                    "src": "1153:9:5"
                                },
                                "referencedDeclaration": 6124,
                                "src": "1153:9:5",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                    "typeString": "struct IStakeManager.StakeInfo"
                                }
                            }
                        },
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            6240
                        ],
                        "body": {
                            "id": 3401,
                            "nodeType": "Block",
                            "src": "1350:169:5",
                            "statements": [
                                {
                                    "assignments": [
                                        3380
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 3380,
                                            "mutability": "mutable",
                                            "name": "isHubAuthorized",
                                            "nameLocation": "1365:15:5",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 3401,
                                            "src": "1360:20:5",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            },
                                            "typeName": {
                                                "id": 3379,
                                                "name": "bool",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "1360:4:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 3394,
                                    "initialValue": {
                                        "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        },
                                        "id": 3393,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "expression": {
                                                "baseExpression": {
                                                    "baseExpression": {
                                                        "id": 3381,
                                                        "name": "authorizedHubs",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3480,
                                                        "src": "1383:14:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_struct$_RelayHubInfo_$6127_storage_$_$",
                                                            "typeString": "mapping(address => mapping(address => struct IStakeManager.RelayHubInfo storage ref))"
                                                        }
                                                    },
                                                    "id": 3383,
                                                    "indexExpression": {
                                                        "id": 3382,
                                                        "name": "relayManager",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3370,
                                                        "src": "1398:12:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "1383:28:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_RelayHubInfo_$6127_storage_$",
                                                        "typeString": "mapping(address => struct IStakeManager.RelayHubInfo storage ref)"
                                                    }
                                                },
                                                "id": 3386,
                                                "indexExpression": {
                                                    "expression": {
                                                        "id": 3384,
                                                        "name": "msg",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967281,
                                                        "src": "1412:3:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_message",
                                                            "typeString": "msg"
                                                        }
                                                    },
                                                    "id": 3385,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "sender",
                                                    "nodeType": "MemberAccess",
                                                    "src": "1412:10:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "IndexAccess",
                                                "src": "1383:40:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_RelayHubInfo_$6127_storage",
                                                    "typeString": "struct IStakeManager.RelayHubInfo storage ref"
                                                }
                                            },
                                            "id": 3387,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "removalTime",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6126,
                                            "src": "1383:52:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "==",
                                        "rightExpression": {
                                            "expression": {
                                                "arguments": [
                                                    {
                                                        "id": 3390,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "ElementaryTypeNameExpression",
                                                        "src": "1444:7:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_uint256_$",
                                                            "typeString": "type(uint256)"
                                                        },
                                                        "typeName": {
                                                            "id": 3389,
                                                            "name": "uint256",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "1444:7:5",
                                                            "typeDescriptions": {}
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_type$_t_uint256_$",
                                                            "typeString": "type(uint256)"
                                                        }
                                                    ],
                                                    "id": 3388,
                                                    "name": "type",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967269,
                                                    "src": "1439:4:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                                        "typeString": "function () pure"
                                                    }
                                                },
                                                "id": 3391,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "1439:13:5",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_magic_meta_type_t_uint256",
                                                    "typeString": "type(uint256)"
                                                }
                                            },
                                            "id": 3392,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "memberName": "max",
                                            "nodeType": "MemberAccess",
                                            "src": "1439:17:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "1383:73:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "1360:96:5"
                                },
                                {
                                    "expression": {
                                        "components": [
                                            {
                                                "baseExpression": {
                                                    "id": 3395,
                                                    "name": "stakes",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3367,
                                                    "src": "1474:6:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$6124_storage_$",
                                                        "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                    }
                                                },
                                                "id": 3397,
                                                "indexExpression": {
                                                    "id": 3396,
                                                    "name": "relayManager",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3370,
                                                    "src": "1481:12:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "IndexAccess",
                                                "src": "1474:20:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$6124_storage",
                                                    "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                }
                                            },
                                            {
                                                "id": 3398,
                                                "name": "isHubAuthorized",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3380,
                                                "src": "1496:15:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            }
                                        ],
                                        "id": 3399,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "1473:39:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_struct$_StakeInfo_$6124_storage_$_t_bool_$",
                                            "typeString": "tuple(struct IStakeManager.StakeInfo storage ref,bool)"
                                        }
                                    },
                                    "functionReturnParameters": 3378,
                                    "id": 3400,
                                    "nodeType": "Return",
                                    "src": "1466:46:5"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 3368,
                            "nodeType": "StructuredDocumentation",
                            "src": "1184:29:5",
                            "text": "@inheritdoc IStakeManager"
                        },
                        "functionSelector": "c3453153",
                        "id": 3402,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getStakeInfo",
                        "nameLocation": "1227:12:5",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 3372,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "1271:8:5"
                        },
                        "parameters": {
                            "id": 3371,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 3370,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "1248:12:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3402,
                                    "src": "1240:20:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 3369,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1240:7:5",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1239:22:5"
                        },
                        "returnParameters": {
                            "id": 3378,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 3375,
                                    "mutability": "mutable",
                                    "name": "stakeInfo",
                                    "nameLocation": "1311:9:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3402,
                                    "src": "1294:26:5",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_StakeInfo_$6124_memory_ptr",
                                        "typeString": "struct IStakeManager.StakeInfo"
                                    },
                                    "typeName": {
                                        "id": 3374,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 3373,
                                            "name": "StakeInfo",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 6124,
                                            "src": "1294:9:5"
                                        },
                                        "referencedDeclaration": 6124,
                                        "src": "1294:9:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                            "typeString": "struct IStakeManager.StakeInfo"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 3377,
                                    "mutability": "mutable",
                                    "name": "isSenderAuthorizedHub",
                                    "nameLocation": "1327:21:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3402,
                                    "src": "1322:26:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 3376,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1322:4:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1293:56:5"
                        },
                        "scope": 4355,
                        "src": "1218:301:5",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            6252
                        ],
                        "body": {
                            "id": 3419,
                            "nodeType": "Block",
                            "src": "1631:85:5",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 3413,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 3411,
                                            "name": "burnAddress",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3359,
                                            "src": "1641:11:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 3412,
                                            "name": "_burnAddress",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3405,
                                            "src": "1655:12:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "src": "1641:26:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "id": 3414,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1641:26:5"
                                },
                                {
                                    "eventCall": {
                                        "arguments": [
                                            {
                                                "id": 3416,
                                                "name": "burnAddress",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3359,
                                                "src": "1697:11:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "id": 3415,
                                            "name": "BurnAddressSet",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6077,
                                            "src": "1682:14:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                                                "typeString": "function (address)"
                                            }
                                        },
                                        "id": 3417,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1682:27:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3418,
                                    "nodeType": "EmitStatement",
                                    "src": "1677:32:5"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 3403,
                            "nodeType": "StructuredDocumentation",
                            "src": "1525:29:5",
                            "text": "@inheritdoc IStakeManager"
                        },
                        "functionSelector": "4b0e7216",
                        "id": 3420,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [
                            {
                                "id": 3409,
                                "kind": "modifierInvocation",
                                "modifierName": {
                                    "id": 3408,
                                    "name": "onlyOwner",
                                    "nodeType": "IdentifierPath",
                                    "referencedDeclaration": 10101,
                                    "src": "1621:9:5"
                                },
                                "nodeType": "ModifierInvocation",
                                "src": "1621:9:5"
                            }
                        ],
                        "name": "setBurnAddress",
                        "nameLocation": "1568:14:5",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 3407,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "1612:8:5"
                        },
                        "parameters": {
                            "id": 3406,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 3405,
                                    "mutability": "mutable",
                                    "name": "_burnAddress",
                                    "nameLocation": "1591:12:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3420,
                                    "src": "1583:20:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 3404,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1583:7:5",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1582:22:5"
                        },
                        "returnParameters": {
                            "id": 3410,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1631:0:5"
                        },
                        "scope": 4355,
                        "src": "1559:157:5",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            6258
                        ],
                        "body": {
                            "id": 3429,
                            "nodeType": "Block",
                            "src": "1823:35:5",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 3427,
                                        "name": "burnAddress",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3359,
                                        "src": "1840:11:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "functionReturnParameters": 3426,
                                    "id": 3428,
                                    "nodeType": "Return",
                                    "src": "1833:18:5"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 3421,
                            "nodeType": "StructuredDocumentation",
                            "src": "1722:29:5",
                            "text": "@inheritdoc IStakeManager"
                        },
                        "functionSelector": "38b39d29",
                        "id": 3430,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getBurnAddress",
                        "nameLocation": "1765:14:5",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 3423,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "1791:8:5"
                        },
                        "parameters": {
                            "id": 3422,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1779:2:5"
                        },
                        "returnParameters": {
                            "id": 3426,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 3425,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3430,
                                    "src": "1814:7:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 3424,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1814:7:5",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1813:9:5"
                        },
                        "scope": 4355,
                        "src": "1756:102:5",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            6264
                        ],
                        "body": {
                            "id": 3450,
                            "nodeType": "Block",
                            "src": "1968:135:5",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 3443,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "expression": {
                                                "id": 3439,
                                                "name": "abandonedRelayServerConfig",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3357,
                                                "src": "1978:26:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_AbandonedRelayServerConfig_$6134_storage",
                                                    "typeString": "struct IStakeManager.AbandonedRelayServerConfig storage ref"
                                                }
                                            },
                                            "id": 3441,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "devAddress",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6129,
                                            "src": "1978:37:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 3442,
                                            "name": "_devAddress",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3433,
                                            "src": "2018:11:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "src": "1978:51:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "id": 3444,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1978:51:5"
                                },
                                {
                                    "eventCall": {
                                        "arguments": [
                                            {
                                                "expression": {
                                                    "id": 3446,
                                                    "name": "abandonedRelayServerConfig",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3357,
                                                    "src": "2058:26:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_AbandonedRelayServerConfig_$6134_storage",
                                                        "typeString": "struct IStakeManager.AbandonedRelayServerConfig storage ref"
                                                    }
                                                },
                                                "id": 3447,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "devAddress",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 6129,
                                                "src": "2058:37:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "id": 3445,
                                            "name": "DevAddressSet",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6082,
                                            "src": "2044:13:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                                                "typeString": "function (address)"
                                            }
                                        },
                                        "id": 3448,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2044:52:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3449,
                                    "nodeType": "EmitStatement",
                                    "src": "2039:57:5"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 3431,
                            "nodeType": "StructuredDocumentation",
                            "src": "1864:29:5",
                            "text": "@inheritdoc IStakeManager"
                        },
                        "functionSelector": "d0d41fe1",
                        "id": 3451,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [
                            {
                                "id": 3437,
                                "kind": "modifierInvocation",
                                "modifierName": {
                                    "id": 3436,
                                    "name": "onlyOwner",
                                    "nodeType": "IdentifierPath",
                                    "referencedDeclaration": 10101,
                                    "src": "1958:9:5"
                                },
                                "nodeType": "ModifierInvocation",
                                "src": "1958:9:5"
                            }
                        ],
                        "name": "setDevAddress",
                        "nameLocation": "1907:13:5",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 3435,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "1949:8:5"
                        },
                        "parameters": {
                            "id": 3434,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 3433,
                                    "mutability": "mutable",
                                    "name": "_devAddress",
                                    "nameLocation": "1929:11:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3451,
                                    "src": "1921:19:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 3432,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1921:7:5",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1920:21:5"
                        },
                        "returnParameters": {
                            "id": 3438,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1968:0:5"
                        },
                        "scope": 4355,
                        "src": "1898:205:5",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            6271
                        ],
                        "body": {
                            "id": 3461,
                            "nodeType": "Block",
                            "src": "2251:50:5",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 3459,
                                        "name": "abandonedRelayServerConfig",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3357,
                                        "src": "2268:26:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_AbandonedRelayServerConfig_$6134_storage",
                                            "typeString": "struct IStakeManager.AbandonedRelayServerConfig storage ref"
                                        }
                                    },
                                    "functionReturnParameters": 3458,
                                    "id": 3460,
                                    "nodeType": "Return",
                                    "src": "2261:33:5"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 3452,
                            "nodeType": "StructuredDocumentation",
                            "src": "2109:29:5",
                            "text": "@inheritdoc IStakeManager"
                        },
                        "functionSelector": "c5f06743",
                        "id": 3462,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getAbandonedRelayServerConfig",
                        "nameLocation": "2152:29:5",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 3454,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "2193:8:5"
                        },
                        "parameters": {
                            "id": 3453,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "2181:2:5"
                        },
                        "returnParameters": {
                            "id": 3458,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 3457,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3462,
                                    "src": "2216:33:5",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_AbandonedRelayServerConfig_$6134_memory_ptr",
                                        "typeString": "struct IStakeManager.AbandonedRelayServerConfig"
                                    },
                                    "typeName": {
                                        "id": 3456,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 3455,
                                            "name": "AbandonedRelayServerConfig",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 6134,
                                            "src": "2216:26:5"
                                        },
                                        "referencedDeclaration": 6134,
                                        "src": "2216:26:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_AbandonedRelayServerConfig_$6134_storage_ptr",
                                            "typeString": "struct IStakeManager.AbandonedRelayServerConfig"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2215:35:5"
                        },
                        "scope": 4355,
                        "src": "2143:158:5",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            6246
                        ],
                        "body": {
                            "id": 3471,
                            "nodeType": "Block",
                            "src": "2412:39:5",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 3469,
                                        "name": "maxUnstakeDelay",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3354,
                                        "src": "2429:15:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "functionReturnParameters": 3468,
                                    "id": 3470,
                                    "nodeType": "Return",
                                    "src": "2422:22:5"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 3463,
                            "nodeType": "StructuredDocumentation",
                            "src": "2307:29:5",
                            "text": "@inheritdoc IStakeManager"
                        },
                        "functionSelector": "afcb7752",
                        "id": 3472,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getMaxUnstakeDelay",
                        "nameLocation": "2350:18:5",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 3465,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "2380:8:5"
                        },
                        "parameters": {
                            "id": 3464,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "2368:2:5"
                        },
                        "returnParameters": {
                            "id": 3468,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 3467,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3472,
                                    "src": "2403:7:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 3466,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2403:7:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2402:9:5"
                        },
                        "scope": 4355,
                        "src": "2341:110:5",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "constant": false,
                        "documentation": {
                            "id": 3473,
                            "nodeType": "StructuredDocumentation",
                            "src": "2457:101:5",
                            "text": "maps relay managers to a map of addressed of their authorized hubs to the information on that hub"
                        },
                        "functionSelector": "7aeb642a",
                        "id": 3480,
                        "mutability": "mutable",
                        "name": "authorizedHubs",
                        "nameLocation": "2623:14:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 4355,
                        "src": "2563:74:5",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_struct$_RelayHubInfo_$6127_storage_$_$",
                            "typeString": "mapping(address => mapping(address => struct IStakeManager.RelayHubInfo))"
                        },
                        "typeName": {
                            "id": 3479,
                            "keyType": {
                                "id": 3474,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "2571:7:5",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                }
                            },
                            "nodeType": "Mapping",
                            "src": "2563:52:5",
                            "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_struct$_RelayHubInfo_$6127_storage_$_$",
                                "typeString": "mapping(address => mapping(address => struct IStakeManager.RelayHubInfo))"
                            },
                            "valueType": {
                                "id": 3478,
                                "keyType": {
                                    "id": 3475,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "2590:7:5",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    }
                                },
                                "nodeType": "Mapping",
                                "src": "2582:32:5",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_RelayHubInfo_$6127_storage_$",
                                    "typeString": "mapping(address => struct IStakeManager.RelayHubInfo)"
                                },
                                "valueType": {
                                    "id": 3477,
                                    "nodeType": "UserDefinedTypeName",
                                    "pathNode": {
                                        "id": 3476,
                                        "name": "RelayHubInfo",
                                        "nodeType": "IdentifierPath",
                                        "referencedDeclaration": 6127,
                                        "src": "2601:12:5"
                                    },
                                    "referencedDeclaration": 6127,
                                    "src": "2601:12:5",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RelayHubInfo_$6127_storage_ptr",
                                        "typeString": "struct IStakeManager.RelayHubInfo"
                                    }
                                }
                            }
                        },
                        "visibility": "public"
                    },
                    {
                        "body": {
                            "id": 3532,
                            "nodeType": "Block",
                            "src": "2825:390:5",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                "id": 3499,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "id": 3494,
                                                    "name": "_burnAddress",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3488,
                                                    "src": "2843:12:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "!=",
                                                "rightExpression": {
                                                    "arguments": [
                                                        {
                                                            "hexValue": "30",
                                                            "id": 3497,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "number",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "2867:1:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_rational_0_by_1",
                                                                "typeString": "int_const 0"
                                                            },
                                                            "value": "0"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_rational_0_by_1",
                                                                "typeString": "int_const 0"
                                                            }
                                                        ],
                                                        "id": 3496,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "ElementaryTypeNameExpression",
                                                        "src": "2859:7:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_address_$",
                                                            "typeString": "type(address)"
                                                        },
                                                        "typeName": {
                                                            "id": 3495,
                                                            "name": "address",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "2859:7:5",
                                                            "typeDescriptions": {}
                                                        }
                                                    },
                                                    "id": 3498,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "typeConversion",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "2859:10:5",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "src": "2843:26:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "7472616e736665727320746f2061646472657373283029206d6179206661696c",
                                                "id": 3500,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "2871:34:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_d2dc68a55195058c4ef5abab06e9a921d08b8ebfa4c5afa7811d1212089e7e32",
                                                    "typeString": "literal_string \"transfers to address(0) may fail\""
                                                },
                                                "value": "transfers to address(0) may fail"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_d2dc68a55195058c4ef5abab06e9a921d08b8ebfa4c5afa7811d1212089e7e32",
                                                    "typeString": "literal_string \"transfers to address(0) may fail\""
                                                }
                                            ],
                                            "id": 3493,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "2835:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 3501,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2835:71:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3502,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2835:71:5"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 3504,
                                                "name": "_burnAddress",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3488,
                                                "src": "2931:12:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "id": 3503,
                                            "name": "setBurnAddress",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3420,
                                            "src": "2916:14:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                                                "typeString": "function (address)"
                                            }
                                        },
                                        "id": 3505,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2916:28:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3506,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2916:28:5"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 3508,
                                                "name": "_devAddress",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3490,
                                                "src": "2968:11:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "id": 3507,
                                            "name": "setDevAddress",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3451,
                                            "src": "2954:13:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                                                "typeString": "function (address)"
                                            }
                                        },
                                        "id": 3509,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2954:26:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3510,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2954:26:5"
                                },
                                {
                                    "expression": {
                                        "id": 3514,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 3511,
                                            "name": "creationBlock",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3361,
                                            "src": "2990:13:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "expression": {
                                                "id": 3512,
                                                "name": "block",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4294967292,
                                                "src": "3006:5:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_magic_block",
                                                    "typeString": "block"
                                                }
                                            },
                                            "id": 3513,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "number",
                                            "nodeType": "MemberAccess",
                                            "src": "3006:12:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "2990:28:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 3515,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2990:28:5"
                                },
                                {
                                    "expression": {
                                        "id": 3518,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 3516,
                                            "name": "maxUnstakeDelay",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3354,
                                            "src": "3028:15:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 3517,
                                            "name": "_maxUnstakeDelay",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3482,
                                            "src": "3046:16:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "3028:34:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 3519,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3028:34:5"
                                },
                                {
                                    "expression": {
                                        "id": 3524,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "expression": {
                                                "id": 3520,
                                                "name": "abandonedRelayServerConfig",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3357,
                                                "src": "3072:26:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_AbandonedRelayServerConfig_$6134_storage",
                                                    "typeString": "struct IStakeManager.AbandonedRelayServerConfig storage ref"
                                                }
                                            },
                                            "id": 3522,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "abandonmentDelay",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6131,
                                            "src": "3072:43:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 3523,
                                            "name": "_abandonmentDelay",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3484,
                                            "src": "3118:17:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "3072:63:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 3525,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3072:63:5"
                                },
                                {
                                    "expression": {
                                        "id": 3530,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "expression": {
                                                "id": 3526,
                                                "name": "abandonedRelayServerConfig",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3357,
                                                "src": "3145:26:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_AbandonedRelayServerConfig_$6134_storage",
                                                    "typeString": "struct IStakeManager.AbandonedRelayServerConfig storage ref"
                                                }
                                            },
                                            "id": 3528,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "escheatmentDelay",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6133,
                                            "src": "3145:43:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 3529,
                                            "name": "_escheatmentDelay",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3486,
                                            "src": "3191:17:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "3145:63:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 3531,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3145:63:5"
                                }
                            ]
                        },
                        "id": 3533,
                        "implemented": true,
                        "kind": "constructor",
                        "modifiers": [],
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 3491,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 3482,
                                    "mutability": "mutable",
                                    "name": "_maxUnstakeDelay",
                                    "nameLocation": "2673:16:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3533,
                                    "src": "2665:24:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 3481,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2665:7:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 3484,
                                    "mutability": "mutable",
                                    "name": "_abandonmentDelay",
                                    "nameLocation": "2707:17:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3533,
                                    "src": "2699:25:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 3483,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2699:7:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 3486,
                                    "mutability": "mutable",
                                    "name": "_escheatmentDelay",
                                    "nameLocation": "2742:17:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3533,
                                    "src": "2734:25:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 3485,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2734:7:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 3488,
                                    "mutability": "mutable",
                                    "name": "_burnAddress",
                                    "nameLocation": "2777:12:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3533,
                                    "src": "2769:20:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 3487,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2769:7:5",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 3490,
                                    "mutability": "mutable",
                                    "name": "_devAddress",
                                    "nameLocation": "2807:11:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3533,
                                    "src": "2799:19:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 3489,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2799:7:5",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2655:169:5"
                        },
                        "returnParameters": {
                            "id": 3492,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "2825:0:5"
                        },
                        "scope": 4355,
                        "src": "2644:571:5",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            12145,
                            12351
                        ],
                        "body": {
                            "id": 3556,
                            "nodeType": "Block",
                            "src": "3357:118:5",
                            "statements": [
                                {
                                    "expression": {
                                        "commonType": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        },
                                        "id": 3554,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "commonType": {
                                                "typeIdentifier": "t_bytes4",
                                                "typeString": "bytes4"
                                            },
                                            "id": 3549,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                                "id": 3544,
                                                "name": "interfaceId",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3536,
                                                "src": "3374:11:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes4",
                                                    "typeString": "bytes4"
                                                }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "==",
                                            "rightExpression": {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "id": 3546,
                                                            "name": "IStakeManager",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 6284,
                                                            "src": "3394:13:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_type$_t_contract$_IStakeManager_$6284_$",
                                                                "typeString": "type(contract IStakeManager)"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_type$_t_contract$_IStakeManager_$6284_$",
                                                                "typeString": "type(contract IStakeManager)"
                                                            }
                                                        ],
                                                        "id": 3545,
                                                        "name": "type",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967269,
                                                        "src": "3389:4:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                                            "typeString": "function () pure"
                                                        }
                                                    },
                                                    "id": 3547,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "3389:19:5",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_meta_type_t_contract$_IStakeManager_$6284",
                                                        "typeString": "type(contract IStakeManager)"
                                                    }
                                                },
                                                "id": 3548,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "memberName": "interfaceId",
                                                "nodeType": "MemberAccess",
                                                "src": "3389:31:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes4",
                                                    "typeString": "bytes4"
                                                }
                                            },
                                            "src": "3374:46:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "||",
                                        "rightExpression": {
                                            "arguments": [
                                                {
                                                    "id": 3552,
                                                    "name": "interfaceId",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3536,
                                                    "src": "3456:11:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes4",
                                                        "typeString": "bytes4"
                                                    }
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_bytes4",
                                                        "typeString": "bytes4"
                                                    }
                                                ],
                                                "expression": {
                                                    "id": 3550,
                                                    "name": "super",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967271,
                                                    "src": "3432:5:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_super$_StakeManager_$4355_$",
                                                        "typeString": "type(contract super StakeManager)"
                                                    }
                                                },
                                                "id": 3551,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "supportsInterface",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 12145,
                                                "src": "3432:23:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_internal_view$_t_bytes4_$returns$_t_bool_$",
                                                    "typeString": "function (bytes4) view returns (bool)"
                                                }
                                            },
                                            "id": 3553,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "3432:36:5",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "src": "3374:94:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "functionReturnParameters": 3543,
                                    "id": 3555,
                                    "nodeType": "Return",
                                    "src": "3367:101:5"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 3534,
                            "nodeType": "StructuredDocumentation",
                            "src": "3221:23:5",
                            "text": "@inheritdoc IERC165"
                        },
                        "functionSelector": "01ffc9a7",
                        "id": 3557,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "supportsInterface",
                        "nameLocation": "3258:17:5",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 3540,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [
                                {
                                    "id": 3538,
                                    "name": "IERC165",
                                    "nodeType": "IdentifierPath",
                                    "referencedDeclaration": 12352,
                                    "src": "3325:7:5"
                                },
                                {
                                    "id": 3539,
                                    "name": "ERC165",
                                    "nodeType": "IdentifierPath",
                                    "referencedDeclaration": 12146,
                                    "src": "3334:6:5"
                                }
                            ],
                            "src": "3316:25:5"
                        },
                        "parameters": {
                            "id": 3537,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 3536,
                                    "mutability": "mutable",
                                    "name": "interfaceId",
                                    "nameLocation": "3283:11:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3557,
                                    "src": "3276:18:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes4",
                                        "typeString": "bytes4"
                                    },
                                    "typeName": {
                                        "id": 3535,
                                        "name": "bytes4",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3276:6:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes4",
                                            "typeString": "bytes4"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3275:20:5"
                        },
                        "returnParameters": {
                            "id": 3543,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 3542,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3557,
                                    "src": "3351:4:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 3541,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3351:4:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3350:6:5"
                        },
                        "scope": 4355,
                        "src": "3249:226:5",
                        "stateMutability": "view",
                        "virtual": true,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            6277
                        ],
                        "body": {
                            "id": 3566,
                            "nodeType": "Block",
                            "src": "3583:37:5",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 3564,
                                        "name": "creationBlock",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3361,
                                        "src": "3600:13:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "functionReturnParameters": 3563,
                                    "id": 3565,
                                    "nodeType": "Return",
                                    "src": "3593:20:5"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 3558,
                            "nodeType": "StructuredDocumentation",
                            "src": "3481:29:5",
                            "text": "@inheritdoc IStakeManager"
                        },
                        "functionSelector": "20ffd56d",
                        "id": 3567,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getCreationBlock",
                        "nameLocation": "3524:16:5",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 3560,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "3552:8:5"
                        },
                        "parameters": {
                            "id": 3559,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "3540:2:5"
                        },
                        "returnParameters": {
                            "id": 3563,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 3562,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3567,
                                    "src": "3575:7:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 3561,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3575:7:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3574:9:5"
                        },
                        "scope": 4355,
                        "src": "3515:105:5",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            6140
                        ],
                        "body": {
                            "id": 3612,
                            "nodeType": "Block",
                            "src": "3723:220:5",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                "id": 3580,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "id": 3575,
                                                    "name": "owner",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3570,
                                                    "src": "3741:5:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "!=",
                                                "rightExpression": {
                                                    "arguments": [
                                                        {
                                                            "hexValue": "30",
                                                            "id": 3578,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "number",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "3758:1:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_rational_0_by_1",
                                                                "typeString": "int_const 0"
                                                            },
                                                            "value": "0"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_rational_0_by_1",
                                                                "typeString": "int_const 0"
                                                            }
                                                        ],
                                                        "id": 3577,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "ElementaryTypeNameExpression",
                                                        "src": "3750:7:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_address_$",
                                                            "typeString": "type(address)"
                                                        },
                                                        "typeName": {
                                                            "id": 3576,
                                                            "name": "address",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "3750:7:5",
                                                            "typeDescriptions": {}
                                                        }
                                                    },
                                                    "id": 3579,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "typeConversion",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "3750:10:5",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "src": "3741:19:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "696e76616c6964206f776e6572",
                                                "id": 3581,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "3762:15:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_6a6ef3f1d272b3597b09ac81b6aef3488a40db4c809157d1f8878aa09a43bb14",
                                                    "typeString": "literal_string \"invalid owner\""
                                                },
                                                "value": "invalid owner"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_6a6ef3f1d272b3597b09ac81b6aef3488a40db4c809157d1f8878aa09a43bb14",
                                                    "typeString": "literal_string \"invalid owner\""
                                                }
                                            ],
                                            "id": 3574,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "3733:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 3582,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3733:45:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3583,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3733:45:5"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                "id": 3594,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "baseExpression": {
                                                            "id": 3585,
                                                            "name": "stakes",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 3367,
                                                            "src": "3796:6:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$6124_storage_$",
                                                                "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                            }
                                                        },
                                                        "id": 3588,
                                                        "indexExpression": {
                                                            "expression": {
                                                                "id": 3586,
                                                                "name": "msg",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 4294967281,
                                                                "src": "3803:3:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_magic_message",
                                                                    "typeString": "msg"
                                                                }
                                                            },
                                                            "id": 3587,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "sender",
                                                            "nodeType": "MemberAccess",
                                                            "src": "3803:10:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        },
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "nodeType": "IndexAccess",
                                                        "src": "3796:18:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_StakeInfo_$6124_storage",
                                                            "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                        }
                                                    },
                                                    "id": 3589,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "owner",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 6123,
                                                    "src": "3796:24:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "==",
                                                "rightExpression": {
                                                    "arguments": [
                                                        {
                                                            "hexValue": "30",
                                                            "id": 3592,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "number",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "3832:1:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_rational_0_by_1",
                                                                "typeString": "int_const 0"
                                                            },
                                                            "value": "0"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_rational_0_by_1",
                                                                "typeString": "int_const 0"
                                                            }
                                                        ],
                                                        "id": 3591,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "ElementaryTypeNameExpression",
                                                        "src": "3824:7:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_address_$",
                                                            "typeString": "type(address)"
                                                        },
                                                        "typeName": {
                                                            "id": 3590,
                                                            "name": "address",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "3824:7:5",
                                                            "typeDescriptions": {}
                                                        }
                                                    },
                                                    "id": 3593,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "typeConversion",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "3824:10:5",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "src": "3796:38:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "616c7265616479206f776e6564",
                                                "id": 3595,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "3836:15:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_46f43e841038f5ff412d64ec61a61aec1d880cade23b15ca2b66ed39d330ab30",
                                                    "typeString": "literal_string \"already owned\""
                                                },
                                                "value": "already owned"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_46f43e841038f5ff412d64ec61a61aec1d880cade23b15ca2b66ed39d330ab30",
                                                    "typeString": "literal_string \"already owned\""
                                                }
                                            ],
                                            "id": 3584,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "3788:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 3596,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3788:64:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3597,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3788:64:5"
                                },
                                {
                                    "expression": {
                                        "id": 3604,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "expression": {
                                                "baseExpression": {
                                                    "id": 3598,
                                                    "name": "stakes",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3367,
                                                    "src": "3862:6:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$6124_storage_$",
                                                        "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                    }
                                                },
                                                "id": 3601,
                                                "indexExpression": {
                                                    "expression": {
                                                        "id": 3599,
                                                        "name": "msg",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967281,
                                                        "src": "3869:3:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_message",
                                                            "typeString": "msg"
                                                        }
                                                    },
                                                    "id": 3600,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "sender",
                                                    "nodeType": "MemberAccess",
                                                    "src": "3869:10:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "IndexAccess",
                                                "src": "3862:18:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$6124_storage",
                                                    "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                }
                                            },
                                            "id": 3602,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "owner",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6123,
                                            "src": "3862:24:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 3603,
                                            "name": "owner",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3570,
                                            "src": "3889:5:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "src": "3862:32:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "id": 3605,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3862:32:5"
                                },
                                {
                                    "eventCall": {
                                        "arguments": [
                                            {
                                                "expression": {
                                                    "id": 3607,
                                                    "name": "msg",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967281,
                                                    "src": "3918:3:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_message",
                                                        "typeString": "msg"
                                                    }
                                                },
                                                "id": 3608,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "sender",
                                                "nodeType": "MemberAccess",
                                                "src": "3918:10:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 3609,
                                                "name": "owner",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3570,
                                                "src": "3930:5:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "id": 3606,
                                            "name": "OwnerSet",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6072,
                                            "src": "3909:8:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                                                "typeString": "function (address,address)"
                                            }
                                        },
                                        "id": 3610,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3909:27:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3611,
                                    "nodeType": "EmitStatement",
                                    "src": "3904:32:5"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 3568,
                            "nodeType": "StructuredDocumentation",
                            "src": "3626:29:5",
                            "text": "@inheritdoc IStakeManager"
                        },
                        "functionSelector": "fece3dd4",
                        "id": 3613,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "setRelayManagerOwner",
                        "nameLocation": "3669:20:5",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 3572,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "3714:8:5"
                        },
                        "parameters": {
                            "id": 3571,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 3570,
                                    "mutability": "mutable",
                                    "name": "owner",
                                    "nameLocation": "3698:5:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3613,
                                    "src": "3690:13:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 3569,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3690:7:5",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3689:15:5"
                        },
                        "returnParameters": {
                            "id": 3573,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "3723:0:5"
                        },
                        "scope": 4355,
                        "src": "3660:283:5",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            6153
                        ],
                        "body": {
                            "id": 3734,
                            "nodeType": "Block",
                            "src": "4134:819:5",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 3636,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "id": 3631,
                                                    "name": "unstakeDelay",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3621,
                                                    "src": "4152:12:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": ">=",
                                                "rightExpression": {
                                                    "expression": {
                                                        "baseExpression": {
                                                            "id": 3632,
                                                            "name": "stakes",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 3367,
                                                            "src": "4168:6:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$6124_storage_$",
                                                                "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                            }
                                                        },
                                                        "id": 3634,
                                                        "indexExpression": {
                                                            "id": 3633,
                                                            "name": "relayManager",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 3619,
                                                            "src": "4175:12:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        },
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "nodeType": "IndexAccess",
                                                        "src": "4168:20:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_StakeInfo_$6124_storage",
                                                            "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                        }
                                                    },
                                                    "id": 3635,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "unstakeDelay",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 6112,
                                                    "src": "4168:33:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "4152:49:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "756e7374616b6544656c61792063616e6e6f7420626520646563726561736564",
                                                "id": 3637,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "4203:34:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_749d5bbd53bace98ba14f95790d5ecf9e4e76bab2242c078da371e573b111366",
                                                    "typeString": "literal_string \"unstakeDelay cannot be decreased\""
                                                },
                                                "value": "unstakeDelay cannot be decreased"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_749d5bbd53bace98ba14f95790d5ecf9e4e76bab2242c078da371e573b111366",
                                                    "typeString": "literal_string \"unstakeDelay cannot be decreased\""
                                                }
                                            ],
                                            "id": 3630,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "4144:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 3638,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4144:94:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3639,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4144:94:5"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 3643,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "id": 3641,
                                                    "name": "unstakeDelay",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3621,
                                                    "src": "4256:12:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "<=",
                                                "rightExpression": {
                                                    "id": 3642,
                                                    "name": "maxUnstakeDelay",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3354,
                                                    "src": "4272:15:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "4256:31:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "756e7374616b6544656c617920746f6f20626967",
                                                "id": 3644,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "4289:22:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_eb6dc4588d5d7660db3d138d0cff4255dfc2b5f417a29a9f214c07e955ffacb1",
                                                    "typeString": "literal_string \"unstakeDelay too big\""
                                                },
                                                "value": "unstakeDelay too big"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_eb6dc4588d5d7660db3d138d0cff4255dfc2b5f417a29a9f214c07e955ffacb1",
                                                    "typeString": "literal_string \"unstakeDelay too big\""
                                                }
                                            ],
                                            "id": 3640,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "4248:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 3645,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4248:64:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3646,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4248:64:5"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_contract$_IERC20_$10849",
                                                    "typeString": "contract IERC20"
                                                },
                                                "id": 3655,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "id": 3648,
                                                    "name": "token",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3617,
                                                    "src": "4330:5:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_contract$_IERC20_$10849",
                                                        "typeString": "contract IERC20"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "!=",
                                                "rightExpression": {
                                                    "arguments": [
                                                        {
                                                            "arguments": [
                                                                {
                                                                    "hexValue": "30",
                                                                    "id": 3652,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "kind": "number",
                                                                    "lValueRequested": false,
                                                                    "nodeType": "Literal",
                                                                    "src": "4354:1:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_rational_0_by_1",
                                                                        "typeString": "int_const 0"
                                                                    },
                                                                    "value": "0"
                                                                }
                                                            ],
                                                            "expression": {
                                                                "argumentTypes": [
                                                                    {
                                                                        "typeIdentifier": "t_rational_0_by_1",
                                                                        "typeString": "int_const 0"
                                                                    }
                                                                ],
                                                                "id": 3651,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "lValueRequested": false,
                                                                "nodeType": "ElementaryTypeNameExpression",
                                                                "src": "4346:7:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_type$_t_address_$",
                                                                    "typeString": "type(address)"
                                                                },
                                                                "typeName": {
                                                                    "id": 3650,
                                                                    "name": "address",
                                                                    "nodeType": "ElementaryTypeName",
                                                                    "src": "4346:7:5",
                                                                    "typeDescriptions": {}
                                                                }
                                                            },
                                                            "id": 3653,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "typeConversion",
                                                            "lValueRequested": false,
                                                            "names": [],
                                                            "nodeType": "FunctionCall",
                                                            "src": "4346:10:5",
                                                            "tryCall": false,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        ],
                                                        "id": 3649,
                                                        "name": "IERC20",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 10849,
                                                        "src": "4339:6:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_contract$_IERC20_$10849_$",
                                                            "typeString": "type(contract IERC20)"
                                                        }
                                                    },
                                                    "id": 3654,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "typeConversion",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "4339:18:5",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_contract$_IERC20_$10849",
                                                        "typeString": "contract IERC20"
                                                    }
                                                },
                                                "src": "4330:27:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "6d7573742073706563696679207374616b6520746f6b656e2061646472657373",
                                                "id": 3656,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "4359:34:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_17d8b08de59e0ecf3937a802652341930b45c73000bafc2ebb6369e674e017b9",
                                                    "typeString": "literal_string \"must specify stake token address\""
                                                },
                                                "value": "must specify stake token address"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_17d8b08de59e0ecf3937a802652341930b45c73000bafc2ebb6369e674e017b9",
                                                    "typeString": "literal_string \"must specify stake token address\""
                                                }
                                            ],
                                            "id": 3647,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "4322:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 3657,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4322:72:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3658,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4322:72:5"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                "id": 3677,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "commonType": {
                                                        "typeIdentifier": "t_contract$_IERC20_$10849",
                                                        "typeString": "contract IERC20"
                                                    },
                                                    "id": 3670,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "expression": {
                                                            "baseExpression": {
                                                                "id": 3660,
                                                                "name": "stakes",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 3367,
                                                                "src": "4425:6:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$6124_storage_$",
                                                                    "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                                }
                                                            },
                                                            "id": 3662,
                                                            "indexExpression": {
                                                                "id": 3661,
                                                                "name": "relayManager",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 3619,
                                                                "src": "4432:12:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "nodeType": "IndexAccess",
                                                            "src": "4425:20:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_StakeInfo_$6124_storage",
                                                                "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                            }
                                                        },
                                                        "id": 3663,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "token",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 6121,
                                                        "src": "4425:26:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_contract$_IERC20_$10849",
                                                            "typeString": "contract IERC20"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "==",
                                                    "rightExpression": {
                                                        "arguments": [
                                                            {
                                                                "arguments": [
                                                                    {
                                                                        "hexValue": "30",
                                                                        "id": 3667,
                                                                        "isConstant": false,
                                                                        "isLValue": false,
                                                                        "isPure": true,
                                                                        "kind": "number",
                                                                        "lValueRequested": false,
                                                                        "nodeType": "Literal",
                                                                        "src": "4470:1:5",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_rational_0_by_1",
                                                                            "typeString": "int_const 0"
                                                                        },
                                                                        "value": "0"
                                                                    }
                                                                ],
                                                                "expression": {
                                                                    "argumentTypes": [
                                                                        {
                                                                            "typeIdentifier": "t_rational_0_by_1",
                                                                            "typeString": "int_const 0"
                                                                        }
                                                                    ],
                                                                    "id": 3666,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "nodeType": "ElementaryTypeNameExpression",
                                                                    "src": "4462:7:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_type$_t_address_$",
                                                                        "typeString": "type(address)"
                                                                    },
                                                                    "typeName": {
                                                                        "id": 3665,
                                                                        "name": "address",
                                                                        "nodeType": "ElementaryTypeName",
                                                                        "src": "4462:7:5",
                                                                        "typeDescriptions": {}
                                                                    }
                                                                },
                                                                "id": 3668,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "kind": "typeConversion",
                                                                "lValueRequested": false,
                                                                "names": [],
                                                                "nodeType": "FunctionCall",
                                                                "src": "4462:10:5",
                                                                "tryCall": false,
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            ],
                                                            "id": 3664,
                                                            "name": "IERC20",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 10849,
                                                            "src": "4455:6:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_type$_t_contract$_IERC20_$10849_$",
                                                                "typeString": "type(contract IERC20)"
                                                            }
                                                        },
                                                        "id": 3669,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "typeConversion",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "4455:18:5",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_contract$_IERC20_$10849",
                                                            "typeString": "contract IERC20"
                                                        }
                                                    },
                                                    "src": "4425:48:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "||",
                                                "rightExpression": {
                                                    "commonType": {
                                                        "typeIdentifier": "t_contract$_IERC20_$10849",
                                                        "typeString": "contract IERC20"
                                                    },
                                                    "id": 3676,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "expression": {
                                                            "baseExpression": {
                                                                "id": 3671,
                                                                "name": "stakes",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 3367,
                                                                "src": "4489:6:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$6124_storage_$",
                                                                    "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                                }
                                                            },
                                                            "id": 3673,
                                                            "indexExpression": {
                                                                "id": 3672,
                                                                "name": "relayManager",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 3619,
                                                                "src": "4496:12:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "nodeType": "IndexAccess",
                                                            "src": "4489:20:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_StakeInfo_$6124_storage",
                                                                "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                            }
                                                        },
                                                        "id": 3674,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "token",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 6121,
                                                        "src": "4489:26:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_contract$_IERC20_$10849",
                                                            "typeString": "contract IERC20"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "==",
                                                    "rightExpression": {
                                                        "id": 3675,
                                                        "name": "token",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3617,
                                                        "src": "4519:5:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_contract$_IERC20_$10849",
                                                            "typeString": "contract IERC20"
                                                        }
                                                    },
                                                    "src": "4489:35:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "src": "4425:99:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "7374616b6520746f6b656e206164647265737320697320696e636f7272656374",
                                                "id": 3678,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "4538:34:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_1cdeb25be65392daf4aa2c8c8fc771c3559b304269152c1b078f61a1d19fb7f1",
                                                    "typeString": "literal_string \"stake token address is incorrect\""
                                                },
                                                "value": "stake token address is incorrect"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_1cdeb25be65392daf4aa2c8c8fc771c3559b304269152c1b078f61a1d19fb7f1",
                                                    "typeString": "literal_string \"stake token address is incorrect\""
                                                }
                                            ],
                                            "id": 3659,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "4404:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 3679,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4404:169:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3680,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4404:169:5"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "expression": {
                                                    "id": 3684,
                                                    "name": "msg",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967281,
                                                    "src": "4606:3:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_message",
                                                        "typeString": "msg"
                                                    }
                                                },
                                                "id": 3685,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "sender",
                                                "nodeType": "MemberAccess",
                                                "src": "4606:10:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "arguments": [
                                                    {
                                                        "id": 3688,
                                                        "name": "this",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967268,
                                                        "src": "4626:4:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_contract$_StakeManager_$4355",
                                                            "typeString": "contract StakeManager"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_contract$_StakeManager_$4355",
                                                            "typeString": "contract StakeManager"
                                                        }
                                                    ],
                                                    "id": 3687,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "ElementaryTypeNameExpression",
                                                    "src": "4618:7:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_address_$",
                                                        "typeString": "type(address)"
                                                    },
                                                    "typeName": {
                                                        "id": 3686,
                                                        "name": "address",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "4618:7:5",
                                                        "typeDescriptions": {}
                                                    }
                                                },
                                                "id": 3689,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "typeConversion",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "4618:13:5",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 3690,
                                                "name": "amount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3623,
                                                "src": "4633:6:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "expression": {
                                                "id": 3681,
                                                "name": "token",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3617,
                                                "src": "4583:5:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_IERC20_$10849",
                                                    "typeString": "contract IERC20"
                                                }
                                            },
                                            "id": 3683,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "safeTransferFrom",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 10968,
                                            "src": "4583:22:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$10849_$_t_address_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$10849_$",
                                                "typeString": "function (contract IERC20,address,address,uint256)"
                                            }
                                        },
                                        "id": 3691,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4583:57:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3692,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4583:57:5"
                                },
                                {
                                    "expression": {
                                        "id": 3698,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "expression": {
                                                "baseExpression": {
                                                    "id": 3693,
                                                    "name": "stakes",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3367,
                                                    "src": "4650:6:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$6124_storage_$",
                                                        "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                    }
                                                },
                                                "id": 3695,
                                                "indexExpression": {
                                                    "id": 3694,
                                                    "name": "relayManager",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3619,
                                                    "src": "4657:12:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "IndexAccess",
                                                "src": "4650:20:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$6124_storage",
                                                    "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                }
                                            },
                                            "id": 3696,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "token",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6121,
                                            "src": "4650:26:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_contract$_IERC20_$10849",
                                                "typeString": "contract IERC20"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 3697,
                                            "name": "token",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3617,
                                            "src": "4679:5:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_contract$_IERC20_$10849",
                                                "typeString": "contract IERC20"
                                            }
                                        },
                                        "src": "4650:34:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IERC20_$10849",
                                            "typeString": "contract IERC20"
                                        }
                                    },
                                    "id": 3699,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4650:34:5"
                                },
                                {
                                    "expression": {
                                        "id": 3705,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "expression": {
                                                "baseExpression": {
                                                    "id": 3700,
                                                    "name": "stakes",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3367,
                                                    "src": "4694:6:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$6124_storage_$",
                                                        "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                    }
                                                },
                                                "id": 3702,
                                                "indexExpression": {
                                                    "id": 3701,
                                                    "name": "relayManager",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3619,
                                                    "src": "4701:12:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "IndexAccess",
                                                "src": "4694:20:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$6124_storage",
                                                    "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                }
                                            },
                                            "id": 3703,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "stake",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6110,
                                            "src": "4694:26:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "+=",
                                        "rightHandSide": {
                                            "id": 3704,
                                            "name": "amount",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3623,
                                            "src": "4724:6:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "4694:36:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 3706,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4694:36:5"
                                },
                                {
                                    "expression": {
                                        "id": 3712,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "expression": {
                                                "baseExpression": {
                                                    "id": 3707,
                                                    "name": "stakes",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3367,
                                                    "src": "4740:6:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$6124_storage_$",
                                                        "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                    }
                                                },
                                                "id": 3709,
                                                "indexExpression": {
                                                    "id": 3708,
                                                    "name": "relayManager",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3619,
                                                    "src": "4747:12:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "IndexAccess",
                                                "src": "4740:20:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$6124_storage",
                                                    "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                }
                                            },
                                            "id": 3710,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "unstakeDelay",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6112,
                                            "src": "4740:33:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 3711,
                                            "name": "unstakeDelay",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3621,
                                            "src": "4776:12:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "4740:48:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 3713,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4740:48:5"
                                },
                                {
                                    "eventCall": {
                                        "arguments": [
                                            {
                                                "id": 3715,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3619,
                                                "src": "4814:12:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "expression": {
                                                    "baseExpression": {
                                                        "id": 3716,
                                                        "name": "stakes",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3367,
                                                        "src": "4828:6:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$6124_storage_$",
                                                            "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                        }
                                                    },
                                                    "id": 3718,
                                                    "indexExpression": {
                                                        "id": 3717,
                                                        "name": "relayManager",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3619,
                                                        "src": "4835:12:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "4828:20:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_StakeInfo_$6124_storage",
                                                        "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                    }
                                                },
                                                "id": 3719,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "owner",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 6123,
                                                "src": "4828:26:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "expression": {
                                                    "baseExpression": {
                                                        "id": 3720,
                                                        "name": "stakes",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3367,
                                                        "src": "4856:6:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$6124_storage_$",
                                                            "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                        }
                                                    },
                                                    "id": 3722,
                                                    "indexExpression": {
                                                        "id": 3721,
                                                        "name": "relayManager",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3619,
                                                        "src": "4863:12:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "4856:20:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_StakeInfo_$6124_storage",
                                                        "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                    }
                                                },
                                                "id": 3723,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "token",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 6121,
                                                "src": "4856:26:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_IERC20_$10849",
                                                    "typeString": "contract IERC20"
                                                }
                                            },
                                            {
                                                "expression": {
                                                    "baseExpression": {
                                                        "id": 3724,
                                                        "name": "stakes",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3367,
                                                        "src": "4884:6:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$6124_storage_$",
                                                            "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                        }
                                                    },
                                                    "id": 3726,
                                                    "indexExpression": {
                                                        "id": 3725,
                                                        "name": "relayManager",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3619,
                                                        "src": "4891:12:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "4884:20:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_StakeInfo_$6124_storage",
                                                        "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                    }
                                                },
                                                "id": 3727,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "stake",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 6110,
                                                "src": "4884:26:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            {
                                                "expression": {
                                                    "baseExpression": {
                                                        "id": 3728,
                                                        "name": "stakes",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3367,
                                                        "src": "4912:6:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$6124_storage_$",
                                                            "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                        }
                                                    },
                                                    "id": 3730,
                                                    "indexExpression": {
                                                        "id": 3729,
                                                        "name": "relayManager",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3619,
                                                        "src": "4919:12:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "4912:20:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_StakeInfo_$6124_storage",
                                                        "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                    }
                                                },
                                                "id": 3731,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "unstakeDelay",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 6112,
                                                "src": "4912:33:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_contract$_IERC20_$10849",
                                                    "typeString": "contract IERC20"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 3714,
                                            "name": "StakeAdded",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6016,
                                            "src": "4803:10:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_contract$_IERC20_$10849_$_t_uint256_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,address,contract IERC20,uint256,uint256)"
                                            }
                                        },
                                        "id": 3732,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4803:143:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3733,
                                    "nodeType": "EmitStatement",
                                    "src": "4798:148:5"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 3614,
                            "nodeType": "StructuredDocumentation",
                            "src": "3949:29:5",
                            "text": "@inheritdoc IStakeManager"
                        },
                        "functionSelector": "14080fac",
                        "id": 3735,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [
                            {
                                "arguments": [
                                    {
                                        "id": 3627,
                                        "name": "relayManager",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3619,
                                        "src": "4120:12:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    }
                                ],
                                "id": 3628,
                                "kind": "modifierInvocation",
                                "modifierName": {
                                    "id": 3626,
                                    "name": "relayOwnerOnly",
                                    "nodeType": "IdentifierPath",
                                    "referencedDeclaration": 3873,
                                    "src": "4105:14:5"
                                },
                                "nodeType": "ModifierInvocation",
                                "src": "4105:28:5"
                            }
                        ],
                        "name": "stakeForRelayManager",
                        "nameLocation": "3992:20:5",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 3625,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "4096:8:5"
                        },
                        "parameters": {
                            "id": 3624,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 3617,
                                    "mutability": "mutable",
                                    "name": "token",
                                    "nameLocation": "4020:5:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3735,
                                    "src": "4013:12:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IERC20_$10849",
                                        "typeString": "contract IERC20"
                                    },
                                    "typeName": {
                                        "id": 3616,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 3615,
                                            "name": "IERC20",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 10849,
                                            "src": "4013:6:5"
                                        },
                                        "referencedDeclaration": 10849,
                                        "src": "4013:6:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IERC20_$10849",
                                            "typeString": "contract IERC20"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 3619,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "4035:12:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3735,
                                    "src": "4027:20:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 3618,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4027:7:5",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 3621,
                                    "mutability": "mutable",
                                    "name": "unstakeDelay",
                                    "nameLocation": "4057:12:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3735,
                                    "src": "4049:20:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 3620,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4049:7:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 3623,
                                    "mutability": "mutable",
                                    "name": "amount",
                                    "nameLocation": "4079:6:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3735,
                                    "src": "4071:14:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 3622,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4071:7:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4012:74:5"
                        },
                        "returnParameters": {
                            "id": 3629,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "4134:0:5"
                        },
                        "scope": 4355,
                        "src": "3983:970:5",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            6159
                        ],
                        "body": {
                            "id": 3778,
                            "nodeType": "Block",
                            "src": "5083:260:5",
                            "statements": [
                                {
                                    "assignments": [
                                        3747
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 3747,
                                            "mutability": "mutable",
                                            "name": "info",
                                            "nameLocation": "5111:4:5",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 3778,
                                            "src": "5093:22:5",
                                            "stateVariable": false,
                                            "storageLocation": "storage",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                "typeString": "struct IStakeManager.StakeInfo"
                                            },
                                            "typeName": {
                                                "id": 3746,
                                                "nodeType": "UserDefinedTypeName",
                                                "pathNode": {
                                                    "id": 3745,
                                                    "name": "StakeInfo",
                                                    "nodeType": "IdentifierPath",
                                                    "referencedDeclaration": 6124,
                                                    "src": "5093:9:5"
                                                },
                                                "referencedDeclaration": 6124,
                                                "src": "5093:9:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                    "typeString": "struct IStakeManager.StakeInfo"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 3751,
                                    "initialValue": {
                                        "baseExpression": {
                                            "id": 3748,
                                            "name": "stakes",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3367,
                                            "src": "5118:6:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$6124_storage_$",
                                                "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                            }
                                        },
                                        "id": 3750,
                                        "indexExpression": {
                                            "id": 3749,
                                            "name": "relayManager",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3738,
                                            "src": "5125:12:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "5118:20:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_StakeInfo_$6124_storage",
                                            "typeString": "struct IStakeManager.StakeInfo storage ref"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "5093:45:5"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 3756,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "id": 3753,
                                                        "name": "info",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3747,
                                                        "src": "5156:4:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                            "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                        }
                                                    },
                                                    "id": 3754,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "withdrawTime",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 6114,
                                                    "src": "5156:17:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "==",
                                                "rightExpression": {
                                                    "hexValue": "30",
                                                    "id": 3755,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "5177:1:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_0_by_1",
                                                        "typeString": "int_const 0"
                                                    },
                                                    "value": "0"
                                                },
                                                "src": "5156:22:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "616c72656164792070656e64696e67",
                                                "id": 3757,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "5180:17:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_3d5ba8f9dacf92169ef29c031ef5f7de7dc5c46d1c2ce428a52e8c4e934a46c0",
                                                    "typeString": "literal_string \"already pending\""
                                                },
                                                "value": "already pending"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_3d5ba8f9dacf92169ef29c031ef5f7de7dc5c46d1c2ce428a52e8c4e934a46c0",
                                                    "typeString": "literal_string \"already pending\""
                                                }
                                            ],
                                            "id": 3752,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "5148:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 3758,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5148:50:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3759,
                                    "nodeType": "ExpressionStatement",
                                    "src": "5148:50:5"
                                },
                                {
                                    "expression": {
                                        "id": 3768,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "expression": {
                                                "id": 3760,
                                                "name": "info",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3747,
                                                "src": "5208:4:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                    "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                }
                                            },
                                            "id": 3762,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "withdrawTime",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6114,
                                            "src": "5208:17:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "id": 3767,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                                "expression": {
                                                    "id": 3763,
                                                    "name": "block",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967292,
                                                    "src": "5228:5:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_block",
                                                        "typeString": "block"
                                                    }
                                                },
                                                "id": 3764,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "timestamp",
                                                "nodeType": "MemberAccess",
                                                "src": "5228:15:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "+",
                                            "rightExpression": {
                                                "expression": {
                                                    "id": 3765,
                                                    "name": "info",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3747,
                                                    "src": "5246:4:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                        "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                    }
                                                },
                                                "id": 3766,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "unstakeDelay",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 6112,
                                                "src": "5246:17:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "src": "5228:35:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "5208:55:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 3769,
                                    "nodeType": "ExpressionStatement",
                                    "src": "5208:55:5"
                                },
                                {
                                    "eventCall": {
                                        "arguments": [
                                            {
                                                "id": 3771,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3738,
                                                "src": "5292:12:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "expression": {
                                                    "id": 3772,
                                                    "name": "msg",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967281,
                                                    "src": "5306:3:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_message",
                                                        "typeString": "msg"
                                                    }
                                                },
                                                "id": 3773,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "sender",
                                                "nodeType": "MemberAccess",
                                                "src": "5306:10:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "expression": {
                                                    "id": 3774,
                                                    "name": "info",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3747,
                                                    "src": "5318:4:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                        "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                    }
                                                },
                                                "id": 3775,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "withdrawTime",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 6114,
                                                "src": "5318:17:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 3770,
                                            "name": "StakeUnlocked",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6025,
                                            "src": "5278:13:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,address,uint256)"
                                            }
                                        },
                                        "id": 3776,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5278:58:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3777,
                                    "nodeType": "EmitStatement",
                                    "src": "5273:63:5"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 3736,
                            "nodeType": "StructuredDocumentation",
                            "src": "4959:29:5",
                            "text": "@inheritdoc IStakeManager"
                        },
                        "functionSelector": "4a1ce599",
                        "id": 3779,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [
                            {
                                "arguments": [
                                    {
                                        "id": 3742,
                                        "name": "relayManager",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3738,
                                        "src": "5069:12:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    }
                                ],
                                "id": 3743,
                                "kind": "modifierInvocation",
                                "modifierName": {
                                    "id": 3741,
                                    "name": "relayOwnerOnly",
                                    "nodeType": "IdentifierPath",
                                    "referencedDeclaration": 3873,
                                    "src": "5054:14:5"
                                },
                                "nodeType": "ModifierInvocation",
                                "src": "5054:28:5"
                            }
                        ],
                        "name": "unlockStake",
                        "nameLocation": "5002:11:5",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 3740,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "5045:8:5"
                        },
                        "parameters": {
                            "id": 3739,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 3738,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "5022:12:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3779,
                                    "src": "5014:20:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 3737,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5014:7:5",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "5013:22:5"
                        },
                        "returnParameters": {
                            "id": 3744,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "5083:0:5"
                        },
                        "scope": 4355,
                        "src": "4993:350:5",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            6165
                        ],
                        "body": {
                            "id": 3849,
                            "nodeType": "Block",
                            "src": "5475:433:5",
                            "statements": [
                                {
                                    "assignments": [
                                        3791
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 3791,
                                            "mutability": "mutable",
                                            "name": "info",
                                            "nameLocation": "5503:4:5",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 3849,
                                            "src": "5485:22:5",
                                            "stateVariable": false,
                                            "storageLocation": "storage",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                "typeString": "struct IStakeManager.StakeInfo"
                                            },
                                            "typeName": {
                                                "id": 3790,
                                                "nodeType": "UserDefinedTypeName",
                                                "pathNode": {
                                                    "id": 3789,
                                                    "name": "StakeInfo",
                                                    "nodeType": "IdentifierPath",
                                                    "referencedDeclaration": 6124,
                                                    "src": "5485:9:5"
                                                },
                                                "referencedDeclaration": 6124,
                                                "src": "5485:9:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                    "typeString": "struct IStakeManager.StakeInfo"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 3795,
                                    "initialValue": {
                                        "baseExpression": {
                                            "id": 3792,
                                            "name": "stakes",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3367,
                                            "src": "5510:6:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$6124_storage_$",
                                                "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                            }
                                        },
                                        "id": 3794,
                                        "indexExpression": {
                                            "id": 3793,
                                            "name": "relayManager",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3782,
                                            "src": "5517:12:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "5510:20:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_StakeInfo_$6124_storage",
                                            "typeString": "struct IStakeManager.StakeInfo storage ref"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "5485:45:5"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 3800,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "id": 3797,
                                                        "name": "info",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3791,
                                                        "src": "5548:4:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                            "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                        }
                                                    },
                                                    "id": 3798,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "withdrawTime",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 6114,
                                                    "src": "5548:17:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": ">",
                                                "rightExpression": {
                                                    "hexValue": "30",
                                                    "id": 3799,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "5568:1:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_0_by_1",
                                                        "typeString": "int_const 0"
                                                    },
                                                    "value": "0"
                                                },
                                                "src": "5548:21:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "5769746864726177616c206973206e6f74207363686564756c6564",
                                                "id": 3801,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "5571:29:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_860678e036832132a2f62fd25edcf808e758d18c8e491de65f9720ad20186939",
                                                    "typeString": "literal_string \"Withdrawal is not scheduled\""
                                                },
                                                "value": "Withdrawal is not scheduled"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_860678e036832132a2f62fd25edcf808e758d18c8e491de65f9720ad20186939",
                                                    "typeString": "literal_string \"Withdrawal is not scheduled\""
                                                }
                                            ],
                                            "id": 3796,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "5540:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 3802,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5540:61:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3803,
                                    "nodeType": "ExpressionStatement",
                                    "src": "5540:61:5"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 3809,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "id": 3805,
                                                        "name": "info",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3791,
                                                        "src": "5619:4:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                            "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                        }
                                                    },
                                                    "id": 3806,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "withdrawTime",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 6114,
                                                    "src": "5619:17:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "<=",
                                                "rightExpression": {
                                                    "expression": {
                                                        "id": 3807,
                                                        "name": "block",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967292,
                                                        "src": "5640:5:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_block",
                                                            "typeString": "block"
                                                        }
                                                    },
                                                    "id": 3808,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "timestamp",
                                                    "nodeType": "MemberAccess",
                                                    "src": "5640:15:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "5619:36:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "5769746864726177616c206973206e6f7420647565",
                                                "id": 3810,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "5657:23:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_46cbffc6f5f26c20016abce85a0f05559724f8ec834b994ca7d9b2a2d9539ce2",
                                                    "typeString": "literal_string \"Withdrawal is not due\""
                                                },
                                                "value": "Withdrawal is not due"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_46cbffc6f5f26c20016abce85a0f05559724f8ec834b994ca7d9b2a2d9539ce2",
                                                    "typeString": "literal_string \"Withdrawal is not due\""
                                                }
                                            ],
                                            "id": 3804,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "5611:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 3811,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5611:70:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3812,
                                    "nodeType": "ExpressionStatement",
                                    "src": "5611:70:5"
                                },
                                {
                                    "assignments": [
                                        3814
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 3814,
                                            "mutability": "mutable",
                                            "name": "amount",
                                            "nameLocation": "5699:6:5",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 3849,
                                            "src": "5691:14:5",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 3813,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "5691:7:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 3817,
                                    "initialValue": {
                                        "expression": {
                                            "id": 3815,
                                            "name": "info",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3791,
                                            "src": "5708:4:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                            }
                                        },
                                        "id": 3816,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "stake",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 6110,
                                        "src": "5708:10:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "5691:27:5"
                                },
                                {
                                    "expression": {
                                        "id": 3822,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "expression": {
                                                "id": 3818,
                                                "name": "info",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3791,
                                                "src": "5728:4:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                    "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                }
                                            },
                                            "id": 3820,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "stake",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6110,
                                            "src": "5728:10:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "hexValue": "30",
                                            "id": 3821,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "5741:1:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_rational_0_by_1",
                                                "typeString": "int_const 0"
                                            },
                                            "value": "0"
                                        },
                                        "src": "5728:14:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 3823,
                                    "nodeType": "ExpressionStatement",
                                    "src": "5728:14:5"
                                },
                                {
                                    "expression": {
                                        "id": 3828,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "expression": {
                                                "id": 3824,
                                                "name": "info",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3791,
                                                "src": "5752:4:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                    "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                }
                                            },
                                            "id": 3826,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "withdrawTime",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6114,
                                            "src": "5752:17:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "hexValue": "30",
                                            "id": 3827,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "5772:1:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_rational_0_by_1",
                                                "typeString": "int_const 0"
                                            },
                                            "value": "0"
                                        },
                                        "src": "5752:21:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 3829,
                                    "nodeType": "ExpressionStatement",
                                    "src": "5752:21:5"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "expression": {
                                                    "id": 3835,
                                                    "name": "msg",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967281,
                                                    "src": "5807:3:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_message",
                                                        "typeString": "msg"
                                                    }
                                                },
                                                "id": 3836,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "sender",
                                                "nodeType": "MemberAccess",
                                                "src": "5807:10:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 3837,
                                                "name": "amount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3814,
                                                "src": "5819:6:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "expression": {
                                                "expression": {
                                                    "id": 3830,
                                                    "name": "info",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3791,
                                                    "src": "5783:4:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                        "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                    }
                                                },
                                                "id": 3833,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "token",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 6121,
                                                "src": "5783:10:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_IERC20_$10849",
                                                    "typeString": "contract IERC20"
                                                }
                                            },
                                            "id": 3834,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "safeTransfer",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 10942,
                                            "src": "5783:23:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$10849_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$10849_$",
                                                "typeString": "function (contract IERC20,address,uint256)"
                                            }
                                        },
                                        "id": 3838,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5783:43:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3839,
                                    "nodeType": "ExpressionStatement",
                                    "src": "5783:43:5"
                                },
                                {
                                    "eventCall": {
                                        "arguments": [
                                            {
                                                "id": 3841,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3782,
                                                "src": "5856:12:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "expression": {
                                                    "id": 3842,
                                                    "name": "msg",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967281,
                                                    "src": "5870:3:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_message",
                                                        "typeString": "msg"
                                                    }
                                                },
                                                "id": 3843,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "sender",
                                                "nodeType": "MemberAccess",
                                                "src": "5870:10:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "expression": {
                                                    "id": 3844,
                                                    "name": "info",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3791,
                                                    "src": "5882:4:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                        "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                    }
                                                },
                                                "id": 3845,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "token",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 6121,
                                                "src": "5882:10:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_IERC20_$10849",
                                                    "typeString": "contract IERC20"
                                                }
                                            },
                                            {
                                                "id": 3846,
                                                "name": "amount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3814,
                                                "src": "5894:6:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_contract$_IERC20_$10849",
                                                    "typeString": "contract IERC20"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 3840,
                                            "name": "StakeWithdrawn",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6037,
                                            "src": "5841:14:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_contract$_IERC20_$10849_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,address,contract IERC20,uint256)"
                                            }
                                        },
                                        "id": 3847,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5841:60:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3848,
                                    "nodeType": "EmitStatement",
                                    "src": "5836:65:5"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 3780,
                            "nodeType": "StructuredDocumentation",
                            "src": "5349:29:5",
                            "text": "@inheritdoc IStakeManager"
                        },
                        "functionSelector": "c23a5cea",
                        "id": 3850,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [
                            {
                                "arguments": [
                                    {
                                        "id": 3786,
                                        "name": "relayManager",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3782,
                                        "src": "5461:12:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    }
                                ],
                                "id": 3787,
                                "kind": "modifierInvocation",
                                "modifierName": {
                                    "id": 3785,
                                    "name": "relayOwnerOnly",
                                    "nodeType": "IdentifierPath",
                                    "referencedDeclaration": 3873,
                                    "src": "5446:14:5"
                                },
                                "nodeType": "ModifierInvocation",
                                "src": "5446:28:5"
                            }
                        ],
                        "name": "withdrawStake",
                        "nameLocation": "5392:13:5",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 3784,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "5437:8:5"
                        },
                        "parameters": {
                            "id": 3783,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 3782,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "5414:12:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3850,
                                    "src": "5406:20:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 3781,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5406:7:5",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "5405:22:5"
                        },
                        "returnParameters": {
                            "id": 3788,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "5475:0:5"
                        },
                        "scope": 4355,
                        "src": "5383:525:5",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "body": {
                            "id": 3872,
                            "nodeType": "Block",
                            "src": "6060:129:5",
                            "statements": [
                                {
                                    "assignments": [
                                        3857
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 3857,
                                            "mutability": "mutable",
                                            "name": "info",
                                            "nameLocation": "6088:4:5",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 3872,
                                            "src": "6070:22:5",
                                            "stateVariable": false,
                                            "storageLocation": "storage",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                "typeString": "struct IStakeManager.StakeInfo"
                                            },
                                            "typeName": {
                                                "id": 3856,
                                                "nodeType": "UserDefinedTypeName",
                                                "pathNode": {
                                                    "id": 3855,
                                                    "name": "StakeInfo",
                                                    "nodeType": "IdentifierPath",
                                                    "referencedDeclaration": 6124,
                                                    "src": "6070:9:5"
                                                },
                                                "referencedDeclaration": 6124,
                                                "src": "6070:9:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                    "typeString": "struct IStakeManager.StakeInfo"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 3861,
                                    "initialValue": {
                                        "baseExpression": {
                                            "id": 3858,
                                            "name": "stakes",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3367,
                                            "src": "6095:6:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$6124_storage_$",
                                                "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                            }
                                        },
                                        "id": 3860,
                                        "indexExpression": {
                                            "id": 3859,
                                            "name": "relayManager",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3853,
                                            "src": "6102:12:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "6095:20:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_StakeInfo_$6124_storage",
                                            "typeString": "struct IStakeManager.StakeInfo storage ref"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "6070:45:5"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                "id": 3867,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "id": 3863,
                                                        "name": "info",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3857,
                                                        "src": "6133:4:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                            "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                        }
                                                    },
                                                    "id": 3864,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "owner",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 6123,
                                                    "src": "6133:10:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "==",
                                                "rightExpression": {
                                                    "expression": {
                                                        "id": 3865,
                                                        "name": "msg",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967281,
                                                        "src": "6147:3:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_message",
                                                            "typeString": "msg"
                                                        }
                                                    },
                                                    "id": 3866,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "sender",
                                                    "nodeType": "MemberAccess",
                                                    "src": "6147:10:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "src": "6133:24:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "6e6f74206f776e6572",
                                                "id": 3868,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "6159:11:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_f2881edc58d5a08d0243d7f8afdab31d949d85825e628e4b88558657a031f74e",
                                                    "typeString": "literal_string \"not owner\""
                                                },
                                                "value": "not owner"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_f2881edc58d5a08d0243d7f8afdab31d949d85825e628e4b88558657a031f74e",
                                                    "typeString": "literal_string \"not owner\""
                                                }
                                            ],
                                            "id": 3862,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "6125:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 3869,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "6125:46:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3870,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6125:46:5"
                                },
                                {
                                    "id": 3871,
                                    "nodeType": "PlaceholderStatement",
                                    "src": "6181:1:5"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 3851,
                            "nodeType": "StructuredDocumentation",
                            "src": "5914:94:5",
                            "text": "@notice Prevents any address other than a registered Relay Owner from calling this method."
                        },
                        "id": 3873,
                        "name": "relayOwnerOnly",
                        "nameLocation": "6022:14:5",
                        "nodeType": "ModifierDefinition",
                        "parameters": {
                            "id": 3854,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 3853,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "6046:12:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3873,
                                    "src": "6038:20:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 3852,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6038:7:5",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "6037:22:5"
                        },
                        "src": "6013:176:5",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 3896,
                            "nodeType": "Block",
                            "src": "6320:129:5",
                            "statements": [
                                {
                                    "assignments": [
                                        3878
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 3878,
                                            "mutability": "mutable",
                                            "name": "info",
                                            "nameLocation": "6348:4:5",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 3896,
                                            "src": "6330:22:5",
                                            "stateVariable": false,
                                            "storageLocation": "storage",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                "typeString": "struct IStakeManager.StakeInfo"
                                            },
                                            "typeName": {
                                                "id": 3877,
                                                "nodeType": "UserDefinedTypeName",
                                                "pathNode": {
                                                    "id": 3876,
                                                    "name": "StakeInfo",
                                                    "nodeType": "IdentifierPath",
                                                    "referencedDeclaration": 6124,
                                                    "src": "6330:9:5"
                                                },
                                                "referencedDeclaration": 6124,
                                                "src": "6330:9:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                    "typeString": "struct IStakeManager.StakeInfo"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 3883,
                                    "initialValue": {
                                        "baseExpression": {
                                            "id": 3879,
                                            "name": "stakes",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3367,
                                            "src": "6355:6:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$6124_storage_$",
                                                "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                            }
                                        },
                                        "id": 3882,
                                        "indexExpression": {
                                            "expression": {
                                                "id": 3880,
                                                "name": "msg",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4294967281,
                                                "src": "6362:3:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_magic_message",
                                                    "typeString": "msg"
                                                }
                                            },
                                            "id": 3881,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "sender",
                                            "nodeType": "MemberAccess",
                                            "src": "6362:10:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "6355:18:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_StakeInfo_$6124_storage",
                                            "typeString": "struct IStakeManager.StakeInfo storage ref"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "6330:43:5"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                "id": 3891,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "id": 3885,
                                                        "name": "info",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3878,
                                                        "src": "6391:4:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                            "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                        }
                                                    },
                                                    "id": 3886,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "owner",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 6123,
                                                    "src": "6391:10:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "!=",
                                                "rightExpression": {
                                                    "arguments": [
                                                        {
                                                            "hexValue": "30",
                                                            "id": 3889,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "number",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "6413:1:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_rational_0_by_1",
                                                                "typeString": "int_const 0"
                                                            },
                                                            "value": "0"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_rational_0_by_1",
                                                                "typeString": "int_const 0"
                                                            }
                                                        ],
                                                        "id": 3888,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "ElementaryTypeNameExpression",
                                                        "src": "6405:7:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_address_$",
                                                            "typeString": "type(address)"
                                                        },
                                                        "typeName": {
                                                            "id": 3887,
                                                            "name": "address",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "6405:7:5",
                                                            "typeDescriptions": {}
                                                        }
                                                    },
                                                    "id": 3890,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "typeConversion",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "6405:10:5",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "src": "6391:24:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "6e6f74206d616e61676572",
                                                "id": 3892,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "6417:13:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_ee7b04b266f275ae66a2fddcbfef24d4ec3a503d9843c534a382f12477498d38",
                                                    "typeString": "literal_string \"not manager\""
                                                },
                                                "value": "not manager"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_ee7b04b266f275ae66a2fddcbfef24d4ec3a503d9843c534a382f12477498d38",
                                                    "typeString": "literal_string \"not manager\""
                                                }
                                            ],
                                            "id": 3884,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "6383:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 3893,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "6383:48:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3894,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6383:48:5"
                                },
                                {
                                    "id": 3895,
                                    "nodeType": "PlaceholderStatement",
                                    "src": "6441:1:5"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 3874,
                            "nodeType": "StructuredDocumentation",
                            "src": "6195:96:5",
                            "text": "@notice Prevents any address other than a registered Relay Manager from calling this method."
                        },
                        "id": 3897,
                        "name": "managerOnly",
                        "nameLocation": "6305:11:5",
                        "nodeType": "ModifierDefinition",
                        "parameters": {
                            "id": 3875,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "6317:2:5"
                        },
                        "src": "6296:153:5",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "baseFunctions": [
                            6173
                        ],
                        "body": {
                            "id": 3914,
                            "nodeType": "Block",
                            "src": "6605:54:5",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 3910,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3900,
                                                "src": "6629:12:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 3911,
                                                "name": "relayHub",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3902,
                                                "src": "6643:8:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "id": 3909,
                                            "name": "_authorizeHub",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3957,
                                            "src": "6615:13:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$",
                                                "typeString": "function (address,address)"
                                            }
                                        },
                                        "id": 3912,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "6615:37:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3913,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6615:37:5"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 3898,
                            "nodeType": "StructuredDocumentation",
                            "src": "6455:29:5",
                            "text": "@inheritdoc IStakeManager"
                        },
                        "functionSelector": "7835d296",
                        "id": 3915,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [
                            {
                                "arguments": [
                                    {
                                        "id": 3905,
                                        "name": "relayManager",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3900,
                                        "src": "6582:12:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    }
                                ],
                                "id": 3906,
                                "kind": "modifierInvocation",
                                "modifierName": {
                                    "id": 3904,
                                    "name": "relayOwnerOnly",
                                    "nodeType": "IdentifierPath",
                                    "referencedDeclaration": 3873,
                                    "src": "6567:14:5"
                                },
                                "nodeType": "ModifierInvocation",
                                "src": "6567:28:5"
                            }
                        ],
                        "name": "authorizeHubByOwner",
                        "nameLocation": "6498:19:5",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 3907,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "6596:8:5"
                        },
                        "parameters": {
                            "id": 3903,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 3900,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "6526:12:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3915,
                                    "src": "6518:20:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 3899,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6518:7:5",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 3902,
                                    "mutability": "mutable",
                                    "name": "relayHub",
                                    "nameLocation": "6548:8:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3915,
                                    "src": "6540:16:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 3901,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6540:7:5",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "6517:40:5"
                        },
                        "returnParameters": {
                            "id": 3908,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "6605:0:5"
                        },
                        "scope": 4355,
                        "src": "6489:170:5",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            6179
                        ],
                        "body": {
                            "id": 3930,
                            "nodeType": "Block",
                            "src": "6778:52:5",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "expression": {
                                                    "id": 3925,
                                                    "name": "msg",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967281,
                                                    "src": "6802:3:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_message",
                                                        "typeString": "msg"
                                                    }
                                                },
                                                "id": 3926,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "sender",
                                                "nodeType": "MemberAccess",
                                                "src": "6802:10:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 3927,
                                                "name": "relayHub",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3918,
                                                "src": "6814:8:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "id": 3924,
                                            "name": "_authorizeHub",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3957,
                                            "src": "6788:13:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$",
                                                "typeString": "function (address,address)"
                                            }
                                        },
                                        "id": 3928,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "6788:35:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3929,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6788:35:5"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 3916,
                            "nodeType": "StructuredDocumentation",
                            "src": "6665:29:5",
                            "text": "@inheritdoc IStakeManager"
                        },
                        "functionSelector": "d48a9d43",
                        "id": 3931,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [
                            {
                                "id": 3921,
                                "kind": "modifierInvocation",
                                "modifierName": {
                                    "id": 3920,
                                    "name": "managerOnly",
                                    "nodeType": "IdentifierPath",
                                    "referencedDeclaration": 3897,
                                    "src": "6757:11:5"
                                },
                                "nodeType": "ModifierInvocation",
                                "src": "6757:11:5"
                            }
                        ],
                        "name": "authorizeHubByManager",
                        "nameLocation": "6708:21:5",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 3922,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "6769:8:5"
                        },
                        "parameters": {
                            "id": 3919,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 3918,
                                    "mutability": "mutable",
                                    "name": "relayHub",
                                    "nameLocation": "6738:8:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3931,
                                    "src": "6730:16:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 3917,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6730:7:5",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "6729:18:5"
                        },
                        "returnParameters": {
                            "id": 3923,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "6778:0:5"
                        },
                        "scope": 4355,
                        "src": "6699:131:5",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "body": {
                            "id": 3956,
                            "nodeType": "Block",
                            "src": "6908:139:5",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 3949,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "expression": {
                                                "baseExpression": {
                                                    "baseExpression": {
                                                        "id": 3938,
                                                        "name": "authorizedHubs",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3480,
                                                        "src": "6918:14:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_struct$_RelayHubInfo_$6127_storage_$_$",
                                                            "typeString": "mapping(address => mapping(address => struct IStakeManager.RelayHubInfo storage ref))"
                                                        }
                                                    },
                                                    "id": 3941,
                                                    "indexExpression": {
                                                        "id": 3939,
                                                        "name": "relayManager",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3933,
                                                        "src": "6933:12:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "6918:28:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_RelayHubInfo_$6127_storage_$",
                                                        "typeString": "mapping(address => struct IStakeManager.RelayHubInfo storage ref)"
                                                    }
                                                },
                                                "id": 3942,
                                                "indexExpression": {
                                                    "id": 3940,
                                                    "name": "relayHub",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3935,
                                                    "src": "6947:8:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "IndexAccess",
                                                "src": "6918:38:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_RelayHubInfo_$6127_storage",
                                                    "typeString": "struct IStakeManager.RelayHubInfo storage ref"
                                                }
                                            },
                                            "id": 3943,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "removalTime",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6126,
                                            "src": "6918:50:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "expression": {
                                                "arguments": [
                                                    {
                                                        "id": 3946,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "ElementaryTypeNameExpression",
                                                        "src": "6976:7:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_uint256_$",
                                                            "typeString": "type(uint256)"
                                                        },
                                                        "typeName": {
                                                            "id": 3945,
                                                            "name": "uint256",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "6976:7:5",
                                                            "typeDescriptions": {}
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_type$_t_uint256_$",
                                                            "typeString": "type(uint256)"
                                                        }
                                                    ],
                                                    "id": 3944,
                                                    "name": "type",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967269,
                                                    "src": "6971:4:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                                        "typeString": "function () pure"
                                                    }
                                                },
                                                "id": 3947,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "6971:13:5",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_magic_meta_type_t_uint256",
                                                    "typeString": "type(uint256)"
                                                }
                                            },
                                            "id": 3948,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "memberName": "max",
                                            "nodeType": "MemberAccess",
                                            "src": "6971:17:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "6918:70:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 3950,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6918:70:5"
                                },
                                {
                                    "eventCall": {
                                        "arguments": [
                                            {
                                                "id": 3952,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3933,
                                                "src": "7017:12:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 3953,
                                                "name": "relayHub",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3935,
                                                "src": "7031:8:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "id": 3951,
                                            "name": "HubAuthorized",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6056,
                                            "src": "7003:13:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                                                "typeString": "function (address,address)"
                                            }
                                        },
                                        "id": 3954,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "7003:37:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3955,
                                    "nodeType": "EmitStatement",
                                    "src": "6998:42:5"
                                }
                            ]
                        },
                        "id": 3957,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "_authorizeHub",
                        "nameLocation": "6845:13:5",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 3936,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 3933,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "6867:12:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3957,
                                    "src": "6859:20:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 3932,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6859:7:5",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 3935,
                                    "mutability": "mutable",
                                    "name": "relayHub",
                                    "nameLocation": "6889:8:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3957,
                                    "src": "6881:16:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 3934,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6881:7:5",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "6858:40:5"
                        },
                        "returnParameters": {
                            "id": 3937,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "6908:0:5"
                        },
                        "scope": 4355,
                        "src": "6836:211:5",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "baseFunctions": [
                            6187
                        ],
                        "body": {
                            "id": 3974,
                            "nodeType": "Block",
                            "src": "7205:56:5",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 3970,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3960,
                                                "src": "7231:12:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 3971,
                                                "name": "relayHub",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3962,
                                                "src": "7245:8:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "id": 3969,
                                            "name": "_unauthorizeHub",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4039,
                                            "src": "7215:15:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$",
                                                "typeString": "function (address,address)"
                                            }
                                        },
                                        "id": 3972,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "7215:39:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3973,
                                    "nodeType": "ExpressionStatement",
                                    "src": "7215:39:5"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 3958,
                            "nodeType": "StructuredDocumentation",
                            "src": "7053:29:5",
                            "text": "@inheritdoc IStakeManager"
                        },
                        "functionSelector": "f48f8ac7",
                        "id": 3975,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [
                            {
                                "arguments": [
                                    {
                                        "id": 3966,
                                        "name": "relayManager",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3960,
                                        "src": "7191:12:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    }
                                ],
                                "id": 3967,
                                "kind": "modifierInvocation",
                                "modifierName": {
                                    "id": 3965,
                                    "name": "relayOwnerOnly",
                                    "nodeType": "IdentifierPath",
                                    "referencedDeclaration": 3873,
                                    "src": "7176:14:5"
                                },
                                "nodeType": "ModifierInvocation",
                                "src": "7176:28:5"
                            }
                        ],
                        "name": "unauthorizeHubByOwner",
                        "nameLocation": "7096:21:5",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 3964,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "7167:8:5"
                        },
                        "parameters": {
                            "id": 3963,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 3960,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "7126:12:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3975,
                                    "src": "7118:20:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 3959,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "7118:7:5",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 3962,
                                    "mutability": "mutable",
                                    "name": "relayHub",
                                    "nameLocation": "7148:8:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3975,
                                    "src": "7140:16:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 3961,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "7140:7:5",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "7117:40:5"
                        },
                        "returnParameters": {
                            "id": 3968,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "7205:0:5"
                        },
                        "scope": 4355,
                        "src": "7087:174:5",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            6193
                        ],
                        "body": {
                            "id": 3990,
                            "nodeType": "Block",
                            "src": "7382:54:5",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "expression": {
                                                    "id": 3985,
                                                    "name": "msg",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967281,
                                                    "src": "7408:3:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_message",
                                                        "typeString": "msg"
                                                    }
                                                },
                                                "id": 3986,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "sender",
                                                "nodeType": "MemberAccess",
                                                "src": "7408:10:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 3987,
                                                "name": "relayHub",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3978,
                                                "src": "7420:8:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "id": 3984,
                                            "name": "_unauthorizeHub",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4039,
                                            "src": "7392:15:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$",
                                                "typeString": "function (address,address)"
                                            }
                                        },
                                        "id": 3988,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "7392:37:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3989,
                                    "nodeType": "ExpressionStatement",
                                    "src": "7392:37:5"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 3976,
                            "nodeType": "StructuredDocumentation",
                            "src": "7267:29:5",
                            "text": "@inheritdoc IStakeManager"
                        },
                        "functionSelector": "f9bce311",
                        "id": 3991,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [
                            {
                                "id": 3982,
                                "kind": "modifierInvocation",
                                "modifierName": {
                                    "id": 3981,
                                    "name": "managerOnly",
                                    "nodeType": "IdentifierPath",
                                    "referencedDeclaration": 3897,
                                    "src": "7370:11:5"
                                },
                                "nodeType": "ModifierInvocation",
                                "src": "7370:11:5"
                            }
                        ],
                        "name": "unauthorizeHubByManager",
                        "nameLocation": "7310:23:5",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 3980,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "7361:8:5"
                        },
                        "parameters": {
                            "id": 3979,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 3978,
                                    "mutability": "mutable",
                                    "name": "relayHub",
                                    "nameLocation": "7342:8:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3991,
                                    "src": "7334:16:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 3977,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "7334:7:5",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "7333:18:5"
                        },
                        "returnParameters": {
                            "id": 3983,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "7382:0:5"
                        },
                        "scope": 4355,
                        "src": "7301:135:5",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "body": {
                            "id": 4038,
                            "nodeType": "Block",
                            "src": "7516:325:5",
                            "statements": [
                                {
                                    "assignments": [
                                        4000
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 4000,
                                            "mutability": "mutable",
                                            "name": "hubInfo",
                                            "nameLocation": "7547:7:5",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 4038,
                                            "src": "7526:28:5",
                                            "stateVariable": false,
                                            "storageLocation": "storage",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_RelayHubInfo_$6127_storage_ptr",
                                                "typeString": "struct IStakeManager.RelayHubInfo"
                                            },
                                            "typeName": {
                                                "id": 3999,
                                                "nodeType": "UserDefinedTypeName",
                                                "pathNode": {
                                                    "id": 3998,
                                                    "name": "RelayHubInfo",
                                                    "nodeType": "IdentifierPath",
                                                    "referencedDeclaration": 6127,
                                                    "src": "7526:12:5"
                                                },
                                                "referencedDeclaration": 6127,
                                                "src": "7526:12:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_RelayHubInfo_$6127_storage_ptr",
                                                    "typeString": "struct IStakeManager.RelayHubInfo"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 4006,
                                    "initialValue": {
                                        "baseExpression": {
                                            "baseExpression": {
                                                "id": 4001,
                                                "name": "authorizedHubs",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3480,
                                                "src": "7557:14:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_struct$_RelayHubInfo_$6127_storage_$_$",
                                                    "typeString": "mapping(address => mapping(address => struct IStakeManager.RelayHubInfo storage ref))"
                                                }
                                            },
                                            "id": 4003,
                                            "indexExpression": {
                                                "id": 4002,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3993,
                                                "src": "7572:12:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "7557:28:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_RelayHubInfo_$6127_storage_$",
                                                "typeString": "mapping(address => struct IStakeManager.RelayHubInfo storage ref)"
                                            }
                                        },
                                        "id": 4005,
                                        "indexExpression": {
                                            "id": 4004,
                                            "name": "relayHub",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3995,
                                            "src": "7586:8:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "7557:38:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayHubInfo_$6127_storage",
                                            "typeString": "struct IStakeManager.RelayHubInfo storage ref"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "7526:69:5"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 4015,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "id": 4008,
                                                        "name": "hubInfo",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4000,
                                                        "src": "7613:7:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayHubInfo_$6127_storage_ptr",
                                                            "typeString": "struct IStakeManager.RelayHubInfo storage pointer"
                                                        }
                                                    },
                                                    "id": 4009,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "removalTime",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 6126,
                                                    "src": "7613:19:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "==",
                                                "rightExpression": {
                                                    "expression": {
                                                        "arguments": [
                                                            {
                                                                "id": 4012,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "lValueRequested": false,
                                                                "nodeType": "ElementaryTypeNameExpression",
                                                                "src": "7641:7:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_type$_t_uint256_$",
                                                                    "typeString": "type(uint256)"
                                                                },
                                                                "typeName": {
                                                                    "id": 4011,
                                                                    "name": "uint256",
                                                                    "nodeType": "ElementaryTypeName",
                                                                    "src": "7641:7:5",
                                                                    "typeDescriptions": {}
                                                                }
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_type$_t_uint256_$",
                                                                    "typeString": "type(uint256)"
                                                                }
                                                            ],
                                                            "id": 4010,
                                                            "name": "type",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 4294967269,
                                                            "src": "7636:4:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                                                "typeString": "function () pure"
                                                            }
                                                        },
                                                        "id": 4013,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "functionCall",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "7636:13:5",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_meta_type_t_uint256",
                                                            "typeString": "type(uint256)"
                                                        }
                                                    },
                                                    "id": 4014,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "memberName": "max",
                                                    "nodeType": "MemberAccess",
                                                    "src": "7636:17:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "7613:40:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "687562206e6f7420617574686f72697a6564",
                                                "id": 4016,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "7655:20:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_833b11fcdf7eb617a5e8e51044818470f61ce1793663032dc99c31429f81a19f",
                                                    "typeString": "literal_string \"hub not authorized\""
                                                },
                                                "value": "hub not authorized"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_833b11fcdf7eb617a5e8e51044818470f61ce1793663032dc99c31429f81a19f",
                                                    "typeString": "literal_string \"hub not authorized\""
                                                }
                                            ],
                                            "id": 4007,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "7605:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 4017,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "7605:71:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4018,
                                    "nodeType": "ExpressionStatement",
                                    "src": "7605:71:5"
                                },
                                {
                                    "expression": {
                                        "id": 4029,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "expression": {
                                                "id": 4019,
                                                "name": "hubInfo",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4000,
                                                "src": "7686:7:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_RelayHubInfo_$6127_storage_ptr",
                                                    "typeString": "struct IStakeManager.RelayHubInfo storage pointer"
                                                }
                                            },
                                            "id": 4021,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "removalTime",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6126,
                                            "src": "7686:19:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "id": 4028,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                                "expression": {
                                                    "id": 4022,
                                                    "name": "block",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967292,
                                                    "src": "7708:5:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_block",
                                                        "typeString": "block"
                                                    }
                                                },
                                                "id": 4023,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "timestamp",
                                                "nodeType": "MemberAccess",
                                                "src": "7708:15:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "+",
                                            "rightExpression": {
                                                "expression": {
                                                    "baseExpression": {
                                                        "id": 4024,
                                                        "name": "stakes",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3367,
                                                        "src": "7726:6:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$6124_storage_$",
                                                            "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                        }
                                                    },
                                                    "id": 4026,
                                                    "indexExpression": {
                                                        "id": 4025,
                                                        "name": "relayManager",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3993,
                                                        "src": "7733:12:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "7726:20:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_StakeInfo_$6124_storage",
                                                        "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                    }
                                                },
                                                "id": 4027,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "unstakeDelay",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 6112,
                                                "src": "7726:33:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "src": "7708:51:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "7686:73:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 4030,
                                    "nodeType": "ExpressionStatement",
                                    "src": "7686:73:5"
                                },
                                {
                                    "eventCall": {
                                        "arguments": [
                                            {
                                                "id": 4032,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3993,
                                                "src": "7790:12:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 4033,
                                                "name": "relayHub",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3995,
                                                "src": "7804:8:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "expression": {
                                                    "id": 4034,
                                                    "name": "hubInfo",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4000,
                                                    "src": "7814:7:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_RelayHubInfo_$6127_storage_ptr",
                                                        "typeString": "struct IStakeManager.RelayHubInfo storage pointer"
                                                    }
                                                },
                                                "id": 4035,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "removalTime",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 6126,
                                                "src": "7814:19:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 4031,
                                            "name": "HubUnauthorized",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6065,
                                            "src": "7774:15:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,address,uint256)"
                                            }
                                        },
                                        "id": 4036,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "7774:60:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4037,
                                    "nodeType": "EmitStatement",
                                    "src": "7769:65:5"
                                }
                            ]
                        },
                        "id": 4039,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "_unauthorizeHub",
                        "nameLocation": "7451:15:5",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 3996,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 3993,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "7475:12:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4039,
                                    "src": "7467:20:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 3992,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "7467:7:5",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 3995,
                                    "mutability": "mutable",
                                    "name": "relayHub",
                                    "nameLocation": "7497:8:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4039,
                                    "src": "7489:16:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 3994,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "7489:7:5",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "7466:40:5"
                        },
                        "returnParameters": {
                            "id": 3997,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "7516:0:5"
                        },
                        "scope": 4355,
                        "src": "7442:399:5",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "baseFunctions": [
                            6203
                        ],
                        "body": {
                            "id": 4137,
                            "nodeType": "Block",
                            "src": "7988:812:5",
                            "statements": [
                                {
                                    "assignments": [
                                        4051
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 4051,
                                            "mutability": "mutable",
                                            "name": "removalTime",
                                            "nameLocation": "8006:11:5",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 4137,
                                            "src": "7998:19:5",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 4050,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "7998:7:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 4059,
                                    "initialValue": {
                                        "expression": {
                                            "baseExpression": {
                                                "baseExpression": {
                                                    "id": 4052,
                                                    "name": "authorizedHubs",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3480,
                                                    "src": "8020:14:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_struct$_RelayHubInfo_$6127_storage_$_$",
                                                        "typeString": "mapping(address => mapping(address => struct IStakeManager.RelayHubInfo storage ref))"
                                                    }
                                                },
                                                "id": 4054,
                                                "indexExpression": {
                                                    "id": 4053,
                                                    "name": "relayManager",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4042,
                                                    "src": "8035:12:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "IndexAccess",
                                                "src": "8020:28:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_RelayHubInfo_$6127_storage_$",
                                                    "typeString": "mapping(address => struct IStakeManager.RelayHubInfo storage ref)"
                                                }
                                            },
                                            "id": 4057,
                                            "indexExpression": {
                                                "expression": {
                                                    "id": 4055,
                                                    "name": "msg",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967281,
                                                    "src": "8049:3:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_message",
                                                        "typeString": "msg"
                                                    }
                                                },
                                                "id": 4056,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "sender",
                                                "nodeType": "MemberAccess",
                                                "src": "8049:10:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "8020:40:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_RelayHubInfo_$6127_storage",
                                                "typeString": "struct IStakeManager.RelayHubInfo storage ref"
                                            }
                                        },
                                        "id": 4058,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "removalTime",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 6126,
                                        "src": "8020:52:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "7998:74:5"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 4063,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "id": 4061,
                                                    "name": "removalTime",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4051,
                                                    "src": "8090:11:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "!=",
                                                "rightExpression": {
                                                    "hexValue": "30",
                                                    "id": 4062,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "8105:1:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_0_by_1",
                                                        "typeString": "int_const 0"
                                                    },
                                                    "value": "0"
                                                },
                                                "src": "8090:16:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "687562206e6f7420617574686f72697a6564",
                                                "id": 4064,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "8108:20:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_833b11fcdf7eb617a5e8e51044818470f61ce1793663032dc99c31429f81a19f",
                                                    "typeString": "literal_string \"hub not authorized\""
                                                },
                                                "value": "hub not authorized"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_833b11fcdf7eb617a5e8e51044818470f61ce1793663032dc99c31429f81a19f",
                                                    "typeString": "literal_string \"hub not authorized\""
                                                }
                                            ],
                                            "id": 4060,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "8082:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 4065,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "8082:47:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4066,
                                    "nodeType": "ExpressionStatement",
                                    "src": "8082:47:5"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 4071,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "id": 4068,
                                                    "name": "removalTime",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4051,
                                                    "src": "8147:11:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": ">",
                                                "rightExpression": {
                                                    "expression": {
                                                        "id": 4069,
                                                        "name": "block",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967292,
                                                        "src": "8161:5:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_block",
                                                            "typeString": "block"
                                                        }
                                                    },
                                                    "id": 4070,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "timestamp",
                                                    "nodeType": "MemberAccess",
                                                    "src": "8161:15:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "8147:29:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "68756220617574686f72697a6174696f6e2065787069726564",
                                                "id": 4072,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "8178:27:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_5a90317ad5eb065da8284e8902c4393ff73ad0f286b027487eb55a338442c023",
                                                    "typeString": "literal_string \"hub authorization expired\""
                                                },
                                                "value": "hub authorization expired"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_5a90317ad5eb065da8284e8902c4393ff73ad0f286b027487eb55a338442c023",
                                                    "typeString": "literal_string \"hub authorization expired\""
                                                }
                                            ],
                                            "id": 4067,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "8139:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 4073,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "8139:67:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4074,
                                    "nodeType": "ExpressionStatement",
                                    "src": "8139:67:5"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 4081,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "baseExpression": {
                                                            "id": 4076,
                                                            "name": "stakes",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 3367,
                                                            "src": "8289:6:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$6124_storage_$",
                                                                "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                            }
                                                        },
                                                        "id": 4078,
                                                        "indexExpression": {
                                                            "id": 4077,
                                                            "name": "relayManager",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 4042,
                                                            "src": "8296:12:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        },
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "nodeType": "IndexAccess",
                                                        "src": "8289:20:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_StakeInfo_$6124_storage",
                                                            "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                        }
                                                    },
                                                    "id": 4079,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "stake",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 6110,
                                                    "src": "8289:26:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": ">=",
                                                "rightExpression": {
                                                    "id": 4080,
                                                    "name": "amount",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4046,
                                                    "src": "8319:6:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "8289:36:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "70656e616c74792065786365656473207374616b65",
                                                "id": 4082,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "8327:23:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_c65b35d1a6ad66cabf69e4201547cf2b95ef7d46f8c643c825a1657c98b3e5c6",
                                                    "typeString": "literal_string \"penalty exceeds stake\""
                                                },
                                                "value": "penalty exceeds stake"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_c65b35d1a6ad66cabf69e4201547cf2b95ef7d46f8c643c825a1657c98b3e5c6",
                                                    "typeString": "literal_string \"penalty exceeds stake\""
                                                }
                                            ],
                                            "id": 4075,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "8281:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 4083,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "8281:70:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4084,
                                    "nodeType": "ExpressionStatement",
                                    "src": "8281:70:5"
                                },
                                {
                                    "expression": {
                                        "id": 4095,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "expression": {
                                                "baseExpression": {
                                                    "id": 4085,
                                                    "name": "stakes",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3367,
                                                    "src": "8361:6:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$6124_storage_$",
                                                        "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                    }
                                                },
                                                "id": 4087,
                                                "indexExpression": {
                                                    "id": 4086,
                                                    "name": "relayManager",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4042,
                                                    "src": "8368:12:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "IndexAccess",
                                                "src": "8361:20:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$6124_storage",
                                                    "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                }
                                            },
                                            "id": 4088,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "stake",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6110,
                                            "src": "8361:26:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "id": 4094,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                                "expression": {
                                                    "baseExpression": {
                                                        "id": 4089,
                                                        "name": "stakes",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3367,
                                                        "src": "8389:6:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$6124_storage_$",
                                                            "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                        }
                                                    },
                                                    "id": 4091,
                                                    "indexExpression": {
                                                        "id": 4090,
                                                        "name": "relayManager",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4042,
                                                        "src": "8396:12:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "8389:20:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_StakeInfo_$6124_storage",
                                                        "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                    }
                                                },
                                                "id": 4092,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "stake",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 6110,
                                                "src": "8389:26:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "-",
                                            "rightExpression": {
                                                "id": 4093,
                                                "name": "amount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4046,
                                                "src": "8418:6:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "src": "8389:35:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "8361:63:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 4096,
                                    "nodeType": "ExpressionStatement",
                                    "src": "8361:63:5"
                                },
                                {
                                    "assignments": [
                                        4098
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 4098,
                                            "mutability": "mutable",
                                            "name": "toBurn",
                                            "nameLocation": "8443:6:5",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 4137,
                                            "src": "8435:14:5",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 4097,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "8435:7:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 4102,
                                    "initialValue": {
                                        "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        },
                                        "id": 4101,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "id": 4099,
                                            "name": "amount",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4046,
                                            "src": "8452:6:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "/",
                                        "rightExpression": {
                                            "hexValue": "32",
                                            "id": 4100,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "8461:1:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_rational_2_by_1",
                                                "typeString": "int_const 2"
                                            },
                                            "value": "2"
                                        },
                                        "src": "8452:10:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "8435:27:5"
                                },
                                {
                                    "assignments": [
                                        4104
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 4104,
                                            "mutability": "mutable",
                                            "name": "reward",
                                            "nameLocation": "8480:6:5",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 4137,
                                            "src": "8472:14:5",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 4103,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "8472:7:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 4108,
                                    "initialValue": {
                                        "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        },
                                        "id": 4107,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "id": 4105,
                                            "name": "amount",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4046,
                                            "src": "8489:6:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "-",
                                        "rightExpression": {
                                            "id": 4106,
                                            "name": "toBurn",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4098,
                                            "src": "8498:6:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "8489:15:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "8472:32:5"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 4114,
                                                "name": "burnAddress",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3359,
                                                "src": "8611:11:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 4115,
                                                "name": "toBurn",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4098,
                                                "src": "8624:6:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "expression": {
                                                "expression": {
                                                    "baseExpression": {
                                                        "id": 4109,
                                                        "name": "stakes",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3367,
                                                        "src": "8571:6:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$6124_storage_$",
                                                            "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                        }
                                                    },
                                                    "id": 4111,
                                                    "indexExpression": {
                                                        "id": 4110,
                                                        "name": "relayManager",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4042,
                                                        "src": "8578:12:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "8571:20:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_StakeInfo_$6124_storage",
                                                        "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                    }
                                                },
                                                "id": 4112,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "token",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 6121,
                                                "src": "8571:26:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_IERC20_$10849",
                                                    "typeString": "contract IERC20"
                                                }
                                            },
                                            "id": 4113,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "safeTransfer",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 10942,
                                            "src": "8571:39:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$10849_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$10849_$",
                                                "typeString": "function (contract IERC20,address,uint256)"
                                            }
                                        },
                                        "id": 4116,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "8571:60:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4117,
                                    "nodeType": "ExpressionStatement",
                                    "src": "8571:60:5"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 4123,
                                                "name": "beneficiary",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4044,
                                                "src": "8681:11:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 4124,
                                                "name": "reward",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4104,
                                                "src": "8694:6:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "expression": {
                                                "expression": {
                                                    "baseExpression": {
                                                        "id": 4118,
                                                        "name": "stakes",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3367,
                                                        "src": "8641:6:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$6124_storage_$",
                                                            "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                        }
                                                    },
                                                    "id": 4120,
                                                    "indexExpression": {
                                                        "id": 4119,
                                                        "name": "relayManager",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4042,
                                                        "src": "8648:12:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "8641:20:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_StakeInfo_$6124_storage",
                                                        "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                    }
                                                },
                                                "id": 4121,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "token",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 6121,
                                                "src": "8641:26:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_IERC20_$10849",
                                                    "typeString": "contract IERC20"
                                                }
                                            },
                                            "id": 4122,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "safeTransfer",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 10942,
                                            "src": "8641:39:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$10849_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$10849_$",
                                                "typeString": "function (contract IERC20,address,uint256)"
                                            }
                                        },
                                        "id": 4125,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "8641:60:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4126,
                                    "nodeType": "ExpressionStatement",
                                    "src": "8641:60:5"
                                },
                                {
                                    "eventCall": {
                                        "arguments": [
                                            {
                                                "id": 4128,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4042,
                                                "src": "8731:12:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 4129,
                                                "name": "beneficiary",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4044,
                                                "src": "8745:11:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "expression": {
                                                    "baseExpression": {
                                                        "id": 4130,
                                                        "name": "stakes",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3367,
                                                        "src": "8758:6:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$6124_storage_$",
                                                            "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                        }
                                                    },
                                                    "id": 4132,
                                                    "indexExpression": {
                                                        "id": 4131,
                                                        "name": "relayManager",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4042,
                                                        "src": "8765:12:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "8758:20:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_StakeInfo_$6124_storage",
                                                        "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                    }
                                                },
                                                "id": 4133,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "token",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 6121,
                                                "src": "8758:26:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_IERC20_$10849",
                                                    "typeString": "contract IERC20"
                                                }
                                            },
                                            {
                                                "id": 4134,
                                                "name": "reward",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4104,
                                                "src": "8786:6:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_contract$_IERC20_$10849",
                                                    "typeString": "contract IERC20"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 4127,
                                            "name": "StakePenalized",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6049,
                                            "src": "8716:14:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_contract$_IERC20_$10849_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,address,contract IERC20,uint256)"
                                            }
                                        },
                                        "id": 4135,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "8716:77:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4136,
                                    "nodeType": "EmitStatement",
                                    "src": "8711:82:5"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 4040,
                            "nodeType": "StructuredDocumentation",
                            "src": "7847:29:5",
                            "text": "@inheritdoc IStakeManager"
                        },
                        "functionSelector": "09a08af4",
                        "id": 4138,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "penalizeRelayManager",
                        "nameLocation": "7890:20:5",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 4048,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "7979:8:5"
                        },
                        "parameters": {
                            "id": 4047,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4042,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "7919:12:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4138,
                                    "src": "7911:20:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 4041,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "7911:7:5",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4044,
                                    "mutability": "mutable",
                                    "name": "beneficiary",
                                    "nameLocation": "7941:11:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4138,
                                    "src": "7933:19:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 4043,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "7933:7:5",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4046,
                                    "mutability": "mutable",
                                    "name": "amount",
                                    "nameLocation": "7962:6:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4138,
                                    "src": "7954:14:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 4045,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "7954:7:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "7910:59:5"
                        },
                        "returnParameters": {
                            "id": 4049,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "7988:0:5"
                        },
                        "scope": 4355,
                        "src": "7881:919:5",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            6229
                        ],
                        "body": {
                            "id": 4170,
                            "nodeType": "Block",
                            "src": "8926:216:5",
                            "statements": [
                                {
                                    "assignments": [
                                        4151
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 4151,
                                            "mutability": "mutable",
                                            "name": "stakeInfo",
                                            "nameLocation": "8967:9:5",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 4170,
                                            "src": "8936:40:5",
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_StakeInfo_$6124_memory_ptr",
                                                "typeString": "struct IStakeManager.StakeInfo"
                                            },
                                            "typeName": {
                                                "id": 4150,
                                                "nodeType": "UserDefinedTypeName",
                                                "pathNode": {
                                                    "id": 4149,
                                                    "name": "IStakeManager.StakeInfo",
                                                    "nodeType": "IdentifierPath",
                                                    "referencedDeclaration": 6124,
                                                    "src": "8936:23:5"
                                                },
                                                "referencedDeclaration": 6124,
                                                "src": "8936:23:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                    "typeString": "struct IStakeManager.StakeInfo"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 4155,
                                    "initialValue": {
                                        "baseExpression": {
                                            "id": 4152,
                                            "name": "stakes",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3367,
                                            "src": "8979:6:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$6124_storage_$",
                                                "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                            }
                                        },
                                        "id": 4154,
                                        "indexExpression": {
                                            "id": 4153,
                                            "name": "relayManager",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4141,
                                            "src": "8986:12:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "8979:20:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_StakeInfo_$6124_storage",
                                            "typeString": "struct IStakeManager.StakeInfo storage ref"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "8936:63:5"
                                },
                                {
                                    "expression": {
                                        "commonType": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        },
                                        "id": 4168,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "id": 4159,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                                "expression": {
                                                    "id": 4156,
                                                    "name": "stakeInfo",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4151,
                                                    "src": "9016:9:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_StakeInfo_$6124_memory_ptr",
                                                        "typeString": "struct IStakeManager.StakeInfo memory"
                                                    }
                                                },
                                                "id": 4157,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "abandonedTime",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 6116,
                                                "src": "9016:23:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "!=",
                                            "rightExpression": {
                                                "hexValue": "30",
                                                "id": 4158,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "number",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "9043:1:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_rational_0_by_1",
                                                    "typeString": "int_const 0"
                                                },
                                                "value": "0"
                                            },
                                            "src": "9016:28:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "&&",
                                        "rightExpression": {
                                            "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "id": 4167,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 4164,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "id": 4160,
                                                        "name": "stakeInfo",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4151,
                                                        "src": "9048:9:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_StakeInfo_$6124_memory_ptr",
                                                            "typeString": "struct IStakeManager.StakeInfo memory"
                                                        }
                                                    },
                                                    "id": 4161,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "abandonedTime",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 6116,
                                                    "src": "9048:23:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "+",
                                                "rightExpression": {
                                                    "expression": {
                                                        "id": 4162,
                                                        "name": "abandonedRelayServerConfig",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3357,
                                                        "src": "9074:26:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_AbandonedRelayServerConfig_$6134_storage",
                                                            "typeString": "struct IStakeManager.AbandonedRelayServerConfig storage ref"
                                                        }
                                                    },
                                                    "id": 4163,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "escheatmentDelay",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 6133,
                                                    "src": "9074:43:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "9048:69:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "<",
                                            "rightExpression": {
                                                "expression": {
                                                    "id": 4165,
                                                    "name": "block",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967292,
                                                    "src": "9120:5:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_block",
                                                        "typeString": "block"
                                                    }
                                                },
                                                "id": 4166,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "timestamp",
                                                "nodeType": "MemberAccess",
                                                "src": "9120:15:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "src": "9048:87:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "src": "9016:119:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "functionReturnParameters": 4146,
                                    "id": 4169,
                                    "nodeType": "Return",
                                    "src": "9009:126:5"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 4139,
                            "nodeType": "StructuredDocumentation",
                            "src": "8806:29:5",
                            "text": "@inheritdoc IStakeManager"
                        },
                        "functionSelector": "39622167",
                        "id": 4171,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "isRelayEscheatable",
                        "nameLocation": "8849:18:5",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 4143,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "8902:8:5"
                        },
                        "parameters": {
                            "id": 4142,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4141,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "8876:12:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4171,
                                    "src": "8868:20:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 4140,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "8868:7:5",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "8867:22:5"
                        },
                        "returnParameters": {
                            "id": 4146,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4145,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4171,
                                    "src": "8920:4:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 4144,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "8920:4:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "8919:6:5"
                        },
                        "scope": 4355,
                        "src": "8840:302:5",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            6209
                        ],
                        "body": {
                            "id": 4228,
                            "nodeType": "Block",
                            "src": "9260:452:5",
                            "statements": [
                                {
                                    "assignments": [
                                        4182
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 4182,
                                            "mutability": "mutable",
                                            "name": "info",
                                            "nameLocation": "9288:4:5",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 4228,
                                            "src": "9270:22:5",
                                            "stateVariable": false,
                                            "storageLocation": "storage",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                "typeString": "struct IStakeManager.StakeInfo"
                                            },
                                            "typeName": {
                                                "id": 4181,
                                                "nodeType": "UserDefinedTypeName",
                                                "pathNode": {
                                                    "id": 4180,
                                                    "name": "StakeInfo",
                                                    "nodeType": "IdentifierPath",
                                                    "referencedDeclaration": 6124,
                                                    "src": "9270:9:5"
                                                },
                                                "referencedDeclaration": 6124,
                                                "src": "9270:9:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                    "typeString": "struct IStakeManager.StakeInfo"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 4186,
                                    "initialValue": {
                                        "baseExpression": {
                                            "id": 4183,
                                            "name": "stakes",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3367,
                                            "src": "9295:6:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$6124_storage_$",
                                                "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                            }
                                        },
                                        "id": 4185,
                                        "indexExpression": {
                                            "id": 4184,
                                            "name": "relayManager",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4174,
                                            "src": "9302:12:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "9295:20:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_StakeInfo_$6124_storage",
                                            "typeString": "struct IStakeManager.StakeInfo storage ref"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "9270:45:5"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 4191,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "id": 4188,
                                                        "name": "info",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4182,
                                                        "src": "9333:4:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                            "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                        }
                                                    },
                                                    "id": 4189,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "stake",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 6110,
                                                    "src": "9333:10:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": ">",
                                                "rightExpression": {
                                                    "hexValue": "30",
                                                    "id": 4190,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "9346:1:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_0_by_1",
                                                        "typeString": "int_const 0"
                                                    },
                                                    "value": "0"
                                                },
                                                "src": "9333:14:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "72656c6179206d616e61676572206e6f74207374616b6564",
                                                "id": 4192,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "9349:26:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_592d26f578f5171fd051bd3166e9719e81e7117edaf832f3d73ecadebe4995c3",
                                                    "typeString": "literal_string \"relay manager not staked\""
                                                },
                                                "value": "relay manager not staked"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_592d26f578f5171fd051bd3166e9719e81e7117edaf832f3d73ecadebe4995c3",
                                                    "typeString": "literal_string \"relay manager not staked\""
                                                }
                                            ],
                                            "id": 4187,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "9325:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 4193,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "9325:51:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4194,
                                    "nodeType": "ExpressionStatement",
                                    "src": "9325:51:5"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 4199,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "id": 4196,
                                                        "name": "info",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4182,
                                                        "src": "9394:4:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                            "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                        }
                                                    },
                                                    "id": 4197,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "abandonedTime",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 6116,
                                                    "src": "9394:18:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "==",
                                                "rightExpression": {
                                                    "hexValue": "30",
                                                    "id": 4198,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "9416:1:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_0_by_1",
                                                        "typeString": "int_const 0"
                                                    },
                                                    "value": "0"
                                                },
                                                "src": "9394:23:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "72656c6179206d616e6167657220616c7265616479206162616e646f6e6564",
                                                "id": 4200,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "9419:33:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_1186719b3be237917cd86b4142d2a85df34d0a02f44ec311010b76039d5ceb01",
                                                    "typeString": "literal_string \"relay manager already abandoned\""
                                                },
                                                "value": "relay manager already abandoned"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_1186719b3be237917cd86b4142d2a85df34d0a02f44ec311010b76039d5ceb01",
                                                    "typeString": "literal_string \"relay manager already abandoned\""
                                                }
                                            ],
                                            "id": 4195,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "9386:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 4201,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "9386:67:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4202,
                                    "nodeType": "ExpressionStatement",
                                    "src": "9386:67:5"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 4211,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    "id": 4208,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "expression": {
                                                            "id": 4204,
                                                            "name": "info",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 4182,
                                                            "src": "9471:4:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                                "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                            }
                                                        },
                                                        "id": 4205,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "keepaliveTime",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 6118,
                                                        "src": "9471:18:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "+",
                                                    "rightExpression": {
                                                        "expression": {
                                                            "id": 4206,
                                                            "name": "abandonedRelayServerConfig",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 3357,
                                                            "src": "9492:26:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_AbandonedRelayServerConfig_$6134_storage",
                                                                "typeString": "struct IStakeManager.AbandonedRelayServerConfig storage ref"
                                                            }
                                                        },
                                                        "id": 4207,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "abandonmentDelay",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 6131,
                                                        "src": "9492:43:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "src": "9471:64:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "<",
                                                "rightExpression": {
                                                    "expression": {
                                                        "id": 4209,
                                                        "name": "block",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967292,
                                                        "src": "9538:5:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_block",
                                                            "typeString": "block"
                                                        }
                                                    },
                                                    "id": 4210,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "timestamp",
                                                    "nodeType": "MemberAccess",
                                                    "src": "9538:15:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "9471:82:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "72656c6179206d616e616765722077617320616c69766520726563656e746c79",
                                                "id": 4212,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "9555:34:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_66db75ff41a656c4a01b23b20c2dd3f7fdd08392d23e31ceb54592bf7fe8e58c",
                                                    "typeString": "literal_string \"relay manager was alive recently\""
                                                },
                                                "value": "relay manager was alive recently"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_66db75ff41a656c4a01b23b20c2dd3f7fdd08392d23e31ceb54592bf7fe8e58c",
                                                    "typeString": "literal_string \"relay manager was alive recently\""
                                                }
                                            ],
                                            "id": 4203,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "9463:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 4213,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "9463:127:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4214,
                                    "nodeType": "ExpressionStatement",
                                    "src": "9463:127:5"
                                },
                                {
                                    "expression": {
                                        "id": 4220,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "expression": {
                                                "id": 4215,
                                                "name": "info",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4182,
                                                "src": "9600:4:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                    "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                }
                                            },
                                            "id": 4217,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "abandonedTime",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6116,
                                            "src": "9600:18:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "expression": {
                                                "id": 4218,
                                                "name": "block",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4294967292,
                                                "src": "9621:5:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_magic_block",
                                                    "typeString": "block"
                                                }
                                            },
                                            "id": 4219,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "timestamp",
                                            "nodeType": "MemberAccess",
                                            "src": "9621:15:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "9600:36:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 4221,
                                    "nodeType": "ExpressionStatement",
                                    "src": "9600:36:5"
                                },
                                {
                                    "eventCall": {
                                        "arguments": [
                                            {
                                                "id": 4223,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4174,
                                                "src": "9672:12:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "expression": {
                                                    "id": 4224,
                                                    "name": "info",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4182,
                                                    "src": "9686:4:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                        "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                    }
                                                },
                                                "id": 4225,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "abandonedTime",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 6116,
                                                "src": "9686:18:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 4222,
                                            "name": "RelayServerAbandoned",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6089,
                                            "src": "9651:20:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,uint256)"
                                            }
                                        },
                                        "id": 4226,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "9651:54:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4227,
                                    "nodeType": "EmitStatement",
                                    "src": "9646:59:5"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 4172,
                            "nodeType": "StructuredDocumentation",
                            "src": "9148:29:5",
                            "text": "@inheritdoc IStakeManager"
                        },
                        "functionSelector": "71fa1faf",
                        "id": 4229,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [
                            {
                                "id": 4178,
                                "kind": "modifierInvocation",
                                "modifierName": {
                                    "id": 4177,
                                    "name": "onlyOwner",
                                    "nodeType": "IdentifierPath",
                                    "referencedDeclaration": 10101,
                                    "src": "9250:9:5"
                                },
                                "nodeType": "ModifierInvocation",
                                "src": "9250:9:5"
                            }
                        ],
                        "name": "markRelayAbandoned",
                        "nameLocation": "9191:18:5",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 4176,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "9241:8:5"
                        },
                        "parameters": {
                            "id": 4175,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4174,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "9218:12:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4229,
                                    "src": "9210:20:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 4173,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "9210:7:5",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "9209:22:5"
                        },
                        "returnParameters": {
                            "id": 4179,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "9260:0:5"
                        },
                        "scope": 4355,
                        "src": "9182:530:5",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            6215
                        ],
                        "body": {
                            "id": 4288,
                            "nodeType": "Block",
                            "src": "9838:417:5",
                            "statements": [
                                {
                                    "assignments": [
                                        4240
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 4240,
                                            "mutability": "mutable",
                                            "name": "info",
                                            "nameLocation": "9866:4:5",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 4288,
                                            "src": "9848:22:5",
                                            "stateVariable": false,
                                            "storageLocation": "storage",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                "typeString": "struct IStakeManager.StakeInfo"
                                            },
                                            "typeName": {
                                                "id": 4239,
                                                "nodeType": "UserDefinedTypeName",
                                                "pathNode": {
                                                    "id": 4238,
                                                    "name": "StakeInfo",
                                                    "nodeType": "IdentifierPath",
                                                    "referencedDeclaration": 6124,
                                                    "src": "9848:9:5"
                                                },
                                                "referencedDeclaration": 6124,
                                                "src": "9848:9:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                    "typeString": "struct IStakeManager.StakeInfo"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 4244,
                                    "initialValue": {
                                        "baseExpression": {
                                            "id": 4241,
                                            "name": "stakes",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3367,
                                            "src": "9873:6:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$6124_storage_$",
                                                "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                            }
                                        },
                                        "id": 4243,
                                        "indexExpression": {
                                            "id": 4242,
                                            "name": "relayManager",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4232,
                                            "src": "9880:12:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "9873:20:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_StakeInfo_$6124_storage",
                                            "typeString": "struct IStakeManager.StakeInfo storage ref"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "9848:45:5"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "id": 4247,
                                                        "name": "relayManager",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4232,
                                                        "src": "9930:12:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    ],
                                                    "id": 4246,
                                                    "name": "isRelayEscheatable",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4171,
                                                    "src": "9911:18:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                                                        "typeString": "function (address) view returns (bool)"
                                                    }
                                                },
                                                "id": 4248,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "9911:32:5",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "72656c617920736572766572206e6f74206573636865617461626c6520796574",
                                                "id": 4249,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "9945:34:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_2c978e0fbce1a22c62b2c5b2822310453b6a7c1ff19ec7ab11d5f02e926038d2",
                                                    "typeString": "literal_string \"relay server not escheatable yet\""
                                                },
                                                "value": "relay server not escheatable yet"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_2c978e0fbce1a22c62b2c5b2822310453b6a7c1ff19ec7ab11d5f02e926038d2",
                                                    "typeString": "literal_string \"relay server not escheatable yet\""
                                                }
                                            ],
                                            "id": 4245,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "9903:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 4250,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "9903:77:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4251,
                                    "nodeType": "ExpressionStatement",
                                    "src": "9903:77:5"
                                },
                                {
                                    "assignments": [
                                        4253
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 4253,
                                            "mutability": "mutable",
                                            "name": "amount",
                                            "nameLocation": "9998:6:5",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 4288,
                                            "src": "9990:14:5",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 4252,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "9990:7:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 4256,
                                    "initialValue": {
                                        "expression": {
                                            "id": 4254,
                                            "name": "info",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4240,
                                            "src": "10007:4:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                            }
                                        },
                                        "id": 4255,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "stake",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 6110,
                                        "src": "10007:10:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "9990:27:5"
                                },
                                {
                                    "expression": {
                                        "id": 4261,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "expression": {
                                                "id": 4257,
                                                "name": "info",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4240,
                                                "src": "10027:4:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                    "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                }
                                            },
                                            "id": 4259,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "stake",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6110,
                                            "src": "10027:10:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "hexValue": "30",
                                            "id": 4260,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "10040:1:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_rational_0_by_1",
                                                "typeString": "int_const 0"
                                            },
                                            "value": "0"
                                        },
                                        "src": "10027:14:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 4262,
                                    "nodeType": "ExpressionStatement",
                                    "src": "10027:14:5"
                                },
                                {
                                    "expression": {
                                        "id": 4267,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "expression": {
                                                "id": 4263,
                                                "name": "info",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4240,
                                                "src": "10051:4:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                    "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                }
                                            },
                                            "id": 4265,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "withdrawTime",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6114,
                                            "src": "10051:17:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "hexValue": "30",
                                            "id": 4266,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "10071:1:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_rational_0_by_1",
                                                "typeString": "int_const 0"
                                            },
                                            "value": "0"
                                        },
                                        "src": "10051:21:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 4268,
                                    "nodeType": "ExpressionStatement",
                                    "src": "10051:21:5"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "expression": {
                                                    "id": 4274,
                                                    "name": "abandonedRelayServerConfig",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3357,
                                                    "src": "10106:26:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_AbandonedRelayServerConfig_$6134_storage",
                                                        "typeString": "struct IStakeManager.AbandonedRelayServerConfig storage ref"
                                                    }
                                                },
                                                "id": 4275,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "devAddress",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 6129,
                                                "src": "10106:37:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 4276,
                                                "name": "amount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4253,
                                                "src": "10145:6:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "expression": {
                                                "expression": {
                                                    "id": 4269,
                                                    "name": "info",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4240,
                                                    "src": "10082:4:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                        "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                    }
                                                },
                                                "id": 4272,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "token",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 6121,
                                                "src": "10082:10:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_IERC20_$10849",
                                                    "typeString": "contract IERC20"
                                                }
                                            },
                                            "id": 4273,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "safeTransfer",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 10942,
                                            "src": "10082:23:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$10849_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$10849_$",
                                                "typeString": "function (contract IERC20,address,uint256)"
                                            }
                                        },
                                        "id": 4277,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "10082:70:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4278,
                                    "nodeType": "ExpressionStatement",
                                    "src": "10082:70:5"
                                },
                                {
                                    "eventCall": {
                                        "arguments": [
                                            {
                                                "id": 4280,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4232,
                                                "src": "10203:12:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "expression": {
                                                    "id": 4281,
                                                    "name": "msg",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967281,
                                                    "src": "10217:3:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_message",
                                                        "typeString": "msg"
                                                    }
                                                },
                                                "id": 4282,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "sender",
                                                "nodeType": "MemberAccess",
                                                "src": "10217:10:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "expression": {
                                                    "id": 4283,
                                                    "name": "info",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4240,
                                                    "src": "10229:4:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                        "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                    }
                                                },
                                                "id": 4284,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "token",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 6121,
                                                "src": "10229:10:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_IERC20_$10849",
                                                    "typeString": "contract IERC20"
                                                }
                                            },
                                            {
                                                "id": 4285,
                                                "name": "amount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4253,
                                                "src": "10241:6:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_contract$_IERC20_$10849",
                                                    "typeString": "contract IERC20"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 4279,
                                            "name": "AbandonedRelayManagerStakeEscheated",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6108,
                                            "src": "10167:35:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_contract$_IERC20_$10849_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,address,contract IERC20,uint256)"
                                            }
                                        },
                                        "id": 4286,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "10167:81:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4287,
                                    "nodeType": "EmitStatement",
                                    "src": "10162:86:5"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 4230,
                            "nodeType": "StructuredDocumentation",
                            "src": "9718:29:5",
                            "text": "@inheritdoc IStakeManager"
                        },
                        "functionSelector": "a9aadcd7",
                        "id": 4289,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [
                            {
                                "id": 4236,
                                "kind": "modifierInvocation",
                                "modifierName": {
                                    "id": 4235,
                                    "name": "onlyOwner",
                                    "nodeType": "IdentifierPath",
                                    "referencedDeclaration": 10101,
                                    "src": "9828:9:5"
                                },
                                "nodeType": "ModifierInvocation",
                                "src": "9828:9:5"
                            }
                        ],
                        "name": "escheatAbandonedRelayStake",
                        "nameLocation": "9761:26:5",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 4234,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "9819:8:5"
                        },
                        "parameters": {
                            "id": 4233,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4232,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "9796:12:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4289,
                                    "src": "9788:20:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 4231,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "9788:7:5",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "9787:22:5"
                        },
                        "returnParameters": {
                            "id": 4237,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "9838:0:5"
                        },
                        "scope": 4355,
                        "src": "9752:503:5",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            6221
                        ],
                        "body": {
                            "id": 4353,
                            "nodeType": "Block",
                            "src": "10369:453:5",
                            "statements": [
                                {
                                    "assignments": [
                                        4298
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 4298,
                                            "mutability": "mutable",
                                            "name": "info",
                                            "nameLocation": "10397:4:5",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 4353,
                                            "src": "10379:22:5",
                                            "stateVariable": false,
                                            "storageLocation": "storage",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                "typeString": "struct IStakeManager.StakeInfo"
                                            },
                                            "typeName": {
                                                "id": 4297,
                                                "nodeType": "UserDefinedTypeName",
                                                "pathNode": {
                                                    "id": 4296,
                                                    "name": "StakeInfo",
                                                    "nodeType": "IdentifierPath",
                                                    "referencedDeclaration": 6124,
                                                    "src": "10379:9:5"
                                                },
                                                "referencedDeclaration": 6124,
                                                "src": "10379:9:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                    "typeString": "struct IStakeManager.StakeInfo"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 4302,
                                    "initialValue": {
                                        "baseExpression": {
                                            "id": 4299,
                                            "name": "stakes",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3367,
                                            "src": "10404:6:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$6124_storage_$",
                                                "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                            }
                                        },
                                        "id": 4301,
                                        "indexExpression": {
                                            "id": 4300,
                                            "name": "relayManager",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4292,
                                            "src": "10411:12:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "10404:20:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_StakeInfo_$6124_storage",
                                            "typeString": "struct IStakeManager.StakeInfo storage ref"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "10379:45:5"
                                },
                                {
                                    "assignments": [
                                        4304
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 4304,
                                            "mutability": "mutable",
                                            "name": "isHubAuthorized",
                                            "nameLocation": "10439:15:5",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 4353,
                                            "src": "10434:20:5",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            },
                                            "typeName": {
                                                "id": 4303,
                                                "name": "bool",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "10434:4:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 4318,
                                    "initialValue": {
                                        "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        },
                                        "id": 4317,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "expression": {
                                                "baseExpression": {
                                                    "baseExpression": {
                                                        "id": 4305,
                                                        "name": "authorizedHubs",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3480,
                                                        "src": "10457:14:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_struct$_RelayHubInfo_$6127_storage_$_$",
                                                            "typeString": "mapping(address => mapping(address => struct IStakeManager.RelayHubInfo storage ref))"
                                                        }
                                                    },
                                                    "id": 4307,
                                                    "indexExpression": {
                                                        "id": 4306,
                                                        "name": "relayManager",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4292,
                                                        "src": "10472:12:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "10457:28:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_RelayHubInfo_$6127_storage_$",
                                                        "typeString": "mapping(address => struct IStakeManager.RelayHubInfo storage ref)"
                                                    }
                                                },
                                                "id": 4310,
                                                "indexExpression": {
                                                    "expression": {
                                                        "id": 4308,
                                                        "name": "msg",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967281,
                                                        "src": "10486:3:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_message",
                                                            "typeString": "msg"
                                                        }
                                                    },
                                                    "id": 4309,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "sender",
                                                    "nodeType": "MemberAccess",
                                                    "src": "10486:10:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "IndexAccess",
                                                "src": "10457:40:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_RelayHubInfo_$6127_storage",
                                                    "typeString": "struct IStakeManager.RelayHubInfo storage ref"
                                                }
                                            },
                                            "id": 4311,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "removalTime",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6126,
                                            "src": "10457:52:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "==",
                                        "rightExpression": {
                                            "expression": {
                                                "arguments": [
                                                    {
                                                        "id": 4314,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "ElementaryTypeNameExpression",
                                                        "src": "10518:7:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_uint256_$",
                                                            "typeString": "type(uint256)"
                                                        },
                                                        "typeName": {
                                                            "id": 4313,
                                                            "name": "uint256",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "10518:7:5",
                                                            "typeDescriptions": {}
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_type$_t_uint256_$",
                                                            "typeString": "type(uint256)"
                                                        }
                                                    ],
                                                    "id": 4312,
                                                    "name": "type",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967269,
                                                    "src": "10513:4:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                                        "typeString": "function () pure"
                                                    }
                                                },
                                                "id": 4315,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "10513:13:5",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_magic_meta_type_t_uint256",
                                                    "typeString": "type(uint256)"
                                                }
                                            },
                                            "id": 4316,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "memberName": "max",
                                            "nodeType": "MemberAccess",
                                            "src": "10513:17:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "10457:73:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "10434:96:5"
                                },
                                {
                                    "assignments": [
                                        4320
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 4320,
                                            "mutability": "mutable",
                                            "name": "isRelayOwner",
                                            "nameLocation": "10545:12:5",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 4353,
                                            "src": "10540:17:5",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            },
                                            "typeName": {
                                                "id": 4319,
                                                "name": "bool",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "10540:4:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 4326,
                                    "initialValue": {
                                        "commonType": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        },
                                        "id": 4325,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "expression": {
                                                "id": 4321,
                                                "name": "info",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4298,
                                                "src": "10560:4:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                    "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                }
                                            },
                                            "id": 4322,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "owner",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6123,
                                            "src": "10560:10:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "==",
                                        "rightExpression": {
                                            "expression": {
                                                "id": 4323,
                                                "name": "msg",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4294967281,
                                                "src": "10574:3:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_magic_message",
                                                    "typeString": "msg"
                                                }
                                            },
                                            "id": 4324,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "sender",
                                            "nodeType": "MemberAccess",
                                            "src": "10574:10:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "src": "10560:24:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "10540:44:5"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                "id": 4330,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "id": 4328,
                                                    "name": "isHubAuthorized",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4304,
                                                    "src": "10602:15:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "||",
                                                "rightExpression": {
                                                    "id": 4329,
                                                    "name": "isRelayOwner",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4320,
                                                    "src": "10621:12:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "src": "10602:31:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "6d7573742062652063616c6c6564206279206f776e6572206f7220687562",
                                                "id": 4331,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "10635:32:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_e51a97fbde765543f86884e45457f0190f0c33e55ccca5e9acd5e8b0a9a6fff9",
                                                    "typeString": "literal_string \"must be called by owner or hub\""
                                                },
                                                "value": "must be called by owner or hub"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_e51a97fbde765543f86884e45457f0190f0c33e55ccca5e9acd5e8b0a9a6fff9",
                                                    "typeString": "literal_string \"must be called by owner or hub\""
                                                }
                                            ],
                                            "id": 4327,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "10594:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 4332,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "10594:74:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4333,
                                    "nodeType": "ExpressionStatement",
                                    "src": "10594:74:5"
                                },
                                {
                                    "expression": {
                                        "id": 4338,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "expression": {
                                                "id": 4334,
                                                "name": "info",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4298,
                                                "src": "10678:4:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                    "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                }
                                            },
                                            "id": 4336,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "abandonedTime",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6116,
                                            "src": "10678:18:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "hexValue": "30",
                                            "id": 4337,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "10699:1:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_rational_0_by_1",
                                                "typeString": "int_const 0"
                                            },
                                            "value": "0"
                                        },
                                        "src": "10678:22:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 4339,
                                    "nodeType": "ExpressionStatement",
                                    "src": "10678:22:5"
                                },
                                {
                                    "expression": {
                                        "id": 4345,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "expression": {
                                                "id": 4340,
                                                "name": "info",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4298,
                                                "src": "10710:4:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                    "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                }
                                            },
                                            "id": 4342,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "keepaliveTime",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6118,
                                            "src": "10710:18:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "expression": {
                                                "id": 4343,
                                                "name": "block",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4294967292,
                                                "src": "10731:5:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_magic_block",
                                                    "typeString": "block"
                                                }
                                            },
                                            "id": 4344,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "timestamp",
                                            "nodeType": "MemberAccess",
                                            "src": "10731:15:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "10710:36:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 4346,
                                    "nodeType": "ExpressionStatement",
                                    "src": "10710:36:5"
                                },
                                {
                                    "eventCall": {
                                        "arguments": [
                                            {
                                                "id": 4348,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4292,
                                                "src": "10782:12:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "expression": {
                                                    "id": 4349,
                                                    "name": "info",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4298,
                                                    "src": "10796:4:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                        "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                    }
                                                },
                                                "id": 4350,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "keepaliveTime",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 6118,
                                                "src": "10796:18:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 4347,
                                            "name": "RelayServerKeepalive",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6096,
                                            "src": "10761:20:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,uint256)"
                                            }
                                        },
                                        "id": 4351,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "10761:54:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4352,
                                    "nodeType": "EmitStatement",
                                    "src": "10756:59:5"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 4290,
                            "nodeType": "StructuredDocumentation",
                            "src": "10261:29:5",
                            "text": "@inheritdoc IStakeManager"
                        },
                        "functionSelector": "46dcbf0b",
                        "id": 4354,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "updateRelayKeepaliveTime",
                        "nameLocation": "10304:24:5",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 4294,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "10360:8:5"
                        },
                        "parameters": {
                            "id": 4293,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4292,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "10337:12:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4354,
                                    "src": "10329:20:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 4291,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "10329:7:5",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "10328:22:5"
                        },
                        "returnParameters": {
                            "id": 4295,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "10369:0:5"
                        },
                        "scope": 4355,
                        "src": "10295:527:5",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    }
                ],
                "scope": 4356,
                "src": "706:10118:5",
                "usedErrors": []
            }
        ],
        "src": "0:10824:5"
    },
    "compiler": {
        "name": "solc",
        "version": "0.8.7+commit.e28d00a7.Emscripten.clang"
    },
    "networks": {},
    "schemaVersion": "3.1.0",
    "updatedAt": "2023-03-16T16:54:15.174Z",
    "devdoc": {
        "kind": "dev",
        "methods": {
            "authorizeHubByOwner(address,address)": {
                "params": {
                    "relayHub": "The address of a `RelayHub` to be authorized.",
                    "relayManager": "The address of a Relay Manager whose stake is to be authorized for the new `RelayHub`."
                }
            },
            "getAbandonedRelayServerConfig()": {
                "returns": {
                    "_0": "The structure that contains all configuration values for the 'abandoned' stake."
                }
            },
            "getBurnAddress()": {
                "returns": {
                    "_0": "The address that will receive the 'burned' part of the penalized stake."
                }
            },
            "getCreationBlock()": {
                "returns": {
                    "_0": "the block number in which the contract has been deployed."
                }
            },
            "getMaxUnstakeDelay()": {
                "returns": {
                    "_0": "The maximum unstake delay this `StakeManger` allows. This is to prevent locking money forever by mistake."
                }
            },
            "getStakeInfo(address)": {
                "params": {
                    "relayManager": "The address of a Relay Manager."
                },
                "returns": {
                    "isSenderAuthorizedHub": "`true` if the `msg.sender` for this call was a `RelayHub` that is authorized now. `false` if the `msg.sender` for this call is not authorized.",
                    "stakeInfo": "The `StakeInfo` structure."
                }
            },
            "owner()": {
                "details": "Returns the address of the current owner."
            },
            "penalizeRelayManager(address,address,uint256)": {
                "params": {
                    "amount": "A total amount of penalty to be withdrawn from stake.",
                    "beneficiary": "The address that receives part of the penalty amount.",
                    "relayManager": "The address of a Relay Manager to be penalized."
                }
            },
            "renounceOwnership()": {
                "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."
            },
            "setRelayManagerOwner(address)": {
                "params": {
                    "owner": "- owner of the relay (as configured off-chain)"
                }
            },
            "stakeForRelayManager(address,address,uint256,uint256)": {
                "params": {
                    "amount": "The amount of tokens to be taken from the relayOwner and locked in the StakeManager as a stake",
                    "relayManager": "The address that represents a stake entry and controls relay registrations on relay hubs",
                    "token": "The address of an ERC-20 token that is used by the relayManager as a stake",
                    "unstakeDelay": "The number of seconds to elapse before an owner can retrieve the stake after calling `unlock`"
                }
            },
            "supportsInterface(bytes4)": {
                "details": "Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas."
            },
            "transferOwnership(address)": {
                "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
            },
            "unauthorizeHubByOwner(address,address)": {
                "params": {
                    "relayHub": "The address of a `RelayHub` to be unauthorized.",
                    "relayManager": "The address of a Relay Manager."
                }
            },
            "unlockStake(address)": {
                "params": {
                    "relayManager": "The address of a Relay Manager whose stake is to be unlocked."
                }
            },
            "withdrawStake(address)": {
                "params": {
                    "relayManager": "The address of a Relay Manager whose stake is to be withdrawn."
                }
            }
        },
        "stateVariables": {
            "versionSM": {
                "return": "a SemVer-compliant version of the `StakeManager` contract.",
                "returns": {
                    "_0": "a SemVer-compliant version of the `StakeManager` contract."
                }
            }
        },
        "title": "The StakeManager implementation",
        "version": 1
    },
    "userdoc": {
        "events": {
            "AbandonedRelayManagerStakeEscheated(address,address,address,uint256)": {
                "notice": "Emitted when the stake of an abandoned relayer has been confiscated and transferred to the `devAddress`."
            },
            "BurnAddressSet(address)": {
                "notice": "Emitted when a `burnAddress` is changed."
            },
            "DevAddressSet(address)": {
                "notice": "Emitted when a `devAddress` is changed."
            },
            "HubAuthorized(address,address)": {
                "notice": "Emitted when a `relayManager` adds a new `RelayHub` to a list of authorized."
            },
            "HubUnauthorized(address,address,uint256)": {
                "notice": "Emitted when a `relayManager` removes a `RelayHub` from a list of authorized."
            },
            "OwnerSet(address,address)": {
                "notice": "Emitted when a `relayManager` sets its `owner`. This is necessary to prevent stake hijacking."
            },
            "RelayServerAbandoned(address,uint256)": {
                "notice": "Emitted if Relay Server is inactive for an `abandonmentDelay` and contract owner initiates its removal."
            },
            "RelayServerKeepalive(address,uint256)": {
                "notice": "Emitted to indicate an action performed by a relay server to prevent it from being marked as abandoned."
            },
            "StakeAdded(address,address,address,uint256,uint256)": {
                "notice": "Emitted when a `stake` or `unstakeDelay` are initialized or increased."
            },
            "StakePenalized(address,address,address,uint256)": {
                "notice": "Emitted when an authorized `RelayHub` penalizes a `relayManager`."
            },
            "StakeUnlocked(address,address,uint256)": {
                "notice": "Emitted once a stake is scheduled for withdrawal."
            },
            "StakeWithdrawn(address,address,address,uint256)": {
                "notice": "Emitted when owner withdraws `relayManager` funds."
            }
        },
        "kind": "user",
        "methods": {
            "authorizeHubByManager(address)": {
                "notice": "Same as `authorizeHubByOwner` but can be called by the RelayManager itself."
            },
            "authorizeHubByOwner(address,address)": {
                "notice": "Add the `RelayHub` to a list of authorized by this Relay Manager. This allows the RelayHub to penalize this Relay Manager. The `RelayHub` cannot trust a Relay it cannot penalize."
            },
            "authorizedHubs(address,address)": {
                "notice": "maps relay managers to a map of addressed of their authorized hubs to the information on that hub"
            },
            "escheatAbandonedRelayStake(address)": {
                "notice": "If more than `abandonmentDelay` has passed since the last Keepalive transaction, and relay manager has been marked as abandoned, and after that more that `escheatmentDelay` have passed, entire stake and balance will be taken from this relay."
            },
            "getStakeInfo(address)": {
                "notice": "Get the stake details information for the given Relay Manager."
            },
            "isRelayEscheatable(address)": {
                "notice": "Check if the Relay Manager can be considered abandoned or not. Returns true if the stake's abandonment time is in the past including the escheatment delay, false otherwise."
            },
            "markRelayAbandoned(address)": {
                "notice": "Allows the contract owner to set the given `relayManager` as abandoned after a configurable delay. Its entire stake and balance will be taken from a relay if it does not respond to being marked as abandoned."
            },
            "penalizeRelayManager(address,address,uint256)": {
                "notice": "Slash the stake of the relay relayManager. In order to prevent stake kidnapping, burns part of stake on the way."
            },
            "setBurnAddress(address)": {
                "notice": "Change the address that will receive the 'burned' part of the penalized stake. This is done to prevent malicious Relay Server from penalizing itself and breaking even."
            },
            "setDevAddress(address)": {
                "notice": "Change the address that will receive the 'abandoned' stake. This is done to prevent Relay Servers that lost their keys from losing access to funds."
            },
            "setRelayManagerOwner(address)": {
                "notice": "Set the owner of a Relay Manager. Called only by the RelayManager itself. Note that owners cannot transfer ownership - if the entry already exists, reverts."
            },
            "stakeForRelayManager(address,address,uint256,uint256)": {
                "notice": "Put a stake for a relayManager and set its unstake delay. Only the owner can call this function. If the entry does not exist, reverts. The owner must give allowance of the ERC-20 token to the StakeManager before calling this method. It is the RelayHub who has a configurable list of minimum stakes per token. StakeManager accepts all tokens."
            },
            "stakes(address)": {
                "notice": "maps relay managers to their stakes"
            },
            "unauthorizeHubByManager(address)": {
                "notice": "Same as `unauthorizeHubByOwner` but can be called by the RelayManager itself."
            },
            "unauthorizeHubByOwner(address,address)": {
                "notice": "Remove the `RelayHub` from a list of authorized by this Relay Manager."
            },
            "unlockStake(address)": {
                "notice": "Schedule the unlocking of the stake. The `unstakeDelay` must pass before owner can call `withdrawStake`."
            },
            "updateRelayKeepaliveTime(address)": {
                "notice": "Sets a new `keepaliveTime` for the given `relayManager`, preventing it from being marked as abandoned. Can be called by an authorized `RelayHub` or by the `relayOwner` address."
            },
            "withdrawStake(address)": {
                "notice": "Withdraw the unlocked stake."
            }
        },
        "notice": "An IStakeManager instance that accepts stakes in any ERC-20 token.Single StakeInfo of a single RelayManager can only have one token address assigned to it.It cannot be changed after the first time 'stakeForRelayManager' is called as it is equivalent to withdrawal.",
        "version": 1
    }
}
