{
    "contractName": "IRelayHub",
    "abi": [
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "balance",
                    "type": "uint256"
                }
            ],
            "name": "AbandonedRelayManagerBalanceEscheated",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "paymaster",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "from",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "Deposited",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "deprecationTime",
                    "type": "uint256"
                }
            ],
            "name": "HubDeprecated",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "uint256",
                            "name": "maxWorkerCount",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "gasReserve",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "postOverhead",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "gasOverhead",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "minimumUnstakeDelay",
                            "type": "uint256"
                        },
                        {
                            "internalType": "address",
                            "name": "devAddress",
                            "type": "address"
                        },
                        {
                            "internalType": "uint8",
                            "name": "devFee",
                            "type": "uint8"
                        },
                        {
                            "internalType": "uint80",
                            "name": "baseRelayFee",
                            "type": "uint80"
                        },
                        {
                            "internalType": "uint16",
                            "name": "pctRelayFee",
                            "type": "uint16"
                        }
                    ],
                    "indexed": false,
                    "internalType": "struct IRelayHub.RelayHubConfig",
                    "name": "config",
                    "type": "tuple"
                }
            ],
            "name": "RelayHubConfigured",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "address[]",
                    "name": "newRelayWorkers",
                    "type": "address[]"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "workersCount",
                    "type": "uint256"
                }
            ],
            "name": "RelayWorkersAdded",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "token",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "minimumStake",
                    "type": "uint256"
                }
            ],
            "name": "StakingTokenDataChanged",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "paymaster",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "bytes32",
                    "name": "relayRequestID",
                    "type": "bytes32"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "from",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "to",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "relayWorker",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "bytes4",
                    "name": "selector",
                    "type": "bytes4"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "innerGasUsed",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "bytes",
                    "name": "reason",
                    "type": "bytes"
                }
            ],
            "name": "TransactionRejectedByPaymaster",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "relayWorker",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "bytes32",
                    "name": "relayRequestID",
                    "type": "bytes32"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "from",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "to",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "paymaster",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "bytes4",
                    "name": "selector",
                    "type": "bytes4"
                },
                {
                    "indexed": false,
                    "internalType": "enum IRelayHub.RelayCallStatus",
                    "name": "status",
                    "type": "uint8"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "charge",
                    "type": "uint256"
                }
            ],
            "name": "TransactionRelayed",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "enum IRelayHub.RelayCallStatus",
                    "name": "status",
                    "type": "uint8"
                },
                {
                    "indexed": false,
                    "internalType": "bytes",
                    "name": "returnValue",
                    "type": "bytes"
                }
            ],
            "name": "TransactionResult",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "dest",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "Withdrawn",
            "type": "event"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes4",
                    "name": "interfaceId",
                    "type": "bytes4"
                }
            ],
            "name": "supportsInterface",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address[]",
                    "name": "newRelayWorkers",
                    "type": "address[]"
                }
            ],
            "name": "addRelayWorkers",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                }
            ],
            "name": "onRelayServerRegistered",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "target",
                    "type": "address"
                }
            ],
            "name": "depositFor",
            "outputs": [],
            "stateMutability": "payable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address payable",
                    "name": "dest",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "withdraw",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address payable[]",
                    "name": "dest",
                    "type": "address[]"
                },
                {
                    "internalType": "uint256[]",
                    "name": "amount",
                    "type": "uint256[]"
                }
            ],
            "name": "withdrawMultiple",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "string",
                    "name": "domainSeparatorName",
                    "type": "string"
                },
                {
                    "internalType": "uint256",
                    "name": "maxAcceptanceBudget",
                    "type": "uint256"
                },
                {
                    "components": [
                        {
                            "components": [
                                {
                                    "internalType": "address",
                                    "name": "from",
                                    "type": "address"
                                },
                                {
                                    "internalType": "address",
                                    "name": "to",
                                    "type": "address"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "value",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "gas",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "nonce",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "data",
                                    "type": "bytes"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "validUntilTime",
                                    "type": "uint256"
                                }
                            ],
                            "internalType": "struct IForwarder.ForwardRequest",
                            "name": "request",
                            "type": "tuple"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "uint256",
                                    "name": "maxFeePerGas",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "maxPriorityFeePerGas",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "transactionCalldataGasUsed",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "address",
                                    "name": "relayWorker",
                                    "type": "address"
                                },
                                {
                                    "internalType": "address",
                                    "name": "paymaster",
                                    "type": "address"
                                },
                                {
                                    "internalType": "address",
                                    "name": "forwarder",
                                    "type": "address"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "paymasterData",
                                    "type": "bytes"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "clientId",
                                    "type": "uint256"
                                }
                            ],
                            "internalType": "struct GsnTypes.RelayData",
                            "name": "relayData",
                            "type": "tuple"
                        }
                    ],
                    "internalType": "struct GsnTypes.RelayRequest",
                    "name": "relayRequest",
                    "type": "tuple"
                },
                {
                    "internalType": "bytes",
                    "name": "signature",
                    "type": "bytes"
                },
                {
                    "internalType": "bytes",
                    "name": "approvalData",
                    "type": "bytes"
                }
            ],
            "name": "relayCall",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "paymasterAccepted",
                    "type": "bool"
                },
                {
                    "internalType": "uint256",
                    "name": "charge",
                    "type": "uint256"
                },
                {
                    "internalType": "enum IRelayHub.RelayCallStatus",
                    "name": "status",
                    "type": "uint8"
                },
                {
                    "internalType": "bytes",
                    "name": "returnValue",
                    "type": "bytes"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "relayWorker",
                    "type": "address"
                },
                {
                    "internalType": "address payable",
                    "name": "beneficiary",
                    "type": "address"
                }
            ],
            "name": "penalize",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "uint256",
                            "name": "maxWorkerCount",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "gasReserve",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "postOverhead",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "gasOverhead",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "minimumUnstakeDelay",
                            "type": "uint256"
                        },
                        {
                            "internalType": "address",
                            "name": "devAddress",
                            "type": "address"
                        },
                        {
                            "internalType": "uint8",
                            "name": "devFee",
                            "type": "uint8"
                        },
                        {
                            "internalType": "uint80",
                            "name": "baseRelayFee",
                            "type": "uint80"
                        },
                        {
                            "internalType": "uint16",
                            "name": "pctRelayFee",
                            "type": "uint16"
                        }
                    ],
                    "internalType": "struct IRelayHub.RelayHubConfig",
                    "name": "_config",
                    "type": "tuple"
                }
            ],
            "name": "setConfiguration",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract IERC20[]",
                    "name": "token",
                    "type": "address[]"
                },
                {
                    "internalType": "uint256[]",
                    "name": "minimumStake",
                    "type": "uint256[]"
                }
            ],
            "name": "setMinimumStakes",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "_deprecationTime",
                    "type": "uint256"
                }
            ],
            "name": "deprecateHub",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                }
            ],
            "name": "escheatAbandonedRelayBalance",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "gasUsed",
                    "type": "uint256"
                },
                {
                    "components": [
                        {
                            "internalType": "uint256",
                            "name": "maxFeePerGas",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "maxPriorityFeePerGas",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "transactionCalldataGasUsed",
                            "type": "uint256"
                        },
                        {
                            "internalType": "address",
                            "name": "relayWorker",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "paymaster",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "forwarder",
                            "type": "address"
                        },
                        {
                            "internalType": "bytes",
                            "name": "paymasterData",
                            "type": "bytes"
                        },
                        {
                            "internalType": "uint256",
                            "name": "clientId",
                            "type": "uint256"
                        }
                    ],
                    "internalType": "struct GsnTypes.RelayData",
                    "name": "relayData",
                    "type": "tuple"
                }
            ],
            "name": "calculateCharge",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "charge",
                    "type": "uint256"
                }
            ],
            "name": "calculateDevCharge",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getConfiguration",
            "outputs": [
                {
                    "components": [
                        {
                            "internalType": "uint256",
                            "name": "maxWorkerCount",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "gasReserve",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "postOverhead",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "gasOverhead",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "minimumUnstakeDelay",
                            "type": "uint256"
                        },
                        {
                            "internalType": "address",
                            "name": "devAddress",
                            "type": "address"
                        },
                        {
                            "internalType": "uint8",
                            "name": "devFee",
                            "type": "uint8"
                        },
                        {
                            "internalType": "uint80",
                            "name": "baseRelayFee",
                            "type": "uint80"
                        },
                        {
                            "internalType": "uint16",
                            "name": "pctRelayFee",
                            "type": "uint16"
                        }
                    ],
                    "internalType": "struct IRelayHub.RelayHubConfig",
                    "name": "config",
                    "type": "tuple"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract IERC20",
                    "name": "token",
                    "type": "address"
                }
            ],
            "name": "getMinimumStakePerToken",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "worker",
                    "type": "address"
                }
            ],
            "name": "getWorkerManager",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "manager",
                    "type": "address"
                }
            ],
            "name": "getWorkerCount",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "target",
                    "type": "address"
                }
            ],
            "name": "balanceOf",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getStakeManager",
            "outputs": [
                {
                    "internalType": "contract IStakeManager",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getPenalizer",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getRelayRegistrar",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getBatchGateway",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                }
            ],
            "name": "verifyRelayManagerStaked",
            "outputs": [],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                }
            ],
            "name": "isRelayEscheatable",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "isDeprecated",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getDeprecationTime",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getCreationBlock",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "versionHub",
            "outputs": [
                {
                    "internalType": "string",
                    "name": "",
                    "type": "string"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "aggregateGasleft",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        }
    ],
    "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"name\":\"AbandonedRelayManagerBalanceEscheated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"paymaster\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Deposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"deprecationTime\",\"type\":\"uint256\"}],\"name\":\"HubDeprecated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"maxWorkerCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasReserve\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"postOverhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasOverhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minimumUnstakeDelay\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"devAddress\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"devFee\",\"type\":\"uint8\"},{\"internalType\":\"uint80\",\"name\":\"baseRelayFee\",\"type\":\"uint80\"},{\"internalType\":\"uint16\",\"name\":\"pctRelayFee\",\"type\":\"uint16\"}],\"indexed\":false,\"internalType\":\"struct IRelayHub.RelayHubConfig\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"RelayHubConfigured\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"newRelayWorkers\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"workersCount\",\"type\":\"uint256\"}],\"name\":\"RelayWorkersAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"minimumStake\",\"type\":\"uint256\"}],\"name\":\"StakingTokenDataChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"paymaster\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"relayRequestID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"relayWorker\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"innerGasUsed\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"reason\",\"type\":\"bytes\"}],\"name\":\"TransactionRejectedByPaymaster\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"relayWorker\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"relayRequestID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"paymaster\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"indexed\":false,\"internalType\":\"enum IRelayHub.RelayCallStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"charge\",\"type\":\"uint256\"}],\"name\":\"TransactionRelayed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"enum IRelayHub.RelayCallStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"returnValue\",\"type\":\"bytes\"}],\"name\":\"TransactionResult\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"dest\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdrawn\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"newRelayWorkers\",\"type\":\"address[]\"}],\"name\":\"addRelayWorkers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"aggregateGasleft\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxPriorityFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"transactionCalldataGasUsed\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"relayWorker\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"paymaster\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"paymasterData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"clientId\",\"type\":\"uint256\"}],\"internalType\":\"struct GsnTypes.RelayData\",\"name\":\"relayData\",\"type\":\"tuple\"}],\"name\":\"calculateCharge\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"charge\",\"type\":\"uint256\"}],\"name\":\"calculateDevCharge\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"depositFor\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_deprecationTime\",\"type\":\"uint256\"}],\"name\":\"deprecateHub\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"}],\"name\":\"escheatAbandonedRelayBalance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBatchGateway\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getConfiguration\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"maxWorkerCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasReserve\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"postOverhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasOverhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minimumUnstakeDelay\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"devAddress\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"devFee\",\"type\":\"uint8\"},{\"internalType\":\"uint80\",\"name\":\"baseRelayFee\",\"type\":\"uint80\"},{\"internalType\":\"uint16\",\"name\":\"pctRelayFee\",\"type\":\"uint16\"}],\"internalType\":\"struct IRelayHub.RelayHubConfig\",\"name\":\"config\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCreationBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDeprecationTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getMinimumStakePerToken\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPenalizer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRelayRegistrar\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStakeManager\",\"outputs\":[{\"internalType\":\"contract IStakeManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"}],\"name\":\"getWorkerCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"worker\",\"type\":\"address\"}],\"name\":\"getWorkerManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isDeprecated\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"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\":\"onRelayServerRegistered\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"relayWorker\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"beneficiary\",\"type\":\"address\"}],\"name\":\"penalize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"domainSeparatorName\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"maxAcceptanceBudget\",\"type\":\"uint256\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"validUntilTime\",\"type\":\"uint256\"}],\"internalType\":\"struct IForwarder.ForwardRequest\",\"name\":\"request\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxPriorityFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"transactionCalldataGasUsed\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"relayWorker\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"paymaster\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"paymasterData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"clientId\",\"type\":\"uint256\"}],\"internalType\":\"struct GsnTypes.RelayData\",\"name\":\"relayData\",\"type\":\"tuple\"}],\"internalType\":\"struct GsnTypes.RelayRequest\",\"name\":\"relayRequest\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"approvalData\",\"type\":\"bytes\"}],\"name\":\"relayCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"paymasterAccepted\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"charge\",\"type\":\"uint256\"},{\"internalType\":\"enum IRelayHub.RelayCallStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"returnValue\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"maxWorkerCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasReserve\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"postOverhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasOverhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minimumUnstakeDelay\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"devAddress\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"devFee\",\"type\":\"uint8\"},{\"internalType\":\"uint80\",\"name\":\"baseRelayFee\",\"type\":\"uint80\"},{\"internalType\":\"uint16\",\"name\":\"pctRelayFee\",\"type\":\"uint16\"}],\"internalType\":\"struct IRelayHub.RelayHubConfig\",\"name\":\"_config\",\"type\":\"tuple\"}],\"name\":\"setConfiguration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"token\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"minimumStake\",\"type\":\"uint256[]\"}],\"name\":\"setMinimumStakes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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\":\"relayManager\",\"type\":\"address\"}],\"name\":\"verifyRelayManagerStaked\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"versionHub\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"dest\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable[]\",\"name\":\"dest\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amount\",\"type\":\"uint256[]\"}],\"name\":\"withdrawMultiple\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"TransactionRejectedByPaymaster(address,address,bytes32,address,address,address,bytes4,uint256,bytes)\":{\"params\":{\"reason\":\"contains a revert reason returned from preRelayedCall or forwarder.\"}}},\"kind\":\"dev\",\"methods\":{\"aggregateGasleft()\":{\"returns\":{\"_0\":\"A total measurable amount of gas left to current execution. Same as 'gasleft()' for pure EVMs.\"}},\"balanceOf(address)\":{\"returns\":{\"_0\":\"An account's balance. It can be either a deposit of a `Paymaster`, or a revenue of a Relay Manager.\"}},\"calculateCharge(uint256,(uint256,uint256,uint256,address,address,address,bytes,uint256))\":{\"params\":{\"gasUsed\":\"An amount of gas used by the transaction.\",\"relayData\":\"The details of a transaction signed by the sender.\"},\"returns\":{\"_0\":\"The calculated charge, in wei.\"}},\"calculateDevCharge(uint256)\":{\"params\":{\"charge\":\"The amount of Ether in wei the Paymaster will be charged for this transaction.\"},\"returns\":{\"_0\":\"The calculated devFee, in wei.\"}},\"deprecateHub(uint256)\":{\"params\":{\"_deprecationTime\":\"The timestamp in seconds after which the `RelayHub` stops serving transactions.\"}},\"getBatchGateway()\":{\"returns\":{\"_0\":\"The `BatchGateway` address for this `RelayHub`.\"}},\"getConfiguration()\":{\"returns\":{\"config\":\"The configuration of the `RelayHub`.\"}},\"getCreationBlock()\":{\"returns\":{\"_0\":\"The block number in which the contract has been deployed.\"}},\"getDeprecationTime()\":{\"returns\":{\"_0\":\"The timestamp from which the hub no longer allows relaying calls.\"}},\"getMinimumStakePerToken(address)\":{\"params\":{\"token\":\"An address of an ERC-20 compatible tokens.\"},\"returns\":{\"_0\":\"The minimum amount of a given `token` that needs to be staked so that the Relay Manager is considered to be 'staked' by this `RelayHub`. Zero value means this token is not allowed for staking.\"}},\"getPenalizer()\":{\"returns\":{\"_0\":\"The `Penalizer` address for this `RelayHub`.\"}},\"getRelayRegistrar()\":{\"returns\":{\"_0\":\"The `RelayRegistrar` address for this `RelayHub`.\"}},\"getStakeManager()\":{\"returns\":{\"_0\":\"The `StakeManager` address for this `RelayHub`.\"}},\"getWorkerCount(address)\":{\"params\":{\"manager\":\"An address of the Relay Manager.\"},\"returns\":{\"_0\":\"The count of Relay Workers associated with this Relay Manager.\"}},\"getWorkerManager(address)\":{\"params\":{\"worker\":\"An address of the Relay Worker.\"},\"returns\":{\"_0\":\"The address of its Relay Manager.\"}},\"isDeprecated()\":{\"returns\":{\"_0\":\"`true` if the `RelayHub` is deprecated, `false` it it is not deprecated and can serve transactions.\"}},\"penalize(address,address)\":{\"params\":{\"beneficiary\":\"The address that called the `Penalizer` and will receive a reward for it.\",\"relayWorker\":\"The address of the Relay Worker that committed a penalizable offense.\"}},\"relayCall(string,uint256,((address,address,uint256,uint256,uint256,bytes,uint256),(uint256,uint256,uint256,address,address,address,bytes,uint256)),bytes,bytes)\":{\"params\":{\"approvalData\":\"The dapp-specific data forwarded to the `Paymaster`'s `preRelayedCall` method. This value is **not** verified by the `RelayHub` in any way. As an example, it can be used to pass some kind of a third-party signature to the `Paymaster` for verification. Emits a `TransactionRelayed` event regardless of whether the transaction succeeded or failed.\",\"domainSeparatorName\":\"The name of the Domain Separator used to verify the EIP-712 signature\",\"maxAcceptanceBudget\":\"The maximum valid value for `paymaster.getGasLimits().acceptanceBudget` to return.\",\"relayRequest\":\"All details of the requested relayed call.\",\"signature\":\"The client's EIP-712 signature over the `relayRequest` struct.\"}},\"setConfiguration((uint256,uint256,uint256,uint256,uint256,address,uint8,uint80,uint16))\":{\"params\":{\"_config\":\"The new configuration.\"}},\"setMinimumStakes(address[],uint256[])\":{\"params\":{\"minimumStake\":\"An array of minimal amounts necessary for a corresponding token, in wei.\",\"token\":\"An array of addresses of ERC-20 compatible tokens.\"}},\"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.\"},\"versionHub()\":{\"returns\":{\"_0\":\"a SemVer-compliant version of the `RelayHub` contract.\"}}},\"title\":\"The RelayHub interface\",\"version\":1},\"userdoc\":{\"events\":{\"AbandonedRelayManagerBalanceEscheated(address,uint256)\":{\"notice\":\"This event is emitted in case a `relayManager` has been deemed \\\"abandoned\\\" for being unresponsive for a prolonged period of time.This event means the entire balance of the relay has been transferred to the `devAddress`.\"},\"Deposited(address,address,uint256)\":{\"notice\":\"Emitted when `depositFor` is called, including the amount and account that was funded.\"},\"HubDeprecated(uint256)\":{\"notice\":\"This event is emitted in case this `RelayHub` is deprecated and will stop serving transactions soon.\"},\"RelayHubConfigured((uint256,uint256,uint256,uint256,uint256,address,uint8,uint80,uint16))\":{\"notice\":\"Emitted when a configuration of the `RelayHub` is changed\"},\"RelayWorkersAdded(address,address[],uint256)\":{\"notice\":\"Emitted when relays are added by a relayManager\"},\"StakingTokenDataChanged(address,uint256)\":{\"notice\":\"Emitted for each token configured for staking in setMinimumStakes\"},\"TransactionRejectedByPaymaster(address,address,bytes32,address,address,address,bytes4,uint256,bytes)\":{\"notice\":\"Emitted when an attempt to relay a call fails and the `Paymaster` does not accept the transaction. The actual relayed call was not executed, and the recipient not charged.\"},\"TransactionRelayed(address,address,bytes32,address,address,address,bytes4,uint8,uint256)\":{\"notice\":\"Emitted when a transaction is relayed. Note that the actual internal function call might be reverted. The reason for a revert will be indicated in the `status` field of a corresponding `RelayCallStatus` value.`charge` is the Ether value deducted from the `Paymaster` balance. The amount added to the `relayManager` balance will be lower if there is an activated `devFee` in the `config`.\"},\"TransactionResult(uint8,bytes)\":{\"notice\":\"This event is emitted in case the internal function returns a value or reverts with a revert string.\"},\"Withdrawn(address,address,uint256)\":{\"notice\":\"Emitted when an account withdraws funds from the `RelayHub`.\"}},\"kind\":\"user\",\"methods\":{\"addRelayWorkers(address[])\":{\"notice\":\"Add new worker addresses controlled by the sender who must be a staked Relay Manager address. Emits a `RelayWorkersAdded` event. This function can be called multiple times, emitting new events.\"},\"calculateCharge(uint256,(uint256,uint256,uint256,address,address,address,bytes,uint256))\":{\"notice\":\"The fee is expressed as a base fee in wei plus percentage of the actual charge. For example, a value '40' stands for a 40% fee, so the recipient will be charged for 1.4 times the spent amount.\"},\"calculateDevCharge(uint256)\":{\"notice\":\"The fee is expressed as a  percentage of the actual charge. For example, a value '40' stands for a 40% fee, so the Relay Manager will only get 60% of the `charge`.\"},\"depositFor(address)\":{\"notice\":\"Deposits ether for a `Paymaster`, so that it can and pay for relayed transactions. :warning: **Warning** :warning: Unused balance can only be withdrawn by the holder itself, by calling `withdraw`. Emits a `Deposited` event.\"},\"deprecateHub(uint256)\":{\"notice\":\"Deprecate hub by reverting all incoming `relayCall()` calls starting from a given timestamp\"},\"escheatAbandonedRelayBalance(address)\":{\"notice\":\"@param relayManager\"},\"isRelayEscheatable(address)\":{\"notice\":\"Uses `StakeManager` to 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.\"},\"onRelayServerRegistered(address)\":{\"notice\":\"The `RelayRegistrar` callback to notify the `RelayHub` that this `relayManager` has updated registration.\"},\"penalize(address,address)\":{\"notice\":\"In case the Relay Worker has been found to be in violation of some rules by the `Penalizer` contract, the `Penalizer` will call this method to execute a penalization. The `RelayHub` will look up the Relay Manager of the given Relay Worker and will forward the call to the `StakeManager` contract. The `RelayHub` does not perform the actual penalization either.\"},\"relayCall(string,uint256,((address,address,uint256,uint256,uint256,bytes,uint256),(uint256,uint256,uint256,address,address,address,bytes,uint256)),bytes,bytes)\":{\"notice\":\"Relays a transaction. For this to succeed, multiple conditions must be met:  - `Paymaster`'s `preRelayCall` method must succeed and not revert.  - the `msg.sender` must be a registered Relay Worker that the user signed to use.  - the transaction's gas fees must be equal or larger than the ones that were signed by the sender.  - the transaction must have enough gas to run all internal transactions if they use all gas available to them.  - the `Paymaster` must have enough balance to pay the Relay Worker if all gas is spent.If all conditions are met, the call will be relayed and the `Paymaster` charged.\"},\"setConfiguration((uint256,uint256,uint256,uint256,uint256,address,uint8,uint80,uint16))\":{\"notice\":\"Sets or changes the configuration of this `RelayHub`.\"},\"setMinimumStakes(address[],uint256[])\":{\"notice\":\"Sets or changes the minimum amount of a given `token` that needs to be staked so that the Relay Manager is considered to be 'staked' by this `RelayHub`. Zero value means this token is not allowed for staking.\"},\"verifyRelayManagerStaked(address)\":{\"notice\":\"Uses `StakeManager` to decide if the Relay Manager can be considered staked or not. Returns if the stake's token, amount and delay satisfy all requirements, reverts otherwise.\"},\"withdraw(address,uint256)\":{\"notice\":\"Withdraws from an account's balance, sending it back to the caller. Relay Managers call this to retrieve their revenue, and `Paymasters` can also use it to reduce their funding. Emits a `Withdrawn` event.\"},\"withdrawMultiple(address[],uint256[])\":{\"notice\":\"Withdraws from an account's balance, sending funds to multiple provided addresses. Relay Managers call this to retrieve their revenue, and `Paymasters` can also use it to reduce their funding. Emits a `Withdrawn` event for each destination.\"}},\"notice\":\"The implementation of this interface provides all the information the GSN client needs to create a valid `RelayRequest` and also serves as an entry point for such requests.The RelayHub also handles all the related financial records and hold the balances of participants. The Paymasters keep their Ether deposited in the `RelayHub` in order to pay for the `RelayRequest`s that thay choose to pay for, and Relay Servers keep their earned Ether in the `RelayHub` until they choose to `withdraw()`The RelayHub on each supported network only needs a single instance and there is usually no need for dApp developers or Relay Server operators to redeploy, reimplement, modify or override the `RelayHub`.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"/Users/alexf/gsn2/packages/contracts/solpp/interfaces/IRelayHub.sol\":\"IRelayHub\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/alexf/gsn2/packages/contracts/solpp/forwarder/IForwarder.sol\":{\"keccak256\":\"0xef3d770001c3245db4408cdd0afdfc622695ccfe31f28b74571d05158bbf83f8\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://08949174ed05b596d89c8f1eeedfeb254993b84054bbc1ff6081ad926f5db406\",\"dweb:/ipfs/QmNQtKzHpie4Esocxuc9YrPtGQyA928a1a5TWbVc7cPoqk\"]},\"/Users/alexf/gsn2/packages/contracts/solpp/interfaces/IRelayHub.sol\":{\"keccak256\":\"0x19dcbf5e1bfaa413b6800ad84ffedd2989b401cede299f009ff62c33e03ccfae\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://bb5cb7bee7de97770e374b4cad1265c636a740dc7a2013d686a89d9398ba3098\",\"dweb:/ipfs/QmSqhNkFwDtS1EnupbQWduDm78N6s8c1zqXf5aLqZF69Xx\"]},\"/Users/alexf/gsn2/packages/contracts/solpp/interfaces/IStakeManager.sol\":{\"keccak256\":\"0x27535f3677a2c373862d8672725632fdcabdf5d0e784f80c158063f55be68b5a\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://904ad156bf1cac29f9e13619ee0ee41e602b6cf1fafedea0a1d3be7a7accc654\",\"dweb:/ipfs/QmXVy5gfYXSWYFrkmL2u9jctZDXupiNWbif5tFVpVZMPww\"]},\"/Users/alexf/gsn2/packages/contracts/solpp/utils/GsnTypes.sol\":{\"keccak256\":\"0xfc3ed2bbd925e24facf0c3bb96d57dd7fc5bcc4a684b5473f04e8d209b758805\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://cb57b5b38d3e588f119ae45174891f2049d1d0de160a12b81a20335cd8bf731b\",\"dweb:/ipfs/Qmf6xfbdLbTKEpnzxwnSaRy1YZJtLYTZh8URqry86oyoSU\"]},\"@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0xd04b0f06e0666f29cf7cccc82894de541e19bb30a765b107b1e40bb7fe5f7d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7b652499d098e88d8d878374616bb58434301061cae2253298b3f374044e0ddb\",\"dweb:/ipfs/QmbhAzctqo5jrSKU6idHdVyqfmzCcDbNUPvmx4GiXxfA6q\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"@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": "0x",
    "deployedBytecode": "0x",
    "immutableReferences": {},
    "sourceMap": "",
    "deployedSourceMap": "",
    "source": "pragma solidity >=0.7.6;\npragma abicoder v2;\n\n// SPDX-License-Identifier: GPL-3.0-only\n\nimport \"@openzeppelin/contracts/interfaces/IERC165.sol\";\n\nimport \"../utils/GsnTypes.sol\";\nimport \"./IStakeManager.sol\";\n\n/**\n * @title The RelayHub interface\n * @notice The implementation of this interface provides all the information the GSN client needs to\n * create a valid `RelayRequest` and also serves as an entry point for such requests.\n *\n * @notice The RelayHub also handles all the related financial records and hold the balances of participants.\n * The Paymasters keep their Ether deposited in the `RelayHub` in order to pay for the `RelayRequest`s that thay choose\n * to pay for, and Relay Servers keep their earned Ether in the `RelayHub` until they choose to `withdraw()`\n *\n * @notice The RelayHub on each supported network only needs a single instance and there is usually no need for dApp\n * developers or Relay Server operators to redeploy, reimplement, modify or override the `RelayHub`.\n */\ninterface IRelayHub is IERC165 {\n    /**\n     * @notice A struct that contains all the parameters of the `RelayHub` that can be modified after the deployment.\n     */\n    struct RelayHubConfig {\n        // maximum number of worker accounts allowed per manager\n        uint256 maxWorkerCount;\n        // Gas set aside for all relayCall() instructions to prevent unexpected out-of-gas exceptions\n        uint256 gasReserve;\n        // Gas overhead to calculate gasUseWithoutPost\n        uint256 postOverhead;\n        // Gas cost of all relayCall() instructions after actual 'calculateCharge()'\n        // Assume that relay has non-zero balance (costs 15'000 more otherwise).\n        uint256 gasOverhead;\n        // Minimum unstake delay seconds of a relay manager's stake on the StakeManager\n        uint256 minimumUnstakeDelay;\n        // Developers address\n        address devAddress;\n        // 0 < fee < 100, as percentage of total charge from paymaster to relayer\n        uint8 devFee;\n        // baseRelayFee The base fee the Relay Server charges for a single transaction in Ether, in wei.\n        uint80 baseRelayFee;\n        // pctRelayFee The percent of the total charge to add as a Relay Server fee to the total charge.\n        uint16 pctRelayFee;\n    }\n\n    /// @notice Emitted when a configuration of the `RelayHub` is changed\n    event RelayHubConfigured(RelayHubConfig config);\n\n    /// @notice Emitted when relays are added by a relayManager\n    event RelayWorkersAdded(\n        address indexed relayManager,\n        address[] newRelayWorkers,\n        uint256 workersCount\n    );\n\n    /// @notice Emitted when an account withdraws funds from the `RelayHub`.\n    event Withdrawn(\n        address indexed account,\n        address indexed dest,\n        uint256 amount\n    );\n\n    /// @notice Emitted when `depositFor` is called, including the amount and account that was funded.\n    event Deposited(\n        address indexed paymaster,\n        address indexed from,\n        uint256 amount\n    );\n\n    /// @notice Emitted for each token configured for staking in setMinimumStakes\n    event StakingTokenDataChanged(\n        address token,\n        uint256 minimumStake\n    );\n\n    /**\n     * @notice Emitted when an attempt to relay a call fails and the `Paymaster` does not accept the transaction.\n     * The actual relayed call was not executed, and the recipient not charged.\n     * @param reason contains a revert reason returned from preRelayedCall or forwarder.\n     */\n    event TransactionRejectedByPaymaster(\n        address indexed relayManager,\n        address indexed paymaster,\n        bytes32 indexed relayRequestID,\n        address from,\n        address to,\n        address relayWorker,\n        bytes4 selector,\n        uint256 innerGasUsed,\n        bytes reason\n    );\n\n    /**\n     * @notice Emitted when a transaction is relayed. Note that the actual internal function call might be reverted.\n     * The reason for a revert will be indicated in the `status` field of a corresponding `RelayCallStatus` value.\n     * @notice `charge` is the Ether value deducted from the `Paymaster` balance.\n     * The amount added to the `relayManager` balance will be lower if there is an activated `devFee` in the `config`.\n     */\n    event TransactionRelayed(\n        address indexed relayManager,\n        address indexed relayWorker,\n        bytes32 indexed relayRequestID,\n        address from,\n        address to,\n        address paymaster,\n        bytes4 selector,\n        RelayCallStatus status,\n        uint256 charge\n    );\n\n    /// @notice This event is emitted in case the internal function returns a value or reverts with a revert string.\n    event TransactionResult(\n        RelayCallStatus status,\n        bytes returnValue\n    );\n\n    /// @notice This event is emitted in case this `RelayHub` is deprecated and will stop serving transactions soon.\n    event HubDeprecated(uint256 deprecationTime);\n\n    /**\n     * @notice This event is emitted in case a `relayManager` has been deemed \"abandoned\" for being\n     * unresponsive for a prolonged period of time.\n     * @notice This event means the entire balance of the relay has been transferred to the `devAddress`.\n     */\n    event AbandonedRelayManagerBalanceEscheated(\n        address indexed relayManager,\n        uint256 balance\n    );\n\n    /**\n     * Error codes that describe all possible failure reasons reported in the `TransactionRelayed` event `status` field.\n     *  @param OK The transaction was successfully relayed and execution successful - never included in the event.\n     *  @param RelayedCallFailed The transaction was relayed, but the relayed call failed.\n     *  @param RejectedByPreRelayed The transaction was not relayed due to preRelatedCall reverting.\n     *  @param RejectedByForwarder The transaction was not relayed due to forwarder check (signature,nonce).\n     *  @param PostRelayedFailed The transaction was relayed and reverted due to postRelatedCall reverting.\n     *  @param PaymasterBalanceChanged The transaction was relayed and reverted due to the paymaster balance change.\n     */\n    enum RelayCallStatus {\n        OK,\n        RelayedCallFailed,\n        RejectedByPreRelayed,\n        RejectedByForwarder,\n        RejectedByRecipientRevert,\n        PostRelayedFailed,\n        PaymasterBalanceChanged\n    }\n\n    /**\n     * @notice Add new worker addresses controlled by the sender who must be a staked Relay Manager address.\n     * Emits a `RelayWorkersAdded` event.\n     * This function can be called multiple times, emitting new events.\n     */\n    function addRelayWorkers(address[] calldata newRelayWorkers) external;\n\n    /**\n     * @notice The `RelayRegistrar` callback to notify the `RelayHub` that this `relayManager` has updated registration.\n     */\n    function onRelayServerRegistered(address relayManager) external;\n\n    // Balance management\n\n    /**\n     * @notice Deposits ether for a `Paymaster`, so that it can and pay for relayed transactions.\n     * :warning: **Warning** :warning: Unused balance can only be withdrawn by the holder itself, by calling `withdraw`.\n     * Emits a `Deposited` event.\n     */\n    function depositFor(address target) external payable;\n\n    /**\n     * @notice Withdraws from an account's balance, sending it back to the caller.\n     * Relay Managers call this to retrieve their revenue, and `Paymasters` can also use it to reduce their funding.\n     * Emits a `Withdrawn` event.\n     */\n    function withdraw(address payable dest, uint256 amount) external;\n\n    /**\n     * @notice Withdraws from an account's balance, sending funds to multiple provided addresses.\n     * Relay Managers call this to retrieve their revenue, and `Paymasters` can also use it to reduce their funding.\n     * Emits a `Withdrawn` event for each destination.\n     */\n    function withdrawMultiple(address payable[] memory dest, uint256[] memory amount) external;\n\n    // Relaying\n\n    /**\n     * @notice Relays a transaction. For this to succeed, multiple conditions must be met:\n     *  - `Paymaster`'s `preRelayCall` method must succeed and not revert.\n     *  - the `msg.sender` must be a registered Relay Worker that the user signed to use.\n     *  - the transaction's gas fees must be equal or larger than the ones that were signed by the sender.\n     *  - the transaction must have enough gas to run all internal transactions if they use all gas available to them.\n     *  - the `Paymaster` must have enough balance to pay the Relay Worker if all gas is spent.\n     *\n     * @notice If all conditions are met, the call will be relayed and the `Paymaster` charged.\n     *\n     * @param domainSeparatorName The name of the Domain Separator used to verify the EIP-712 signature\n     * @param maxAcceptanceBudget The maximum valid value for `paymaster.getGasLimits().acceptanceBudget` to return.\n     * @param relayRequest All details of the requested relayed call.\n     * @param signature The client's EIP-712 signature over the `relayRequest` struct.\n     * @param approvalData The dapp-specific data forwarded to the `Paymaster`'s `preRelayedCall` method.\n     * This value is **not** verified by the `RelayHub` in any way.\n     * As an example, it can be used to pass some kind of a third-party signature to the `Paymaster` for verification.\n     *\n     * Emits a `TransactionRelayed` event regardless of whether the transaction succeeded or failed.\n     */\n    function relayCall(\n        string calldata domainSeparatorName,\n        uint256 maxAcceptanceBudget,\n        GsnTypes.RelayRequest calldata relayRequest,\n        bytes calldata signature,\n        bytes calldata approvalData\n    )\n    external\n    returns (\n        bool paymasterAccepted,\n        uint256 charge,\n        IRelayHub.RelayCallStatus status,\n        bytes memory returnValue\n    );\n\n    /**\n     * @notice In case the Relay Worker has been found to be in violation of some rules by the `Penalizer` contract,\n     * the `Penalizer` will call this method to execute a penalization.\n     * The `RelayHub` will look up the Relay Manager of the given Relay Worker and will forward the call to\n     * the `StakeManager` contract. The `RelayHub` does not perform the actual penalization either.\n     * @param relayWorker The address of the Relay Worker that committed a penalizable offense.\n     * @param beneficiary The address that called the `Penalizer` and will receive a reward for it.\n     */\n    function penalize(address relayWorker, address payable beneficiary) external;\n\n    /**\n     * @notice Sets or changes the configuration of this `RelayHub`.\n     * @param _config The new configuration.\n     */\n    function setConfiguration(RelayHubConfig memory _config) external;\n\n    /**\n     * @notice Sets or changes the minimum amount of a given `token` that needs to be staked so that the Relay Manager\n     * is considered to be 'staked' by this `RelayHub`. Zero value means this token is not allowed for staking.\n     * @param token An array of addresses of ERC-20 compatible tokens.\n     * @param minimumStake An array of minimal amounts necessary for a corresponding token, in wei.\n     */\n    function setMinimumStakes(IERC20[] memory token, uint256[] memory minimumStake) external;\n\n    /**\n     * @notice Deprecate hub by reverting all incoming `relayCall()` calls starting from a given timestamp\n     * @param _deprecationTime The timestamp in seconds after which the `RelayHub` stops serving transactions.\n     */\n    function deprecateHub(uint256 _deprecationTime) external;\n\n    /**\n     * @notice\n     * @param relayManager\n     */\n    function escheatAbandonedRelayBalance(address relayManager) external;\n\n    /**\n     * @notice The fee is expressed as a base fee in wei plus percentage of the actual charge.\n     * For example, a value '40' stands for a 40% fee, so the recipient will be charged for 1.4 times the spent amount.\n     * @param gasUsed An amount of gas used by the transaction.\n     * @param relayData The details of a transaction signed by the sender.\n     * @return The calculated charge, in wei.\n     */\n    function calculateCharge(uint256 gasUsed, GsnTypes.RelayData calldata relayData) external view returns (uint256);\n\n    /**\n     * @notice The fee is expressed as a  percentage of the actual charge.\n     * For example, a value '40' stands for a 40% fee, so the Relay Manager will only get 60% of the `charge`.\n     * @param charge The amount of Ether in wei the Paymaster will be charged for this transaction.\n     * @return The calculated devFee, in wei.\n     */\n    function calculateDevCharge(uint256 charge) external view returns (uint256);\n    /* getters */\n\n    /// @return config The configuration of the `RelayHub`.\n    function getConfiguration() external view returns (RelayHubConfig memory config);\n\n    /**\n     * @param token An address of an ERC-20 compatible tokens.\n     * @return The minimum amount of a given `token` that needs to be staked so that the Relay Manager\n     * is considered to be 'staked' by this `RelayHub`. Zero value means this token is not allowed for staking.\n     */\n    function getMinimumStakePerToken(IERC20 token) external view returns (uint256);\n\n    /**\n     * @param worker An address of the Relay Worker.\n     * @return The address of its Relay Manager.\n     */\n    function getWorkerManager(address worker) external view returns (address);\n\n    /**\n     * @param manager An address of the Relay Manager.\n     * @return The count of Relay Workers associated with this Relay Manager.\n     */\n    function getWorkerCount(address manager) external view returns (uint256);\n\n    /// @return An account's balance. It can be either a deposit of a `Paymaster`, or a revenue of a Relay Manager.\n    function balanceOf(address target) external view returns (uint256);\n\n    /// @return The `StakeManager` address for this `RelayHub`.\n    function getStakeManager() external view returns (IStakeManager);\n\n    /// @return The `Penalizer` address for this `RelayHub`.\n    function getPenalizer() external view returns (address);\n\n    /// @return The `RelayRegistrar` address for this `RelayHub`.\n    function getRelayRegistrar() external view returns (address);\n\n    /// @return The `BatchGateway` address for this `RelayHub`.\n    function getBatchGateway() external view returns (address);\n\n    /**\n     * @notice Uses `StakeManager` to decide if the Relay Manager can be considered staked or not.\n     * Returns if the stake's token, amount and delay satisfy all requirements, reverts otherwise.\n     */\n    function verifyRelayManagerStaked(address relayManager) external view;\n\n    /**\n     * @notice Uses `StakeManager` to check if the Relay Manager can be considered abandoned or not.\n     * Returns true if the stake's abandonment time is in the past including the escheatment delay, false otherwise.\n     */\n    function isRelayEscheatable(address relayManager) external view returns (bool);\n\n    /// @return `true` if the `RelayHub` is deprecated, `false` it it is not deprecated and can serve transactions.\n    function isDeprecated() external view returns (bool);\n\n    /// @return The timestamp from which the hub no longer allows relaying calls.\n    function getDeprecationTime() external view returns (uint256);\n\n    /// @return The block number in which the contract has been deployed.\n    function getCreationBlock() external view returns (uint256);\n\n    /// @return a SemVer-compliant version of the `RelayHub` contract.\n    function versionHub() external view returns (string memory);\n\n    /// @return A total measurable amount of gas left to current execution. Same as 'gasleft()' for pure EVMs.\n    function aggregateGasleft() external view returns (uint256);\n}",
    "sourcePath": "/Users/alexf/gsn2/packages/contracts/solpp/interfaces/IRelayHub.sol",
    "ast": {
        "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/interfaces/IRelayHub.sol",
        "exportedSymbols": {
            "ERC165": [
                12146
            ],
            "GsnTypes": [
                8492
            ],
            "IERC165": [
                12352
            ],
            "IERC20": [
                10849
            ],
            "IForwarder": [
                5129
            ],
            "IRelayHub": [
                5896
            ],
            "IStakeManager": [
                6284
            ]
        },
        "id": 5897,
        "license": "GPL-3.0-only",
        "nodeType": "SourceUnit",
        "nodes": [
            {
                "id": 5530,
                "literals": [
                    "solidity",
                    ">=",
                    "0.7",
                    ".6"
                ],
                "nodeType": "PragmaDirective",
                "src": "0:24:16"
            },
            {
                "id": 5531,
                "literals": [
                    "abicoder",
                    "v2"
                ],
                "nodeType": "PragmaDirective",
                "src": "25:19:16"
            },
            {
                "absolutePath": "@openzeppelin/contracts/interfaces/IERC165.sol",
                "file": "@openzeppelin/contracts/interfaces/IERC165.sol",
                "id": 5532,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 5897,
                "sourceUnit": 10186,
                "src": "88:56:16",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/utils/GsnTypes.sol",
                "file": "../utils/GsnTypes.sol",
                "id": 5533,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 5897,
                "sourceUnit": 8493,
                "src": "146:31:16",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/interfaces/IStakeManager.sol",
                "file": "./IStakeManager.sol",
                "id": 5534,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 5897,
                "sourceUnit": 6285,
                "src": "178:29:16",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "abstract": false,
                "baseContracts": [
                    {
                        "baseName": {
                            "id": 5536,
                            "name": "IERC165",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 12352,
                            "src": "1023:7:16"
                        },
                        "id": 5537,
                        "nodeType": "InheritanceSpecifier",
                        "src": "1023:7:16"
                    }
                ],
                "contractDependencies": [],
                "contractKind": "interface",
                "documentation": {
                    "id": 5535,
                    "nodeType": "StructuredDocumentation",
                    "src": "209:790:16",
                    "text": " @title The RelayHub interface\n @notice The implementation of this interface provides all the information the GSN client needs to\n create a valid `RelayRequest` and also serves as an entry point for such requests.\n @notice The RelayHub also handles all the related financial records and hold the balances of participants.\n The Paymasters keep their Ether deposited in the `RelayHub` in order to pay for the `RelayRequest`s that thay choose\n to pay for, and Relay Servers keep their earned Ether in the `RelayHub` until they choose to `withdraw()`\n @notice The RelayHub on each supported network only needs a single instance and there is usually no need for dApp\n developers or Relay Server operators to redeploy, reimplement, modify or override the `RelayHub`."
                },
                "fullyImplemented": false,
                "id": 5896,
                "linearizedBaseContracts": [
                    5896,
                    12352
                ],
                "name": "IRelayHub",
                "nameLocation": "1010:9:16",
                "nodeType": "ContractDefinition",
                "nodes": [
                    {
                        "canonicalName": "IRelayHub.RelayHubConfig",
                        "id": 5556,
                        "members": [
                            {
                                "constant": false,
                                "id": 5539,
                                "mutability": "mutable",
                                "name": "maxWorkerCount",
                                "nameLocation": "1276:14:16",
                                "nodeType": "VariableDeclaration",
                                "scope": 5556,
                                "src": "1268:22:16",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                },
                                "typeName": {
                                    "id": 5538,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "1268:7:16",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 5541,
                                "mutability": "mutable",
                                "name": "gasReserve",
                                "nameLocation": "1410:10:16",
                                "nodeType": "VariableDeclaration",
                                "scope": 5556,
                                "src": "1402:18:16",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                },
                                "typeName": {
                                    "id": 5540,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "1402:7:16",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 5543,
                                "mutability": "mutable",
                                "name": "postOverhead",
                                "nameLocation": "1493:12:16",
                                "nodeType": "VariableDeclaration",
                                "scope": 5556,
                                "src": "1485:20:16",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                },
                                "typeName": {
                                    "id": 5542,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "1485:7:16",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 5545,
                                "mutability": "mutable",
                                "name": "gasOverhead",
                                "nameLocation": "1689:11:16",
                                "nodeType": "VariableDeclaration",
                                "scope": 5556,
                                "src": "1681:19:16",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                },
                                "typeName": {
                                    "id": 5544,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "1681:7:16",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 5547,
                                "mutability": "mutable",
                                "name": "minimumUnstakeDelay",
                                "nameLocation": "1806:19:16",
                                "nodeType": "VariableDeclaration",
                                "scope": 5556,
                                "src": "1798:27:16",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                },
                                "typeName": {
                                    "id": 5546,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "1798:7:16",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 5549,
                                "mutability": "mutable",
                                "name": "devAddress",
                                "nameLocation": "1873:10:16",
                                "nodeType": "VariableDeclaration",
                                "scope": 5556,
                                "src": "1865:18:16",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                },
                                "typeName": {
                                    "id": 5548,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "1865:7:16",
                                    "stateMutability": "nonpayable",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 5551,
                                "mutability": "mutable",
                                "name": "devFee",
                                "nameLocation": "1981:6:16",
                                "nodeType": "VariableDeclaration",
                                "scope": 5556,
                                "src": "1975:12:16",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                },
                                "typeName": {
                                    "id": 5550,
                                    "name": "uint8",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "1975:5:16",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 5553,
                                "mutability": "mutable",
                                "name": "baseRelayFee",
                                "nameLocation": "2109:12:16",
                                "nodeType": "VariableDeclaration",
                                "scope": 5556,
                                "src": "2102:19:16",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint80",
                                    "typeString": "uint80"
                                },
                                "typeName": {
                                    "id": 5552,
                                    "name": "uint80",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "2102:6:16",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint80",
                                        "typeString": "uint80"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 5555,
                                "mutability": "mutable",
                                "name": "pctRelayFee",
                                "nameLocation": "2243:11:16",
                                "nodeType": "VariableDeclaration",
                                "scope": 5556,
                                "src": "2236:18:16",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint16",
                                    "typeString": "uint16"
                                },
                                "typeName": {
                                    "id": 5554,
                                    "name": "uint16",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "2236:6:16",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint16",
                                        "typeString": "uint16"
                                    }
                                },
                                "visibility": "internal"
                            }
                        ],
                        "name": "RelayHubConfig",
                        "nameLocation": "1178:14:16",
                        "nodeType": "StructDefinition",
                        "scope": 5896,
                        "src": "1171:1090:16",
                        "visibility": "public"
                    },
                    {
                        "anonymous": false,
                        "documentation": {
                            "id": 5557,
                            "nodeType": "StructuredDocumentation",
                            "src": "2267:69:16",
                            "text": "@notice Emitted when a configuration of the `RelayHub` is changed"
                        },
                        "id": 5562,
                        "name": "RelayHubConfigured",
                        "nameLocation": "2347:18:16",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 5561,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5560,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "config",
                                    "nameLocation": "2381:6:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5562,
                                    "src": "2366:21:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RelayHubConfig_$5556_memory_ptr",
                                        "typeString": "struct IRelayHub.RelayHubConfig"
                                    },
                                    "typeName": {
                                        "id": 5559,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 5558,
                                            "name": "RelayHubConfig",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 5556,
                                            "src": "2366:14:16"
                                        },
                                        "referencedDeclaration": 5556,
                                        "src": "2366:14:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayHubConfig_$5556_storage_ptr",
                                            "typeString": "struct IRelayHub.RelayHubConfig"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2365:23:16"
                        },
                        "src": "2341:48:16"
                    },
                    {
                        "anonymous": false,
                        "documentation": {
                            "id": 5563,
                            "nodeType": "StructuredDocumentation",
                            "src": "2395:59:16",
                            "text": "@notice Emitted when relays are added by a relayManager"
                        },
                        "id": 5572,
                        "name": "RelayWorkersAdded",
                        "nameLocation": "2465:17:16",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 5571,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5565,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "2508:12:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5572,
                                    "src": "2492:28:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5564,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2492:7:16",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5568,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "newRelayWorkers",
                                    "nameLocation": "2540:15:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5572,
                                    "src": "2530:25:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                        "typeString": "address[]"
                                    },
                                    "typeName": {
                                        "baseType": {
                                            "id": 5566,
                                            "name": "address",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "2530:7:16",
                                            "stateMutability": "nonpayable",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "id": 5567,
                                        "nodeType": "ArrayTypeName",
                                        "src": "2530:9:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                                            "typeString": "address[]"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5570,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "workersCount",
                                    "nameLocation": "2573:12:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5572,
                                    "src": "2565:20:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 5569,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2565:7:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2482:109:16"
                        },
                        "src": "2459:133:16"
                    },
                    {
                        "anonymous": false,
                        "documentation": {
                            "id": 5573,
                            "nodeType": "StructuredDocumentation",
                            "src": "2598:72:16",
                            "text": "@notice Emitted when an account withdraws funds from the `RelayHub`."
                        },
                        "id": 5581,
                        "name": "Withdrawn",
                        "nameLocation": "2681:9:16",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 5580,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5575,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "account",
                                    "nameLocation": "2716:7:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5581,
                                    "src": "2700:23:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5574,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2700:7:16",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5577,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "dest",
                                    "nameLocation": "2749:4:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5581,
                                    "src": "2733:20:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5576,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2733:7:16",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5579,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "amount",
                                    "nameLocation": "2771:6:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5581,
                                    "src": "2763:14:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 5578,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2763:7:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2690:93:16"
                        },
                        "src": "2675:109:16"
                    },
                    {
                        "anonymous": false,
                        "documentation": {
                            "id": 5582,
                            "nodeType": "StructuredDocumentation",
                            "src": "2790:98:16",
                            "text": "@notice Emitted when `depositFor` is called, including the amount and account that was funded."
                        },
                        "id": 5590,
                        "name": "Deposited",
                        "nameLocation": "2899:9:16",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 5589,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5584,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "paymaster",
                                    "nameLocation": "2934:9:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5590,
                                    "src": "2918:25:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5583,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2918:7:16",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5586,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "from",
                                    "nameLocation": "2969:4:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5590,
                                    "src": "2953:20:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5585,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2953:7:16",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5588,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "amount",
                                    "nameLocation": "2991:6:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5590,
                                    "src": "2983:14:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 5587,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2983:7:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2908:95:16"
                        },
                        "src": "2893:111:16"
                    },
                    {
                        "anonymous": false,
                        "documentation": {
                            "id": 5591,
                            "nodeType": "StructuredDocumentation",
                            "src": "3010:77:16",
                            "text": "@notice Emitted for each token configured for staking in setMinimumStakes"
                        },
                        "id": 5597,
                        "name": "StakingTokenDataChanged",
                        "nameLocation": "3098:23:16",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 5596,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5593,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "token",
                                    "nameLocation": "3139:5:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5597,
                                    "src": "3131:13:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5592,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3131:7:16",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5595,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "minimumStake",
                                    "nameLocation": "3162:12:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5597,
                                    "src": "3154:20:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 5594,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3154:7:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3121:59:16"
                        },
                        "src": "3092:89:16"
                    },
                    {
                        "anonymous": false,
                        "documentation": {
                            "id": 5598,
                            "nodeType": "StructuredDocumentation",
                            "src": "3187:294:16",
                            "text": " @notice Emitted when an attempt to relay a call fails and the `Paymaster` does not accept the transaction.\n The actual relayed call was not executed, and the recipient not charged.\n @param reason contains a revert reason returned from preRelayedCall or forwarder."
                        },
                        "id": 5618,
                        "name": "TransactionRejectedByPaymaster",
                        "nameLocation": "3492:30:16",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 5617,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5600,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "3548:12:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5618,
                                    "src": "3532:28:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5599,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3532:7:16",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5602,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "paymaster",
                                    "nameLocation": "3586:9:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5618,
                                    "src": "3570:25:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5601,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3570:7:16",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5604,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "relayRequestID",
                                    "nameLocation": "3621:14:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5618,
                                    "src": "3605:30:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 5603,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3605:7:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5606,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "from",
                                    "nameLocation": "3653:4:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5618,
                                    "src": "3645:12:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5605,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3645:7:16",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5608,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "to",
                                    "nameLocation": "3675:2:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5618,
                                    "src": "3667:10:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5607,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3667:7:16",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5610,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "relayWorker",
                                    "nameLocation": "3695:11:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5618,
                                    "src": "3687:19:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5609,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3687:7:16",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5612,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "selector",
                                    "nameLocation": "3723:8:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5618,
                                    "src": "3716:15:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes4",
                                        "typeString": "bytes4"
                                    },
                                    "typeName": {
                                        "id": 5611,
                                        "name": "bytes4",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3716:6:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes4",
                                            "typeString": "bytes4"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5614,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "innerGasUsed",
                                    "nameLocation": "3749:12:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5618,
                                    "src": "3741:20:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 5613,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3741:7:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5616,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "reason",
                                    "nameLocation": "3777:6:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5618,
                                    "src": "3771:12:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 5615,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3771:5:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3522:267:16"
                        },
                        "src": "3486:304:16"
                    },
                    {
                        "anonymous": false,
                        "documentation": {
                            "id": 5619,
                            "nodeType": "StructuredDocumentation",
                            "src": "3796:444:16",
                            "text": " @notice Emitted when a transaction is relayed. Note that the actual internal function call might be reverted.\n The reason for a revert will be indicated in the `status` field of a corresponding `RelayCallStatus` value.\n @notice `charge` is the Ether value deducted from the `Paymaster` balance.\n The amount added to the `relayManager` balance will be lower if there is an activated `devFee` in the `config`."
                        },
                        "id": 5640,
                        "name": "TransactionRelayed",
                        "nameLocation": "4251:18:16",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 5639,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5621,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "4295:12:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5640,
                                    "src": "4279:28:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5620,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4279:7:16",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5623,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "relayWorker",
                                    "nameLocation": "4333:11:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5640,
                                    "src": "4317:27:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5622,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4317:7:16",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5625,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "relayRequestID",
                                    "nameLocation": "4370:14:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5640,
                                    "src": "4354:30:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 5624,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4354:7:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5627,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "from",
                                    "nameLocation": "4402:4:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5640,
                                    "src": "4394:12:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5626,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4394:7:16",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5629,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "to",
                                    "nameLocation": "4424:2:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5640,
                                    "src": "4416:10:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5628,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4416:7:16",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5631,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "paymaster",
                                    "nameLocation": "4444:9:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5640,
                                    "src": "4436:17:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5630,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4436:7:16",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5633,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "selector",
                                    "nameLocation": "4470:8:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5640,
                                    "src": "4463:15:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes4",
                                        "typeString": "bytes4"
                                    },
                                    "typeName": {
                                        "id": 5632,
                                        "name": "bytes4",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4463:6:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes4",
                                            "typeString": "bytes4"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5636,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "status",
                                    "nameLocation": "4504:6:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5640,
                                    "src": "4488:22:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                    },
                                    "typeName": {
                                        "id": 5635,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 5634,
                                            "name": "RelayCallStatus",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 5668,
                                            "src": "4488:15:16"
                                        },
                                        "referencedDeclaration": 5668,
                                        "src": "4488:15:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                            "typeString": "enum IRelayHub.RelayCallStatus"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5638,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "charge",
                                    "nameLocation": "4528:6:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5640,
                                    "src": "4520:14:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 5637,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4520:7:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4269:271:16"
                        },
                        "src": "4245:296:16"
                    },
                    {
                        "anonymous": false,
                        "documentation": {
                            "id": 5641,
                            "nodeType": "StructuredDocumentation",
                            "src": "4547:112:16",
                            "text": "@notice This event is emitted in case the internal function returns a value or reverts with a revert string."
                        },
                        "id": 5648,
                        "name": "TransactionResult",
                        "nameLocation": "4670:17:16",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 5647,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5644,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "status",
                                    "nameLocation": "4713:6:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5648,
                                    "src": "4697:22:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                    },
                                    "typeName": {
                                        "id": 5643,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 5642,
                                            "name": "RelayCallStatus",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 5668,
                                            "src": "4697:15:16"
                                        },
                                        "referencedDeclaration": 5668,
                                        "src": "4697:15:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                            "typeString": "enum IRelayHub.RelayCallStatus"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5646,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "returnValue",
                                    "nameLocation": "4735:11:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5648,
                                    "src": "4729:17:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 5645,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4729:5:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4687:65:16"
                        },
                        "src": "4664:89:16"
                    },
                    {
                        "anonymous": false,
                        "documentation": {
                            "id": 5649,
                            "nodeType": "StructuredDocumentation",
                            "src": "4759:112:16",
                            "text": "@notice This event is emitted in case this `RelayHub` is deprecated and will stop serving transactions soon."
                        },
                        "id": 5653,
                        "name": "HubDeprecated",
                        "nameLocation": "4882:13:16",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 5652,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5651,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "deprecationTime",
                                    "nameLocation": "4904:15:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5653,
                                    "src": "4896:23:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 5650,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4896:7:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4895:25:16"
                        },
                        "src": "4876:45:16"
                    },
                    {
                        "anonymous": false,
                        "documentation": {
                            "id": 5654,
                            "nodeType": "StructuredDocumentation",
                            "src": "4927:269:16",
                            "text": " @notice This event is emitted in case a `relayManager` has been deemed \"abandoned\" for being\n unresponsive for a prolonged period of time.\n @notice This event means the entire balance of the relay has been transferred to the `devAddress`."
                        },
                        "id": 5660,
                        "name": "AbandonedRelayManagerBalanceEscheated",
                        "nameLocation": "5207:37:16",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 5659,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5656,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "5270:12:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5660,
                                    "src": "5254:28:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5655,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5254:7:16",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5658,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "balance",
                                    "nameLocation": "5300:7:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5660,
                                    "src": "5292:15:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 5657,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5292:7:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "5244:69:16"
                        },
                        "src": "5201:113:16"
                    },
                    {
                        "canonicalName": "IRelayHub.RelayCallStatus",
                        "id": 5668,
                        "members": [
                            {
                                "id": 5661,
                                "name": "OK",
                                "nameLocation": "6129:2:16",
                                "nodeType": "EnumValue",
                                "src": "6129:2:16"
                            },
                            {
                                "id": 5662,
                                "name": "RelayedCallFailed",
                                "nameLocation": "6141:17:16",
                                "nodeType": "EnumValue",
                                "src": "6141:17:16"
                            },
                            {
                                "id": 5663,
                                "name": "RejectedByPreRelayed",
                                "nameLocation": "6168:20:16",
                                "nodeType": "EnumValue",
                                "src": "6168:20:16"
                            },
                            {
                                "id": 5664,
                                "name": "RejectedByForwarder",
                                "nameLocation": "6198:19:16",
                                "nodeType": "EnumValue",
                                "src": "6198:19:16"
                            },
                            {
                                "id": 5665,
                                "name": "RejectedByRecipientRevert",
                                "nameLocation": "6227:25:16",
                                "nodeType": "EnumValue",
                                "src": "6227:25:16"
                            },
                            {
                                "id": 5666,
                                "name": "PostRelayedFailed",
                                "nameLocation": "6262:17:16",
                                "nodeType": "EnumValue",
                                "src": "6262:17:16"
                            },
                            {
                                "id": 5667,
                                "name": "PaymasterBalanceChanged",
                                "nameLocation": "6289:23:16",
                                "nodeType": "EnumValue",
                                "src": "6289:23:16"
                            }
                        ],
                        "name": "RelayCallStatus",
                        "nameLocation": "6103:15:16",
                        "nodeType": "EnumDefinition",
                        "src": "6098:220:16"
                    },
                    {
                        "documentation": {
                            "id": 5669,
                            "nodeType": "StructuredDocumentation",
                            "src": "6324:234:16",
                            "text": " @notice Add new worker addresses controlled by the sender who must be a staked Relay Manager address.\n Emits a `RelayWorkersAdded` event.\n This function can be called multiple times, emitting new events."
                        },
                        "functionSelector": "c2da0786",
                        "id": 5675,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "addRelayWorkers",
                        "nameLocation": "6572:15:16",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5673,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5672,
                                    "mutability": "mutable",
                                    "name": "newRelayWorkers",
                                    "nameLocation": "6607:15:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5675,
                                    "src": "6588:34:16",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                        "typeString": "address[]"
                                    },
                                    "typeName": {
                                        "baseType": {
                                            "id": 5670,
                                            "name": "address",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "6588:7:16",
                                            "stateMutability": "nonpayable",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "id": 5671,
                                        "nodeType": "ArrayTypeName",
                                        "src": "6588:9:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                                            "typeString": "address[]"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "6587:36:16"
                        },
                        "returnParameters": {
                            "id": 5674,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "6632:0:16"
                        },
                        "scope": 5896,
                        "src": "6563:70:16",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5676,
                            "nodeType": "StructuredDocumentation",
                            "src": "6639:132:16",
                            "text": " @notice The `RelayRegistrar` callback to notify the `RelayHub` that this `relayManager` has updated registration."
                        },
                        "functionSelector": "4f7de031",
                        "id": 5681,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "onRelayServerRegistered",
                        "nameLocation": "6785:23:16",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5679,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5678,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "6817:12:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5681,
                                    "src": "6809:20:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5677,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6809:7:16",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "6808:22:16"
                        },
                        "returnParameters": {
                            "id": 5680,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "6839:0:16"
                        },
                        "scope": 5896,
                        "src": "6776:64:16",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5682,
                            "nodeType": "StructuredDocumentation",
                            "src": "6873:264:16",
                            "text": " @notice Deposits ether for a `Paymaster`, so that it can and pay for relayed transactions.\n :warning: **Warning** :warning: Unused balance can only be withdrawn by the holder itself, by calling `withdraw`.\n Emits a `Deposited` event."
                        },
                        "functionSelector": "aa67c919",
                        "id": 5687,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "depositFor",
                        "nameLocation": "7151:10:16",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5685,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5684,
                                    "mutability": "mutable",
                                    "name": "target",
                                    "nameLocation": "7170:6:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5687,
                                    "src": "7162:14:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5683,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "7162:7:16",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "7161:16:16"
                        },
                        "returnParameters": {
                            "id": 5686,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "7194:0:16"
                        },
                        "scope": 5896,
                        "src": "7142:53:16",
                        "stateMutability": "payable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5688,
                            "nodeType": "StructuredDocumentation",
                            "src": "7201:245:16",
                            "text": " @notice Withdraws from an account's balance, sending it back to the caller.\n Relay Managers call this to retrieve their revenue, and `Paymasters` can also use it to reduce their funding.\n Emits a `Withdrawn` event."
                        },
                        "functionSelector": "f3fef3a3",
                        "id": 5695,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "withdraw",
                        "nameLocation": "7460:8:16",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5693,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5690,
                                    "mutability": "mutable",
                                    "name": "dest",
                                    "nameLocation": "7485:4:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5695,
                                    "src": "7469:20:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address_payable",
                                        "typeString": "address payable"
                                    },
                                    "typeName": {
                                        "id": 5689,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "7469:15:16",
                                        "stateMutability": "payable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address_payable",
                                            "typeString": "address payable"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5692,
                                    "mutability": "mutable",
                                    "name": "amount",
                                    "nameLocation": "7499:6:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5695,
                                    "src": "7491:14:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 5691,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "7491:7:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "7468:38:16"
                        },
                        "returnParameters": {
                            "id": 5694,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "7515:0:16"
                        },
                        "scope": 5896,
                        "src": "7451:65:16",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5696,
                            "nodeType": "StructuredDocumentation",
                            "src": "7522:281:16",
                            "text": " @notice Withdraws from an account's balance, sending funds to multiple provided addresses.\n Relay Managers call this to retrieve their revenue, and `Paymasters` can also use it to reduce their funding.\n Emits a `Withdrawn` event for each destination."
                        },
                        "functionSelector": "72c1ab0c",
                        "id": 5705,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "withdrawMultiple",
                        "nameLocation": "7817:16:16",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5703,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5699,
                                    "mutability": "mutable",
                                    "name": "dest",
                                    "nameLocation": "7859:4:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5705,
                                    "src": "7834:29:16",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_payable_$dyn_memory_ptr",
                                        "typeString": "address payable[]"
                                    },
                                    "typeName": {
                                        "baseType": {
                                            "id": 5697,
                                            "name": "address",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "7834:15:16",
                                            "stateMutability": "payable",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address_payable",
                                                "typeString": "address payable"
                                            }
                                        },
                                        "id": 5698,
                                        "nodeType": "ArrayTypeName",
                                        "src": "7834:17:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_address_payable_$dyn_storage_ptr",
                                            "typeString": "address payable[]"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5702,
                                    "mutability": "mutable",
                                    "name": "amount",
                                    "nameLocation": "7882:6:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5705,
                                    "src": "7865:23:16",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                        "typeString": "uint256[]"
                                    },
                                    "typeName": {
                                        "baseType": {
                                            "id": 5700,
                                            "name": "uint256",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "7865:7:16",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "id": 5701,
                                        "nodeType": "ArrayTypeName",
                                        "src": "7865:9:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                                            "typeString": "uint256[]"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "7833:56:16"
                        },
                        "returnParameters": {
                            "id": 5704,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "7898:0:16"
                        },
                        "scope": 5896,
                        "src": "7808:91:16",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5706,
                            "nodeType": "StructuredDocumentation",
                            "src": "7922:1478:16",
                            "text": " @notice Relays a transaction. For this to succeed, multiple conditions must be met:\n  - `Paymaster`'s `preRelayCall` method must succeed and not revert.\n  - the `msg.sender` must be a registered Relay Worker that the user signed to use.\n  - the transaction's gas fees must be equal or larger than the ones that were signed by the sender.\n  - the transaction must have enough gas to run all internal transactions if they use all gas available to them.\n  - the `Paymaster` must have enough balance to pay the Relay Worker if all gas is spent.\n @notice If all conditions are met, the call will be relayed and the `Paymaster` charged.\n @param domainSeparatorName The name of the Domain Separator used to verify the EIP-712 signature\n @param maxAcceptanceBudget The maximum valid value for `paymaster.getGasLimits().acceptanceBudget` to return.\n @param relayRequest All details of the requested relayed call.\n @param signature The client's EIP-712 signature over the `relayRequest` struct.\n @param approvalData The dapp-specific data forwarded to the `Paymaster`'s `preRelayedCall` method.\n This value is **not** verified by the `RelayHub` in any way.\n As an example, it can be used to pass some kind of a third-party signature to the `Paymaster` for verification.\n Emits a `TransactionRelayed` event regardless of whether the transaction succeeded or failed."
                        },
                        "functionSelector": "6ca862e2",
                        "id": 5729,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "relayCall",
                        "nameLocation": "9414:9:16",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5718,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5708,
                                    "mutability": "mutable",
                                    "name": "domainSeparatorName",
                                    "nameLocation": "9449:19:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5729,
                                    "src": "9433:35:16",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_calldata_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 5707,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "9433:6:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5710,
                                    "mutability": "mutable",
                                    "name": "maxAcceptanceBudget",
                                    "nameLocation": "9486:19:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5729,
                                    "src": "9478:27:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 5709,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "9478:7:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5713,
                                    "mutability": "mutable",
                                    "name": "relayRequest",
                                    "nameLocation": "9546:12:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5729,
                                    "src": "9515:43:16",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                        "typeString": "struct GsnTypes.RelayRequest"
                                    },
                                    "typeName": {
                                        "id": 5712,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 5711,
                                            "name": "GsnTypes.RelayRequest",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 8491,
                                            "src": "9515:21:16"
                                        },
                                        "referencedDeclaration": 8491,
                                        "src": "9515:21:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_storage_ptr",
                                            "typeString": "struct GsnTypes.RelayRequest"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5715,
                                    "mutability": "mutable",
                                    "name": "signature",
                                    "nameLocation": "9583:9:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5729,
                                    "src": "9568:24:16",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 5714,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "9568:5:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5717,
                                    "mutability": "mutable",
                                    "name": "approvalData",
                                    "nameLocation": "9617:12:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5729,
                                    "src": "9602:27:16",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 5716,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "9602:5:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "9423:212:16"
                        },
                        "returnParameters": {
                            "id": 5728,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5720,
                                    "mutability": "mutable",
                                    "name": "paymasterAccepted",
                                    "nameLocation": "9676:17:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5729,
                                    "src": "9671:22:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 5719,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "9671:4:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5722,
                                    "mutability": "mutable",
                                    "name": "charge",
                                    "nameLocation": "9711:6:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5729,
                                    "src": "9703:14:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 5721,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "9703:7:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5725,
                                    "mutability": "mutable",
                                    "name": "status",
                                    "nameLocation": "9753:6:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5729,
                                    "src": "9727:32:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                    },
                                    "typeName": {
                                        "id": 5724,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 5723,
                                            "name": "IRelayHub.RelayCallStatus",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 5668,
                                            "src": "9727:25:16"
                                        },
                                        "referencedDeclaration": 5668,
                                        "src": "9727:25:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                            "typeString": "enum IRelayHub.RelayCallStatus"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5727,
                                    "mutability": "mutable",
                                    "name": "returnValue",
                                    "nameLocation": "9782:11:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5729,
                                    "src": "9769:24:16",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 5726,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "9769:5:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "9661:138:16"
                        },
                        "scope": 5896,
                        "src": "9405:395:16",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5730,
                            "nodeType": "StructuredDocumentation",
                            "src": "9806:604:16",
                            "text": " @notice In case the Relay Worker has been found to be in violation of some rules by the `Penalizer` contract,\n the `Penalizer` will call this method to execute a penalization.\n The `RelayHub` will look up the Relay Manager of the given Relay Worker and will forward the call to\n the `StakeManager` contract. The `RelayHub` does not perform the actual penalization either.\n @param relayWorker The address of the Relay Worker that committed a penalizable offense.\n @param beneficiary The address that called the `Penalizer` and will receive a reward for it."
                        },
                        "functionSelector": "ebcd31ac",
                        "id": 5737,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "penalize",
                        "nameLocation": "10424:8:16",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5735,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5732,
                                    "mutability": "mutable",
                                    "name": "relayWorker",
                                    "nameLocation": "10441:11:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5737,
                                    "src": "10433:19:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5731,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "10433:7:16",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5734,
                                    "mutability": "mutable",
                                    "name": "beneficiary",
                                    "nameLocation": "10470:11:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5737,
                                    "src": "10454:27:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address_payable",
                                        "typeString": "address payable"
                                    },
                                    "typeName": {
                                        "id": 5733,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "10454:15:16",
                                        "stateMutability": "payable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address_payable",
                                            "typeString": "address payable"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "10432:50:16"
                        },
                        "returnParameters": {
                            "id": 5736,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "10491:0:16"
                        },
                        "scope": 5896,
                        "src": "10415:77:16",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5738,
                            "nodeType": "StructuredDocumentation",
                            "src": "10498:125:16",
                            "text": " @notice Sets or changes the configuration of this `RelayHub`.\n @param _config The new configuration."
                        },
                        "functionSelector": "9bcde3f3",
                        "id": 5744,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "setConfiguration",
                        "nameLocation": "10637:16:16",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5742,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5741,
                                    "mutability": "mutable",
                                    "name": "_config",
                                    "nameLocation": "10676:7:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5744,
                                    "src": "10654:29:16",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RelayHubConfig_$5556_memory_ptr",
                                        "typeString": "struct IRelayHub.RelayHubConfig"
                                    },
                                    "typeName": {
                                        "id": 5740,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 5739,
                                            "name": "RelayHubConfig",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 5556,
                                            "src": "10654:14:16"
                                        },
                                        "referencedDeclaration": 5556,
                                        "src": "10654:14:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayHubConfig_$5556_storage_ptr",
                                            "typeString": "struct IRelayHub.RelayHubConfig"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "10653:31:16"
                        },
                        "returnParameters": {
                            "id": 5743,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "10693:0:16"
                        },
                        "scope": 5896,
                        "src": "10628:66:16",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5745,
                            "nodeType": "StructuredDocumentation",
                            "src": "10700:413:16",
                            "text": " @notice Sets or changes the minimum amount of a given `token` that needs to be staked so that the Relay Manager\n is considered to be 'staked' by this `RelayHub`. Zero value means this token is not allowed for staking.\n @param token An array of addresses of ERC-20 compatible tokens.\n @param minimumStake An array of minimal amounts necessary for a corresponding token, in wei."
                        },
                        "functionSelector": "8a09fb56",
                        "id": 5755,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "setMinimumStakes",
                        "nameLocation": "11127:16:16",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5753,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5749,
                                    "mutability": "mutable",
                                    "name": "token",
                                    "nameLocation": "11160:5:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5755,
                                    "src": "11144:21:16",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_contract$_IERC20_$10849_$dyn_memory_ptr",
                                        "typeString": "contract IERC20[]"
                                    },
                                    "typeName": {
                                        "baseType": {
                                            "id": 5747,
                                            "nodeType": "UserDefinedTypeName",
                                            "pathNode": {
                                                "id": 5746,
                                                "name": "IERC20",
                                                "nodeType": "IdentifierPath",
                                                "referencedDeclaration": 10849,
                                                "src": "11144:6:16"
                                            },
                                            "referencedDeclaration": 10849,
                                            "src": "11144:6:16",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_contract$_IERC20_$10849",
                                                "typeString": "contract IERC20"
                                            }
                                        },
                                        "id": 5748,
                                        "nodeType": "ArrayTypeName",
                                        "src": "11144:8:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_contract$_IERC20_$10849_$dyn_storage_ptr",
                                            "typeString": "contract IERC20[]"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5752,
                                    "mutability": "mutable",
                                    "name": "minimumStake",
                                    "nameLocation": "11184:12:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5755,
                                    "src": "11167:29:16",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                        "typeString": "uint256[]"
                                    },
                                    "typeName": {
                                        "baseType": {
                                            "id": 5750,
                                            "name": "uint256",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "11167:7:16",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "id": 5751,
                                        "nodeType": "ArrayTypeName",
                                        "src": "11167:9:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                                            "typeString": "uint256[]"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "11143:54:16"
                        },
                        "returnParameters": {
                            "id": 5754,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "11206:0:16"
                        },
                        "scope": 5896,
                        "src": "11118:89:16",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5756,
                            "nodeType": "StructuredDocumentation",
                            "src": "11213:229:16",
                            "text": " @notice Deprecate hub by reverting all incoming `relayCall()` calls starting from a given timestamp\n @param _deprecationTime The timestamp in seconds after which the `RelayHub` stops serving transactions."
                        },
                        "functionSelector": "af595dfc",
                        "id": 5761,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "deprecateHub",
                        "nameLocation": "11456:12:16",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5759,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5758,
                                    "mutability": "mutable",
                                    "name": "_deprecationTime",
                                    "nameLocation": "11477:16:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5761,
                                    "src": "11469:24:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 5757,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "11469:7:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "11468:26:16"
                        },
                        "returnParameters": {
                            "id": 5760,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "11503:0:16"
                        },
                        "scope": 5896,
                        "src": "11447:57:16",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5762,
                            "nodeType": "StructuredDocumentation",
                            "src": "11510:53:16",
                            "text": " @notice\n @param relayManager"
                        },
                        "functionSelector": "d26152f9",
                        "id": 5767,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "escheatAbandonedRelayBalance",
                        "nameLocation": "11577:28:16",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5765,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5764,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "11614:12:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5767,
                                    "src": "11606:20:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5763,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "11606:7:16",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "11605:22:16"
                        },
                        "returnParameters": {
                            "id": 5766,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "11636:0:16"
                        },
                        "scope": 5896,
                        "src": "11568:69:16",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5768,
                            "nodeType": "StructuredDocumentation",
                            "src": "11643:411:16",
                            "text": " @notice The fee is expressed as a base fee in wei plus percentage of the actual charge.\n For example, a value '40' stands for a 40% fee, so the recipient will be charged for 1.4 times the spent amount.\n @param gasUsed An amount of gas used by the transaction.\n @param relayData The details of a transaction signed by the sender.\n @return The calculated charge, in wei."
                        },
                        "functionSelector": "8e53548b",
                        "id": 5778,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "calculateCharge",
                        "nameLocation": "12068:15:16",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5774,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5770,
                                    "mutability": "mutable",
                                    "name": "gasUsed",
                                    "nameLocation": "12092:7:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5778,
                                    "src": "12084:15:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 5769,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "12084:7:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5773,
                                    "mutability": "mutable",
                                    "name": "relayData",
                                    "nameLocation": "12129:9:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5778,
                                    "src": "12101:37:16",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                        "typeString": "struct GsnTypes.RelayData"
                                    },
                                    "typeName": {
                                        "id": 5772,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 5771,
                                            "name": "GsnTypes.RelayData",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 8484,
                                            "src": "12101:18:16"
                                        },
                                        "referencedDeclaration": 8484,
                                        "src": "12101:18:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayData_$8484_storage_ptr",
                                            "typeString": "struct GsnTypes.RelayData"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "12083:56:16"
                        },
                        "returnParameters": {
                            "id": 5777,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5776,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5778,
                                    "src": "12163:7:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 5775,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "12163:7:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "12162:9:16"
                        },
                        "scope": 5896,
                        "src": "12059:113:16",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5779,
                            "nodeType": "StructuredDocumentation",
                            "src": "12178:343:16",
                            "text": " @notice The fee is expressed as a  percentage of the actual charge.\n For example, a value '40' stands for a 40% fee, so the Relay Manager will only get 60% of the `charge`.\n @param charge The amount of Ether in wei the Paymaster will be charged for this transaction.\n @return The calculated devFee, in wei."
                        },
                        "functionSelector": "8ac3b845",
                        "id": 5786,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "calculateDevCharge",
                        "nameLocation": "12535:18:16",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5782,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5781,
                                    "mutability": "mutable",
                                    "name": "charge",
                                    "nameLocation": "12562:6:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5786,
                                    "src": "12554:14:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 5780,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "12554:7:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "12553:16:16"
                        },
                        "returnParameters": {
                            "id": 5785,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5784,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5786,
                                    "src": "12593:7:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 5783,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "12593:7:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "12592:9:16"
                        },
                        "scope": 5896,
                        "src": "12526:76:16",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5787,
                            "nodeType": "StructuredDocumentation",
                            "src": "12626:55:16",
                            "text": "@return config The configuration of the `RelayHub`."
                        },
                        "functionSelector": "6bd50cef",
                        "id": 5793,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getConfiguration",
                        "nameLocation": "12695:16:16",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5788,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "12711:2:16"
                        },
                        "returnParameters": {
                            "id": 5792,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5791,
                                    "mutability": "mutable",
                                    "name": "config",
                                    "nameLocation": "12759:6:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5793,
                                    "src": "12737:28:16",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RelayHubConfig_$5556_memory_ptr",
                                        "typeString": "struct IRelayHub.RelayHubConfig"
                                    },
                                    "typeName": {
                                        "id": 5790,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 5789,
                                            "name": "RelayHubConfig",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 5556,
                                            "src": "12737:14:16"
                                        },
                                        "referencedDeclaration": 5556,
                                        "src": "12737:14:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayHubConfig_$5556_storage_ptr",
                                            "typeString": "struct IRelayHub.RelayHubConfig"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "12736:30:16"
                        },
                        "scope": 5896,
                        "src": "12686:81:16",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5794,
                            "nodeType": "StructuredDocumentation",
                            "src": "12773:289:16",
                            "text": " @param token An address of an ERC-20 compatible tokens.\n @return The minimum amount of a given `token` that needs to be staked so that the Relay Manager\n is considered to be 'staked' by this `RelayHub`. Zero value means this token is not allowed for staking."
                        },
                        "functionSelector": "ddf73789",
                        "id": 5802,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getMinimumStakePerToken",
                        "nameLocation": "13076:23:16",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5798,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5797,
                                    "mutability": "mutable",
                                    "name": "token",
                                    "nameLocation": "13107:5:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5802,
                                    "src": "13100:12:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IERC20_$10849",
                                        "typeString": "contract IERC20"
                                    },
                                    "typeName": {
                                        "id": 5796,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 5795,
                                            "name": "IERC20",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 10849,
                                            "src": "13100:6:16"
                                        },
                                        "referencedDeclaration": 10849,
                                        "src": "13100:6:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IERC20_$10849",
                                            "typeString": "contract IERC20"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "13099:14:16"
                        },
                        "returnParameters": {
                            "id": 5801,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5800,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5802,
                                    "src": "13137:7:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 5799,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "13137:7:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "13136:9:16"
                        },
                        "scope": 5896,
                        "src": "13067:79:16",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5803,
                            "nodeType": "StructuredDocumentation",
                            "src": "13152:113:16",
                            "text": " @param worker An address of the Relay Worker.\n @return The address of its Relay Manager."
                        },
                        "functionSelector": "be7c76ad",
                        "id": 5810,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getWorkerManager",
                        "nameLocation": "13279:16:16",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5806,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5805,
                                    "mutability": "mutable",
                                    "name": "worker",
                                    "nameLocation": "13304:6:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5810,
                                    "src": "13296:14:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5804,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "13296:7:16",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "13295:16:16"
                        },
                        "returnParameters": {
                            "id": 5809,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5808,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5810,
                                    "src": "13335:7:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5807,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "13335:7:16",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "13334:9:16"
                        },
                        "scope": 5896,
                        "src": "13270:74:16",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5811,
                            "nodeType": "StructuredDocumentation",
                            "src": "13350:144:16",
                            "text": " @param manager An address of the Relay Manager.\n @return The count of Relay Workers associated with this Relay Manager."
                        },
                        "functionSelector": "59c4afc0",
                        "id": 5818,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getWorkerCount",
                        "nameLocation": "13508:14:16",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5814,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5813,
                                    "mutability": "mutable",
                                    "name": "manager",
                                    "nameLocation": "13531:7:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5818,
                                    "src": "13523:15:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5812,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "13523:7:16",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "13522:17:16"
                        },
                        "returnParameters": {
                            "id": 5817,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5816,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5818,
                                    "src": "13563:7:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 5815,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "13563:7:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "13562:9:16"
                        },
                        "scope": 5896,
                        "src": "13499:73:16",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5819,
                            "nodeType": "StructuredDocumentation",
                            "src": "13578:111:16",
                            "text": "@return An account's balance. It can be either a deposit of a `Paymaster`, or a revenue of a Relay Manager."
                        },
                        "functionSelector": "70a08231",
                        "id": 5826,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "balanceOf",
                        "nameLocation": "13703:9:16",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5822,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5821,
                                    "mutability": "mutable",
                                    "name": "target",
                                    "nameLocation": "13721:6:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5826,
                                    "src": "13713:14:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5820,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "13713:7:16",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "13712:16:16"
                        },
                        "returnParameters": {
                            "id": 5825,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5824,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5826,
                                    "src": "13752:7:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 5823,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "13752:7:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "13751:9:16"
                        },
                        "scope": 5896,
                        "src": "13694:67:16",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5827,
                            "nodeType": "StructuredDocumentation",
                            "src": "13767:59:16",
                            "text": "@return The `StakeManager` address for this `RelayHub`."
                        },
                        "functionSelector": "ca64f9e7",
                        "id": 5833,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getStakeManager",
                        "nameLocation": "13840:15:16",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5828,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "13855:2:16"
                        },
                        "returnParameters": {
                            "id": 5832,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5831,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5833,
                                    "src": "13881:13:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IStakeManager_$6284",
                                        "typeString": "contract IStakeManager"
                                    },
                                    "typeName": {
                                        "id": 5830,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 5829,
                                            "name": "IStakeManager",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 6284,
                                            "src": "13881:13:16"
                                        },
                                        "referencedDeclaration": 6284,
                                        "src": "13881:13:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IStakeManager_$6284",
                                            "typeString": "contract IStakeManager"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "13880:15:16"
                        },
                        "scope": 5896,
                        "src": "13831:65:16",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5834,
                            "nodeType": "StructuredDocumentation",
                            "src": "13902:56:16",
                            "text": "@return The `Penalizer` address for this `RelayHub`."
                        },
                        "functionSelector": "75dc7b4e",
                        "id": 5839,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getPenalizer",
                        "nameLocation": "13972:12:16",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5835,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "13984:2:16"
                        },
                        "returnParameters": {
                            "id": 5838,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5837,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5839,
                                    "src": "14010:7:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5836,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "14010:7:16",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "14009:9:16"
                        },
                        "scope": 5896,
                        "src": "13963:56:16",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5840,
                            "nodeType": "StructuredDocumentation",
                            "src": "14025:61:16",
                            "text": "@return The `RelayRegistrar` address for this `RelayHub`."
                        },
                        "functionSelector": "51d85156",
                        "id": 5845,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getRelayRegistrar",
                        "nameLocation": "14100:17:16",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5841,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "14117:2:16"
                        },
                        "returnParameters": {
                            "id": 5844,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5843,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5845,
                                    "src": "14143:7:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5842,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "14143:7:16",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "14142:9:16"
                        },
                        "scope": 5896,
                        "src": "14091:61:16",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5846,
                            "nodeType": "StructuredDocumentation",
                            "src": "14158:59:16",
                            "text": "@return The `BatchGateway` address for this `RelayHub`."
                        },
                        "functionSelector": "f7908a74",
                        "id": 5851,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getBatchGateway",
                        "nameLocation": "14231:15:16",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5847,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "14246:2:16"
                        },
                        "returnParameters": {
                            "id": 5850,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5849,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5851,
                                    "src": "14272:7:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5848,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "14272:7:16",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "14271:9:16"
                        },
                        "scope": 5896,
                        "src": "14222:59:16",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5852,
                            "nodeType": "StructuredDocumentation",
                            "src": "14287:209:16",
                            "text": " @notice Uses `StakeManager` to decide if the Relay Manager can be considered staked or not.\n Returns if the stake's token, amount and delay satisfy all requirements, reverts otherwise."
                        },
                        "functionSelector": "e6e22e12",
                        "id": 5857,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "verifyRelayManagerStaked",
                        "nameLocation": "14510:24:16",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5855,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5854,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "14543:12:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5857,
                                    "src": "14535:20:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5853,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "14535:7:16",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "14534:22:16"
                        },
                        "returnParameters": {
                            "id": 5856,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "14570:0:16"
                        },
                        "scope": 5896,
                        "src": "14501:70:16",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5858,
                            "nodeType": "StructuredDocumentation",
                            "src": "14577:229:16",
                            "text": " @notice Uses `StakeManager` to check if the Relay Manager can be considered abandoned or not.\n Returns true if the stake's abandonment time is in the past including the escheatment delay, false otherwise."
                        },
                        "functionSelector": "39622167",
                        "id": 5865,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "isRelayEscheatable",
                        "nameLocation": "14820:18:16",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5861,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5860,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "14847:12:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5865,
                                    "src": "14839:20:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5859,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "14839:7:16",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "14838:22:16"
                        },
                        "returnParameters": {
                            "id": 5864,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5863,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5865,
                                    "src": "14884:4:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 5862,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "14884:4:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "14883:6:16"
                        },
                        "scope": 5896,
                        "src": "14811:79:16",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5866,
                            "nodeType": "StructuredDocumentation",
                            "src": "14896:111:16",
                            "text": "@return `true` if the `RelayHub` is deprecated, `false` it it is not deprecated and can serve transactions."
                        },
                        "functionSelector": "c7178230",
                        "id": 5871,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "isDeprecated",
                        "nameLocation": "15021:12:16",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5867,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "15033:2:16"
                        },
                        "returnParameters": {
                            "id": 5870,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5869,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5871,
                                    "src": "15059:4:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 5868,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "15059:4:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "15058:6:16"
                        },
                        "scope": 5896,
                        "src": "15012:53:16",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5872,
                            "nodeType": "StructuredDocumentation",
                            "src": "15071:77:16",
                            "text": "@return The timestamp from which the hub no longer allows relaying calls."
                        },
                        "functionSelector": "3c16e59a",
                        "id": 5877,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getDeprecationTime",
                        "nameLocation": "15162:18:16",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5873,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "15180:2:16"
                        },
                        "returnParameters": {
                            "id": 5876,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5875,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5877,
                                    "src": "15206:7:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 5874,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "15206:7:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "15205:9:16"
                        },
                        "scope": 5896,
                        "src": "15153:62:16",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5878,
                            "nodeType": "StructuredDocumentation",
                            "src": "15221:69:16",
                            "text": "@return The block number in which the contract has been deployed."
                        },
                        "functionSelector": "20ffd56d",
                        "id": 5883,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getCreationBlock",
                        "nameLocation": "15304:16:16",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5879,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "15320:2:16"
                        },
                        "returnParameters": {
                            "id": 5882,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5881,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5883,
                                    "src": "15346:7:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 5880,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "15346:7:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "15345:9:16"
                        },
                        "scope": 5896,
                        "src": "15295:60:16",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5884,
                            "nodeType": "StructuredDocumentation",
                            "src": "15361:66:16",
                            "text": "@return a SemVer-compliant version of the `RelayHub` contract."
                        },
                        "functionSelector": "d904c732",
                        "id": 5889,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "versionHub",
                        "nameLocation": "15441:10:16",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5885,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "15451:2:16"
                        },
                        "returnParameters": {
                            "id": 5888,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5887,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5889,
                                    "src": "15477:13:16",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_memory_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 5886,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "15477:6:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "15476:15:16"
                        },
                        "scope": 5896,
                        "src": "15432:60:16",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5890,
                            "nodeType": "StructuredDocumentation",
                            "src": "15498:106:16",
                            "text": "@return A total measurable amount of gas left to current execution. Same as 'gasleft()' for pure EVMs."
                        },
                        "functionSelector": "45bdade7",
                        "id": 5895,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "aggregateGasleft",
                        "nameLocation": "15618:16:16",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5891,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "15634:2:16"
                        },
                        "returnParameters": {
                            "id": 5894,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5893,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5895,
                                    "src": "15660:7:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 5892,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "15660:7:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "15659:9:16"
                        },
                        "scope": 5896,
                        "src": "15609:60:16",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    }
                ],
                "scope": 5897,
                "src": "1000:14671:16",
                "usedErrors": []
            }
        ],
        "src": "0:15671:16"
    },
    "legacyAST": {
        "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/interfaces/IRelayHub.sol",
        "exportedSymbols": {
            "ERC165": [
                12146
            ],
            "GsnTypes": [
                8492
            ],
            "IERC165": [
                12352
            ],
            "IERC20": [
                10849
            ],
            "IForwarder": [
                5129
            ],
            "IRelayHub": [
                5896
            ],
            "IStakeManager": [
                6284
            ]
        },
        "id": 5897,
        "license": "GPL-3.0-only",
        "nodeType": "SourceUnit",
        "nodes": [
            {
                "id": 5530,
                "literals": [
                    "solidity",
                    ">=",
                    "0.7",
                    ".6"
                ],
                "nodeType": "PragmaDirective",
                "src": "0:24:16"
            },
            {
                "id": 5531,
                "literals": [
                    "abicoder",
                    "v2"
                ],
                "nodeType": "PragmaDirective",
                "src": "25:19:16"
            },
            {
                "absolutePath": "@openzeppelin/contracts/interfaces/IERC165.sol",
                "file": "@openzeppelin/contracts/interfaces/IERC165.sol",
                "id": 5532,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 5897,
                "sourceUnit": 10186,
                "src": "88:56:16",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/utils/GsnTypes.sol",
                "file": "../utils/GsnTypes.sol",
                "id": 5533,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 5897,
                "sourceUnit": 8493,
                "src": "146:31:16",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/interfaces/IStakeManager.sol",
                "file": "./IStakeManager.sol",
                "id": 5534,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 5897,
                "sourceUnit": 6285,
                "src": "178:29:16",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "abstract": false,
                "baseContracts": [
                    {
                        "baseName": {
                            "id": 5536,
                            "name": "IERC165",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 12352,
                            "src": "1023:7:16"
                        },
                        "id": 5537,
                        "nodeType": "InheritanceSpecifier",
                        "src": "1023:7:16"
                    }
                ],
                "contractDependencies": [],
                "contractKind": "interface",
                "documentation": {
                    "id": 5535,
                    "nodeType": "StructuredDocumentation",
                    "src": "209:790:16",
                    "text": " @title The RelayHub interface\n @notice The implementation of this interface provides all the information the GSN client needs to\n create a valid `RelayRequest` and also serves as an entry point for such requests.\n @notice The RelayHub also handles all the related financial records and hold the balances of participants.\n The Paymasters keep their Ether deposited in the `RelayHub` in order to pay for the `RelayRequest`s that thay choose\n to pay for, and Relay Servers keep their earned Ether in the `RelayHub` until they choose to `withdraw()`\n @notice The RelayHub on each supported network only needs a single instance and there is usually no need for dApp\n developers or Relay Server operators to redeploy, reimplement, modify or override the `RelayHub`."
                },
                "fullyImplemented": false,
                "id": 5896,
                "linearizedBaseContracts": [
                    5896,
                    12352
                ],
                "name": "IRelayHub",
                "nameLocation": "1010:9:16",
                "nodeType": "ContractDefinition",
                "nodes": [
                    {
                        "canonicalName": "IRelayHub.RelayHubConfig",
                        "id": 5556,
                        "members": [
                            {
                                "constant": false,
                                "id": 5539,
                                "mutability": "mutable",
                                "name": "maxWorkerCount",
                                "nameLocation": "1276:14:16",
                                "nodeType": "VariableDeclaration",
                                "scope": 5556,
                                "src": "1268:22:16",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                },
                                "typeName": {
                                    "id": 5538,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "1268:7:16",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 5541,
                                "mutability": "mutable",
                                "name": "gasReserve",
                                "nameLocation": "1410:10:16",
                                "nodeType": "VariableDeclaration",
                                "scope": 5556,
                                "src": "1402:18:16",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                },
                                "typeName": {
                                    "id": 5540,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "1402:7:16",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 5543,
                                "mutability": "mutable",
                                "name": "postOverhead",
                                "nameLocation": "1493:12:16",
                                "nodeType": "VariableDeclaration",
                                "scope": 5556,
                                "src": "1485:20:16",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                },
                                "typeName": {
                                    "id": 5542,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "1485:7:16",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 5545,
                                "mutability": "mutable",
                                "name": "gasOverhead",
                                "nameLocation": "1689:11:16",
                                "nodeType": "VariableDeclaration",
                                "scope": 5556,
                                "src": "1681:19:16",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                },
                                "typeName": {
                                    "id": 5544,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "1681:7:16",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 5547,
                                "mutability": "mutable",
                                "name": "minimumUnstakeDelay",
                                "nameLocation": "1806:19:16",
                                "nodeType": "VariableDeclaration",
                                "scope": 5556,
                                "src": "1798:27:16",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                },
                                "typeName": {
                                    "id": 5546,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "1798:7:16",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 5549,
                                "mutability": "mutable",
                                "name": "devAddress",
                                "nameLocation": "1873:10:16",
                                "nodeType": "VariableDeclaration",
                                "scope": 5556,
                                "src": "1865:18:16",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                },
                                "typeName": {
                                    "id": 5548,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "1865:7:16",
                                    "stateMutability": "nonpayable",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 5551,
                                "mutability": "mutable",
                                "name": "devFee",
                                "nameLocation": "1981:6:16",
                                "nodeType": "VariableDeclaration",
                                "scope": 5556,
                                "src": "1975:12:16",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                },
                                "typeName": {
                                    "id": 5550,
                                    "name": "uint8",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "1975:5:16",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 5553,
                                "mutability": "mutable",
                                "name": "baseRelayFee",
                                "nameLocation": "2109:12:16",
                                "nodeType": "VariableDeclaration",
                                "scope": 5556,
                                "src": "2102:19:16",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint80",
                                    "typeString": "uint80"
                                },
                                "typeName": {
                                    "id": 5552,
                                    "name": "uint80",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "2102:6:16",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint80",
                                        "typeString": "uint80"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 5555,
                                "mutability": "mutable",
                                "name": "pctRelayFee",
                                "nameLocation": "2243:11:16",
                                "nodeType": "VariableDeclaration",
                                "scope": 5556,
                                "src": "2236:18:16",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint16",
                                    "typeString": "uint16"
                                },
                                "typeName": {
                                    "id": 5554,
                                    "name": "uint16",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "2236:6:16",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint16",
                                        "typeString": "uint16"
                                    }
                                },
                                "visibility": "internal"
                            }
                        ],
                        "name": "RelayHubConfig",
                        "nameLocation": "1178:14:16",
                        "nodeType": "StructDefinition",
                        "scope": 5896,
                        "src": "1171:1090:16",
                        "visibility": "public"
                    },
                    {
                        "anonymous": false,
                        "documentation": {
                            "id": 5557,
                            "nodeType": "StructuredDocumentation",
                            "src": "2267:69:16",
                            "text": "@notice Emitted when a configuration of the `RelayHub` is changed"
                        },
                        "id": 5562,
                        "name": "RelayHubConfigured",
                        "nameLocation": "2347:18:16",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 5561,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5560,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "config",
                                    "nameLocation": "2381:6:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5562,
                                    "src": "2366:21:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RelayHubConfig_$5556_memory_ptr",
                                        "typeString": "struct IRelayHub.RelayHubConfig"
                                    },
                                    "typeName": {
                                        "id": 5559,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 5558,
                                            "name": "RelayHubConfig",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 5556,
                                            "src": "2366:14:16"
                                        },
                                        "referencedDeclaration": 5556,
                                        "src": "2366:14:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayHubConfig_$5556_storage_ptr",
                                            "typeString": "struct IRelayHub.RelayHubConfig"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2365:23:16"
                        },
                        "src": "2341:48:16"
                    },
                    {
                        "anonymous": false,
                        "documentation": {
                            "id": 5563,
                            "nodeType": "StructuredDocumentation",
                            "src": "2395:59:16",
                            "text": "@notice Emitted when relays are added by a relayManager"
                        },
                        "id": 5572,
                        "name": "RelayWorkersAdded",
                        "nameLocation": "2465:17:16",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 5571,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5565,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "2508:12:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5572,
                                    "src": "2492:28:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5564,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2492:7:16",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5568,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "newRelayWorkers",
                                    "nameLocation": "2540:15:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5572,
                                    "src": "2530:25:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                        "typeString": "address[]"
                                    },
                                    "typeName": {
                                        "baseType": {
                                            "id": 5566,
                                            "name": "address",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "2530:7:16",
                                            "stateMutability": "nonpayable",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "id": 5567,
                                        "nodeType": "ArrayTypeName",
                                        "src": "2530:9:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                                            "typeString": "address[]"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5570,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "workersCount",
                                    "nameLocation": "2573:12:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5572,
                                    "src": "2565:20:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 5569,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2565:7:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2482:109:16"
                        },
                        "src": "2459:133:16"
                    },
                    {
                        "anonymous": false,
                        "documentation": {
                            "id": 5573,
                            "nodeType": "StructuredDocumentation",
                            "src": "2598:72:16",
                            "text": "@notice Emitted when an account withdraws funds from the `RelayHub`."
                        },
                        "id": 5581,
                        "name": "Withdrawn",
                        "nameLocation": "2681:9:16",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 5580,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5575,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "account",
                                    "nameLocation": "2716:7:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5581,
                                    "src": "2700:23:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5574,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2700:7:16",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5577,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "dest",
                                    "nameLocation": "2749:4:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5581,
                                    "src": "2733:20:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5576,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2733:7:16",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5579,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "amount",
                                    "nameLocation": "2771:6:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5581,
                                    "src": "2763:14:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 5578,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2763:7:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2690:93:16"
                        },
                        "src": "2675:109:16"
                    },
                    {
                        "anonymous": false,
                        "documentation": {
                            "id": 5582,
                            "nodeType": "StructuredDocumentation",
                            "src": "2790:98:16",
                            "text": "@notice Emitted when `depositFor` is called, including the amount and account that was funded."
                        },
                        "id": 5590,
                        "name": "Deposited",
                        "nameLocation": "2899:9:16",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 5589,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5584,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "paymaster",
                                    "nameLocation": "2934:9:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5590,
                                    "src": "2918:25:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5583,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2918:7:16",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5586,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "from",
                                    "nameLocation": "2969:4:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5590,
                                    "src": "2953:20:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5585,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2953:7:16",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5588,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "amount",
                                    "nameLocation": "2991:6:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5590,
                                    "src": "2983:14:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 5587,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2983:7:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2908:95:16"
                        },
                        "src": "2893:111:16"
                    },
                    {
                        "anonymous": false,
                        "documentation": {
                            "id": 5591,
                            "nodeType": "StructuredDocumentation",
                            "src": "3010:77:16",
                            "text": "@notice Emitted for each token configured for staking in setMinimumStakes"
                        },
                        "id": 5597,
                        "name": "StakingTokenDataChanged",
                        "nameLocation": "3098:23:16",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 5596,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5593,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "token",
                                    "nameLocation": "3139:5:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5597,
                                    "src": "3131:13:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5592,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3131:7:16",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5595,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "minimumStake",
                                    "nameLocation": "3162:12:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5597,
                                    "src": "3154:20:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 5594,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3154:7:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3121:59:16"
                        },
                        "src": "3092:89:16"
                    },
                    {
                        "anonymous": false,
                        "documentation": {
                            "id": 5598,
                            "nodeType": "StructuredDocumentation",
                            "src": "3187:294:16",
                            "text": " @notice Emitted when an attempt to relay a call fails and the `Paymaster` does not accept the transaction.\n The actual relayed call was not executed, and the recipient not charged.\n @param reason contains a revert reason returned from preRelayedCall or forwarder."
                        },
                        "id": 5618,
                        "name": "TransactionRejectedByPaymaster",
                        "nameLocation": "3492:30:16",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 5617,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5600,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "3548:12:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5618,
                                    "src": "3532:28:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5599,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3532:7:16",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5602,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "paymaster",
                                    "nameLocation": "3586:9:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5618,
                                    "src": "3570:25:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5601,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3570:7:16",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5604,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "relayRequestID",
                                    "nameLocation": "3621:14:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5618,
                                    "src": "3605:30:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 5603,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3605:7:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5606,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "from",
                                    "nameLocation": "3653:4:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5618,
                                    "src": "3645:12:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5605,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3645:7:16",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5608,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "to",
                                    "nameLocation": "3675:2:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5618,
                                    "src": "3667:10:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5607,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3667:7:16",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5610,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "relayWorker",
                                    "nameLocation": "3695:11:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5618,
                                    "src": "3687:19:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5609,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3687:7:16",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5612,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "selector",
                                    "nameLocation": "3723:8:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5618,
                                    "src": "3716:15:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes4",
                                        "typeString": "bytes4"
                                    },
                                    "typeName": {
                                        "id": 5611,
                                        "name": "bytes4",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3716:6:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes4",
                                            "typeString": "bytes4"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5614,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "innerGasUsed",
                                    "nameLocation": "3749:12:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5618,
                                    "src": "3741:20:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 5613,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3741:7:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5616,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "reason",
                                    "nameLocation": "3777:6:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5618,
                                    "src": "3771:12:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 5615,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3771:5:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3522:267:16"
                        },
                        "src": "3486:304:16"
                    },
                    {
                        "anonymous": false,
                        "documentation": {
                            "id": 5619,
                            "nodeType": "StructuredDocumentation",
                            "src": "3796:444:16",
                            "text": " @notice Emitted when a transaction is relayed. Note that the actual internal function call might be reverted.\n The reason for a revert will be indicated in the `status` field of a corresponding `RelayCallStatus` value.\n @notice `charge` is the Ether value deducted from the `Paymaster` balance.\n The amount added to the `relayManager` balance will be lower if there is an activated `devFee` in the `config`."
                        },
                        "id": 5640,
                        "name": "TransactionRelayed",
                        "nameLocation": "4251:18:16",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 5639,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5621,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "4295:12:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5640,
                                    "src": "4279:28:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5620,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4279:7:16",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5623,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "relayWorker",
                                    "nameLocation": "4333:11:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5640,
                                    "src": "4317:27:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5622,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4317:7:16",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5625,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "relayRequestID",
                                    "nameLocation": "4370:14:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5640,
                                    "src": "4354:30:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 5624,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4354:7:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5627,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "from",
                                    "nameLocation": "4402:4:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5640,
                                    "src": "4394:12:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5626,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4394:7:16",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5629,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "to",
                                    "nameLocation": "4424:2:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5640,
                                    "src": "4416:10:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5628,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4416:7:16",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5631,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "paymaster",
                                    "nameLocation": "4444:9:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5640,
                                    "src": "4436:17:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5630,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4436:7:16",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5633,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "selector",
                                    "nameLocation": "4470:8:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5640,
                                    "src": "4463:15:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes4",
                                        "typeString": "bytes4"
                                    },
                                    "typeName": {
                                        "id": 5632,
                                        "name": "bytes4",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4463:6:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes4",
                                            "typeString": "bytes4"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5636,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "status",
                                    "nameLocation": "4504:6:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5640,
                                    "src": "4488:22:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                    },
                                    "typeName": {
                                        "id": 5635,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 5634,
                                            "name": "RelayCallStatus",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 5668,
                                            "src": "4488:15:16"
                                        },
                                        "referencedDeclaration": 5668,
                                        "src": "4488:15:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                            "typeString": "enum IRelayHub.RelayCallStatus"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5638,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "charge",
                                    "nameLocation": "4528:6:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5640,
                                    "src": "4520:14:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 5637,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4520:7:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4269:271:16"
                        },
                        "src": "4245:296:16"
                    },
                    {
                        "anonymous": false,
                        "documentation": {
                            "id": 5641,
                            "nodeType": "StructuredDocumentation",
                            "src": "4547:112:16",
                            "text": "@notice This event is emitted in case the internal function returns a value or reverts with a revert string."
                        },
                        "id": 5648,
                        "name": "TransactionResult",
                        "nameLocation": "4670:17:16",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 5647,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5644,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "status",
                                    "nameLocation": "4713:6:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5648,
                                    "src": "4697:22:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                    },
                                    "typeName": {
                                        "id": 5643,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 5642,
                                            "name": "RelayCallStatus",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 5668,
                                            "src": "4697:15:16"
                                        },
                                        "referencedDeclaration": 5668,
                                        "src": "4697:15:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                            "typeString": "enum IRelayHub.RelayCallStatus"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5646,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "returnValue",
                                    "nameLocation": "4735:11:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5648,
                                    "src": "4729:17:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 5645,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4729:5:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4687:65:16"
                        },
                        "src": "4664:89:16"
                    },
                    {
                        "anonymous": false,
                        "documentation": {
                            "id": 5649,
                            "nodeType": "StructuredDocumentation",
                            "src": "4759:112:16",
                            "text": "@notice This event is emitted in case this `RelayHub` is deprecated and will stop serving transactions soon."
                        },
                        "id": 5653,
                        "name": "HubDeprecated",
                        "nameLocation": "4882:13:16",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 5652,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5651,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "deprecationTime",
                                    "nameLocation": "4904:15:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5653,
                                    "src": "4896:23:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 5650,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4896:7:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4895:25:16"
                        },
                        "src": "4876:45:16"
                    },
                    {
                        "anonymous": false,
                        "documentation": {
                            "id": 5654,
                            "nodeType": "StructuredDocumentation",
                            "src": "4927:269:16",
                            "text": " @notice This event is emitted in case a `relayManager` has been deemed \"abandoned\" for being\n unresponsive for a prolonged period of time.\n @notice This event means the entire balance of the relay has been transferred to the `devAddress`."
                        },
                        "id": 5660,
                        "name": "AbandonedRelayManagerBalanceEscheated",
                        "nameLocation": "5207:37:16",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 5659,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5656,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "5270:12:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5660,
                                    "src": "5254:28:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5655,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5254:7:16",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5658,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "balance",
                                    "nameLocation": "5300:7:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5660,
                                    "src": "5292:15:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 5657,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5292:7:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "5244:69:16"
                        },
                        "src": "5201:113:16"
                    },
                    {
                        "canonicalName": "IRelayHub.RelayCallStatus",
                        "id": 5668,
                        "members": [
                            {
                                "id": 5661,
                                "name": "OK",
                                "nameLocation": "6129:2:16",
                                "nodeType": "EnumValue",
                                "src": "6129:2:16"
                            },
                            {
                                "id": 5662,
                                "name": "RelayedCallFailed",
                                "nameLocation": "6141:17:16",
                                "nodeType": "EnumValue",
                                "src": "6141:17:16"
                            },
                            {
                                "id": 5663,
                                "name": "RejectedByPreRelayed",
                                "nameLocation": "6168:20:16",
                                "nodeType": "EnumValue",
                                "src": "6168:20:16"
                            },
                            {
                                "id": 5664,
                                "name": "RejectedByForwarder",
                                "nameLocation": "6198:19:16",
                                "nodeType": "EnumValue",
                                "src": "6198:19:16"
                            },
                            {
                                "id": 5665,
                                "name": "RejectedByRecipientRevert",
                                "nameLocation": "6227:25:16",
                                "nodeType": "EnumValue",
                                "src": "6227:25:16"
                            },
                            {
                                "id": 5666,
                                "name": "PostRelayedFailed",
                                "nameLocation": "6262:17:16",
                                "nodeType": "EnumValue",
                                "src": "6262:17:16"
                            },
                            {
                                "id": 5667,
                                "name": "PaymasterBalanceChanged",
                                "nameLocation": "6289:23:16",
                                "nodeType": "EnumValue",
                                "src": "6289:23:16"
                            }
                        ],
                        "name": "RelayCallStatus",
                        "nameLocation": "6103:15:16",
                        "nodeType": "EnumDefinition",
                        "src": "6098:220:16"
                    },
                    {
                        "documentation": {
                            "id": 5669,
                            "nodeType": "StructuredDocumentation",
                            "src": "6324:234:16",
                            "text": " @notice Add new worker addresses controlled by the sender who must be a staked Relay Manager address.\n Emits a `RelayWorkersAdded` event.\n This function can be called multiple times, emitting new events."
                        },
                        "functionSelector": "c2da0786",
                        "id": 5675,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "addRelayWorkers",
                        "nameLocation": "6572:15:16",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5673,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5672,
                                    "mutability": "mutable",
                                    "name": "newRelayWorkers",
                                    "nameLocation": "6607:15:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5675,
                                    "src": "6588:34:16",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                        "typeString": "address[]"
                                    },
                                    "typeName": {
                                        "baseType": {
                                            "id": 5670,
                                            "name": "address",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "6588:7:16",
                                            "stateMutability": "nonpayable",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "id": 5671,
                                        "nodeType": "ArrayTypeName",
                                        "src": "6588:9:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                                            "typeString": "address[]"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "6587:36:16"
                        },
                        "returnParameters": {
                            "id": 5674,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "6632:0:16"
                        },
                        "scope": 5896,
                        "src": "6563:70:16",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5676,
                            "nodeType": "StructuredDocumentation",
                            "src": "6639:132:16",
                            "text": " @notice The `RelayRegistrar` callback to notify the `RelayHub` that this `relayManager` has updated registration."
                        },
                        "functionSelector": "4f7de031",
                        "id": 5681,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "onRelayServerRegistered",
                        "nameLocation": "6785:23:16",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5679,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5678,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "6817:12:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5681,
                                    "src": "6809:20:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5677,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6809:7:16",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "6808:22:16"
                        },
                        "returnParameters": {
                            "id": 5680,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "6839:0:16"
                        },
                        "scope": 5896,
                        "src": "6776:64:16",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5682,
                            "nodeType": "StructuredDocumentation",
                            "src": "6873:264:16",
                            "text": " @notice Deposits ether for a `Paymaster`, so that it can and pay for relayed transactions.\n :warning: **Warning** :warning: Unused balance can only be withdrawn by the holder itself, by calling `withdraw`.\n Emits a `Deposited` event."
                        },
                        "functionSelector": "aa67c919",
                        "id": 5687,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "depositFor",
                        "nameLocation": "7151:10:16",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5685,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5684,
                                    "mutability": "mutable",
                                    "name": "target",
                                    "nameLocation": "7170:6:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5687,
                                    "src": "7162:14:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5683,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "7162:7:16",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "7161:16:16"
                        },
                        "returnParameters": {
                            "id": 5686,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "7194:0:16"
                        },
                        "scope": 5896,
                        "src": "7142:53:16",
                        "stateMutability": "payable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5688,
                            "nodeType": "StructuredDocumentation",
                            "src": "7201:245:16",
                            "text": " @notice Withdraws from an account's balance, sending it back to the caller.\n Relay Managers call this to retrieve their revenue, and `Paymasters` can also use it to reduce their funding.\n Emits a `Withdrawn` event."
                        },
                        "functionSelector": "f3fef3a3",
                        "id": 5695,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "withdraw",
                        "nameLocation": "7460:8:16",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5693,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5690,
                                    "mutability": "mutable",
                                    "name": "dest",
                                    "nameLocation": "7485:4:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5695,
                                    "src": "7469:20:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address_payable",
                                        "typeString": "address payable"
                                    },
                                    "typeName": {
                                        "id": 5689,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "7469:15:16",
                                        "stateMutability": "payable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address_payable",
                                            "typeString": "address payable"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5692,
                                    "mutability": "mutable",
                                    "name": "amount",
                                    "nameLocation": "7499:6:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5695,
                                    "src": "7491:14:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 5691,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "7491:7:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "7468:38:16"
                        },
                        "returnParameters": {
                            "id": 5694,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "7515:0:16"
                        },
                        "scope": 5896,
                        "src": "7451:65:16",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5696,
                            "nodeType": "StructuredDocumentation",
                            "src": "7522:281:16",
                            "text": " @notice Withdraws from an account's balance, sending funds to multiple provided addresses.\n Relay Managers call this to retrieve their revenue, and `Paymasters` can also use it to reduce their funding.\n Emits a `Withdrawn` event for each destination."
                        },
                        "functionSelector": "72c1ab0c",
                        "id": 5705,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "withdrawMultiple",
                        "nameLocation": "7817:16:16",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5703,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5699,
                                    "mutability": "mutable",
                                    "name": "dest",
                                    "nameLocation": "7859:4:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5705,
                                    "src": "7834:29:16",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_payable_$dyn_memory_ptr",
                                        "typeString": "address payable[]"
                                    },
                                    "typeName": {
                                        "baseType": {
                                            "id": 5697,
                                            "name": "address",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "7834:15:16",
                                            "stateMutability": "payable",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address_payable",
                                                "typeString": "address payable"
                                            }
                                        },
                                        "id": 5698,
                                        "nodeType": "ArrayTypeName",
                                        "src": "7834:17:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_address_payable_$dyn_storage_ptr",
                                            "typeString": "address payable[]"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5702,
                                    "mutability": "mutable",
                                    "name": "amount",
                                    "nameLocation": "7882:6:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5705,
                                    "src": "7865:23:16",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                        "typeString": "uint256[]"
                                    },
                                    "typeName": {
                                        "baseType": {
                                            "id": 5700,
                                            "name": "uint256",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "7865:7:16",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "id": 5701,
                                        "nodeType": "ArrayTypeName",
                                        "src": "7865:9:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                                            "typeString": "uint256[]"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "7833:56:16"
                        },
                        "returnParameters": {
                            "id": 5704,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "7898:0:16"
                        },
                        "scope": 5896,
                        "src": "7808:91:16",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5706,
                            "nodeType": "StructuredDocumentation",
                            "src": "7922:1478:16",
                            "text": " @notice Relays a transaction. For this to succeed, multiple conditions must be met:\n  - `Paymaster`'s `preRelayCall` method must succeed and not revert.\n  - the `msg.sender` must be a registered Relay Worker that the user signed to use.\n  - the transaction's gas fees must be equal or larger than the ones that were signed by the sender.\n  - the transaction must have enough gas to run all internal transactions if they use all gas available to them.\n  - the `Paymaster` must have enough balance to pay the Relay Worker if all gas is spent.\n @notice If all conditions are met, the call will be relayed and the `Paymaster` charged.\n @param domainSeparatorName The name of the Domain Separator used to verify the EIP-712 signature\n @param maxAcceptanceBudget The maximum valid value for `paymaster.getGasLimits().acceptanceBudget` to return.\n @param relayRequest All details of the requested relayed call.\n @param signature The client's EIP-712 signature over the `relayRequest` struct.\n @param approvalData The dapp-specific data forwarded to the `Paymaster`'s `preRelayedCall` method.\n This value is **not** verified by the `RelayHub` in any way.\n As an example, it can be used to pass some kind of a third-party signature to the `Paymaster` for verification.\n Emits a `TransactionRelayed` event regardless of whether the transaction succeeded or failed."
                        },
                        "functionSelector": "6ca862e2",
                        "id": 5729,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "relayCall",
                        "nameLocation": "9414:9:16",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5718,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5708,
                                    "mutability": "mutable",
                                    "name": "domainSeparatorName",
                                    "nameLocation": "9449:19:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5729,
                                    "src": "9433:35:16",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_calldata_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 5707,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "9433:6:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5710,
                                    "mutability": "mutable",
                                    "name": "maxAcceptanceBudget",
                                    "nameLocation": "9486:19:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5729,
                                    "src": "9478:27:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 5709,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "9478:7:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5713,
                                    "mutability": "mutable",
                                    "name": "relayRequest",
                                    "nameLocation": "9546:12:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5729,
                                    "src": "9515:43:16",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                        "typeString": "struct GsnTypes.RelayRequest"
                                    },
                                    "typeName": {
                                        "id": 5712,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 5711,
                                            "name": "GsnTypes.RelayRequest",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 8491,
                                            "src": "9515:21:16"
                                        },
                                        "referencedDeclaration": 8491,
                                        "src": "9515:21:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_storage_ptr",
                                            "typeString": "struct GsnTypes.RelayRequest"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5715,
                                    "mutability": "mutable",
                                    "name": "signature",
                                    "nameLocation": "9583:9:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5729,
                                    "src": "9568:24:16",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 5714,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "9568:5:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5717,
                                    "mutability": "mutable",
                                    "name": "approvalData",
                                    "nameLocation": "9617:12:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5729,
                                    "src": "9602:27:16",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 5716,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "9602:5:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "9423:212:16"
                        },
                        "returnParameters": {
                            "id": 5728,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5720,
                                    "mutability": "mutable",
                                    "name": "paymasterAccepted",
                                    "nameLocation": "9676:17:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5729,
                                    "src": "9671:22:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 5719,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "9671:4:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5722,
                                    "mutability": "mutable",
                                    "name": "charge",
                                    "nameLocation": "9711:6:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5729,
                                    "src": "9703:14:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 5721,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "9703:7:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5725,
                                    "mutability": "mutable",
                                    "name": "status",
                                    "nameLocation": "9753:6:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5729,
                                    "src": "9727:32:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                    },
                                    "typeName": {
                                        "id": 5724,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 5723,
                                            "name": "IRelayHub.RelayCallStatus",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 5668,
                                            "src": "9727:25:16"
                                        },
                                        "referencedDeclaration": 5668,
                                        "src": "9727:25:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                            "typeString": "enum IRelayHub.RelayCallStatus"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5727,
                                    "mutability": "mutable",
                                    "name": "returnValue",
                                    "nameLocation": "9782:11:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5729,
                                    "src": "9769:24:16",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 5726,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "9769:5:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "9661:138:16"
                        },
                        "scope": 5896,
                        "src": "9405:395:16",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5730,
                            "nodeType": "StructuredDocumentation",
                            "src": "9806:604:16",
                            "text": " @notice In case the Relay Worker has been found to be in violation of some rules by the `Penalizer` contract,\n the `Penalizer` will call this method to execute a penalization.\n The `RelayHub` will look up the Relay Manager of the given Relay Worker and will forward the call to\n the `StakeManager` contract. The `RelayHub` does not perform the actual penalization either.\n @param relayWorker The address of the Relay Worker that committed a penalizable offense.\n @param beneficiary The address that called the `Penalizer` and will receive a reward for it."
                        },
                        "functionSelector": "ebcd31ac",
                        "id": 5737,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "penalize",
                        "nameLocation": "10424:8:16",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5735,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5732,
                                    "mutability": "mutable",
                                    "name": "relayWorker",
                                    "nameLocation": "10441:11:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5737,
                                    "src": "10433:19:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5731,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "10433:7:16",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5734,
                                    "mutability": "mutable",
                                    "name": "beneficiary",
                                    "nameLocation": "10470:11:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5737,
                                    "src": "10454:27:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address_payable",
                                        "typeString": "address payable"
                                    },
                                    "typeName": {
                                        "id": 5733,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "10454:15:16",
                                        "stateMutability": "payable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address_payable",
                                            "typeString": "address payable"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "10432:50:16"
                        },
                        "returnParameters": {
                            "id": 5736,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "10491:0:16"
                        },
                        "scope": 5896,
                        "src": "10415:77:16",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5738,
                            "nodeType": "StructuredDocumentation",
                            "src": "10498:125:16",
                            "text": " @notice Sets or changes the configuration of this `RelayHub`.\n @param _config The new configuration."
                        },
                        "functionSelector": "9bcde3f3",
                        "id": 5744,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "setConfiguration",
                        "nameLocation": "10637:16:16",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5742,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5741,
                                    "mutability": "mutable",
                                    "name": "_config",
                                    "nameLocation": "10676:7:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5744,
                                    "src": "10654:29:16",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RelayHubConfig_$5556_memory_ptr",
                                        "typeString": "struct IRelayHub.RelayHubConfig"
                                    },
                                    "typeName": {
                                        "id": 5740,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 5739,
                                            "name": "RelayHubConfig",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 5556,
                                            "src": "10654:14:16"
                                        },
                                        "referencedDeclaration": 5556,
                                        "src": "10654:14:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayHubConfig_$5556_storage_ptr",
                                            "typeString": "struct IRelayHub.RelayHubConfig"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "10653:31:16"
                        },
                        "returnParameters": {
                            "id": 5743,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "10693:0:16"
                        },
                        "scope": 5896,
                        "src": "10628:66:16",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5745,
                            "nodeType": "StructuredDocumentation",
                            "src": "10700:413:16",
                            "text": " @notice Sets or changes the minimum amount of a given `token` that needs to be staked so that the Relay Manager\n is considered to be 'staked' by this `RelayHub`. Zero value means this token is not allowed for staking.\n @param token An array of addresses of ERC-20 compatible tokens.\n @param minimumStake An array of minimal amounts necessary for a corresponding token, in wei."
                        },
                        "functionSelector": "8a09fb56",
                        "id": 5755,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "setMinimumStakes",
                        "nameLocation": "11127:16:16",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5753,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5749,
                                    "mutability": "mutable",
                                    "name": "token",
                                    "nameLocation": "11160:5:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5755,
                                    "src": "11144:21:16",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_contract$_IERC20_$10849_$dyn_memory_ptr",
                                        "typeString": "contract IERC20[]"
                                    },
                                    "typeName": {
                                        "baseType": {
                                            "id": 5747,
                                            "nodeType": "UserDefinedTypeName",
                                            "pathNode": {
                                                "id": 5746,
                                                "name": "IERC20",
                                                "nodeType": "IdentifierPath",
                                                "referencedDeclaration": 10849,
                                                "src": "11144:6:16"
                                            },
                                            "referencedDeclaration": 10849,
                                            "src": "11144:6:16",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_contract$_IERC20_$10849",
                                                "typeString": "contract IERC20"
                                            }
                                        },
                                        "id": 5748,
                                        "nodeType": "ArrayTypeName",
                                        "src": "11144:8:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_contract$_IERC20_$10849_$dyn_storage_ptr",
                                            "typeString": "contract IERC20[]"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5752,
                                    "mutability": "mutable",
                                    "name": "minimumStake",
                                    "nameLocation": "11184:12:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5755,
                                    "src": "11167:29:16",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                        "typeString": "uint256[]"
                                    },
                                    "typeName": {
                                        "baseType": {
                                            "id": 5750,
                                            "name": "uint256",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "11167:7:16",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "id": 5751,
                                        "nodeType": "ArrayTypeName",
                                        "src": "11167:9:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                                            "typeString": "uint256[]"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "11143:54:16"
                        },
                        "returnParameters": {
                            "id": 5754,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "11206:0:16"
                        },
                        "scope": 5896,
                        "src": "11118:89:16",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5756,
                            "nodeType": "StructuredDocumentation",
                            "src": "11213:229:16",
                            "text": " @notice Deprecate hub by reverting all incoming `relayCall()` calls starting from a given timestamp\n @param _deprecationTime The timestamp in seconds after which the `RelayHub` stops serving transactions."
                        },
                        "functionSelector": "af595dfc",
                        "id": 5761,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "deprecateHub",
                        "nameLocation": "11456:12:16",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5759,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5758,
                                    "mutability": "mutable",
                                    "name": "_deprecationTime",
                                    "nameLocation": "11477:16:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5761,
                                    "src": "11469:24:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 5757,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "11469:7:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "11468:26:16"
                        },
                        "returnParameters": {
                            "id": 5760,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "11503:0:16"
                        },
                        "scope": 5896,
                        "src": "11447:57:16",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5762,
                            "nodeType": "StructuredDocumentation",
                            "src": "11510:53:16",
                            "text": " @notice\n @param relayManager"
                        },
                        "functionSelector": "d26152f9",
                        "id": 5767,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "escheatAbandonedRelayBalance",
                        "nameLocation": "11577:28:16",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5765,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5764,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "11614:12:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5767,
                                    "src": "11606:20:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5763,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "11606:7:16",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "11605:22:16"
                        },
                        "returnParameters": {
                            "id": 5766,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "11636:0:16"
                        },
                        "scope": 5896,
                        "src": "11568:69:16",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5768,
                            "nodeType": "StructuredDocumentation",
                            "src": "11643:411:16",
                            "text": " @notice The fee is expressed as a base fee in wei plus percentage of the actual charge.\n For example, a value '40' stands for a 40% fee, so the recipient will be charged for 1.4 times the spent amount.\n @param gasUsed An amount of gas used by the transaction.\n @param relayData The details of a transaction signed by the sender.\n @return The calculated charge, in wei."
                        },
                        "functionSelector": "8e53548b",
                        "id": 5778,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "calculateCharge",
                        "nameLocation": "12068:15:16",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5774,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5770,
                                    "mutability": "mutable",
                                    "name": "gasUsed",
                                    "nameLocation": "12092:7:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5778,
                                    "src": "12084:15:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 5769,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "12084:7:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5773,
                                    "mutability": "mutable",
                                    "name": "relayData",
                                    "nameLocation": "12129:9:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5778,
                                    "src": "12101:37:16",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                        "typeString": "struct GsnTypes.RelayData"
                                    },
                                    "typeName": {
                                        "id": 5772,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 5771,
                                            "name": "GsnTypes.RelayData",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 8484,
                                            "src": "12101:18:16"
                                        },
                                        "referencedDeclaration": 8484,
                                        "src": "12101:18:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayData_$8484_storage_ptr",
                                            "typeString": "struct GsnTypes.RelayData"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "12083:56:16"
                        },
                        "returnParameters": {
                            "id": 5777,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5776,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5778,
                                    "src": "12163:7:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 5775,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "12163:7:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "12162:9:16"
                        },
                        "scope": 5896,
                        "src": "12059:113:16",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5779,
                            "nodeType": "StructuredDocumentation",
                            "src": "12178:343:16",
                            "text": " @notice The fee is expressed as a  percentage of the actual charge.\n For example, a value '40' stands for a 40% fee, so the Relay Manager will only get 60% of the `charge`.\n @param charge The amount of Ether in wei the Paymaster will be charged for this transaction.\n @return The calculated devFee, in wei."
                        },
                        "functionSelector": "8ac3b845",
                        "id": 5786,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "calculateDevCharge",
                        "nameLocation": "12535:18:16",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5782,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5781,
                                    "mutability": "mutable",
                                    "name": "charge",
                                    "nameLocation": "12562:6:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5786,
                                    "src": "12554:14:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 5780,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "12554:7:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "12553:16:16"
                        },
                        "returnParameters": {
                            "id": 5785,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5784,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5786,
                                    "src": "12593:7:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 5783,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "12593:7:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "12592:9:16"
                        },
                        "scope": 5896,
                        "src": "12526:76:16",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5787,
                            "nodeType": "StructuredDocumentation",
                            "src": "12626:55:16",
                            "text": "@return config The configuration of the `RelayHub`."
                        },
                        "functionSelector": "6bd50cef",
                        "id": 5793,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getConfiguration",
                        "nameLocation": "12695:16:16",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5788,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "12711:2:16"
                        },
                        "returnParameters": {
                            "id": 5792,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5791,
                                    "mutability": "mutable",
                                    "name": "config",
                                    "nameLocation": "12759:6:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5793,
                                    "src": "12737:28:16",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RelayHubConfig_$5556_memory_ptr",
                                        "typeString": "struct IRelayHub.RelayHubConfig"
                                    },
                                    "typeName": {
                                        "id": 5790,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 5789,
                                            "name": "RelayHubConfig",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 5556,
                                            "src": "12737:14:16"
                                        },
                                        "referencedDeclaration": 5556,
                                        "src": "12737:14:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayHubConfig_$5556_storage_ptr",
                                            "typeString": "struct IRelayHub.RelayHubConfig"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "12736:30:16"
                        },
                        "scope": 5896,
                        "src": "12686:81:16",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5794,
                            "nodeType": "StructuredDocumentation",
                            "src": "12773:289:16",
                            "text": " @param token An address of an ERC-20 compatible tokens.\n @return The minimum amount of a given `token` that needs to be staked so that the Relay Manager\n is considered to be 'staked' by this `RelayHub`. Zero value means this token is not allowed for staking."
                        },
                        "functionSelector": "ddf73789",
                        "id": 5802,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getMinimumStakePerToken",
                        "nameLocation": "13076:23:16",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5798,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5797,
                                    "mutability": "mutable",
                                    "name": "token",
                                    "nameLocation": "13107:5:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5802,
                                    "src": "13100:12:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IERC20_$10849",
                                        "typeString": "contract IERC20"
                                    },
                                    "typeName": {
                                        "id": 5796,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 5795,
                                            "name": "IERC20",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 10849,
                                            "src": "13100:6:16"
                                        },
                                        "referencedDeclaration": 10849,
                                        "src": "13100:6:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IERC20_$10849",
                                            "typeString": "contract IERC20"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "13099:14:16"
                        },
                        "returnParameters": {
                            "id": 5801,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5800,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5802,
                                    "src": "13137:7:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 5799,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "13137:7:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "13136:9:16"
                        },
                        "scope": 5896,
                        "src": "13067:79:16",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5803,
                            "nodeType": "StructuredDocumentation",
                            "src": "13152:113:16",
                            "text": " @param worker An address of the Relay Worker.\n @return The address of its Relay Manager."
                        },
                        "functionSelector": "be7c76ad",
                        "id": 5810,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getWorkerManager",
                        "nameLocation": "13279:16:16",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5806,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5805,
                                    "mutability": "mutable",
                                    "name": "worker",
                                    "nameLocation": "13304:6:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5810,
                                    "src": "13296:14:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5804,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "13296:7:16",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "13295:16:16"
                        },
                        "returnParameters": {
                            "id": 5809,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5808,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5810,
                                    "src": "13335:7:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5807,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "13335:7:16",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "13334:9:16"
                        },
                        "scope": 5896,
                        "src": "13270:74:16",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5811,
                            "nodeType": "StructuredDocumentation",
                            "src": "13350:144:16",
                            "text": " @param manager An address of the Relay Manager.\n @return The count of Relay Workers associated with this Relay Manager."
                        },
                        "functionSelector": "59c4afc0",
                        "id": 5818,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getWorkerCount",
                        "nameLocation": "13508:14:16",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5814,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5813,
                                    "mutability": "mutable",
                                    "name": "manager",
                                    "nameLocation": "13531:7:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5818,
                                    "src": "13523:15:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5812,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "13523:7:16",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "13522:17:16"
                        },
                        "returnParameters": {
                            "id": 5817,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5816,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5818,
                                    "src": "13563:7:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 5815,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "13563:7:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "13562:9:16"
                        },
                        "scope": 5896,
                        "src": "13499:73:16",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5819,
                            "nodeType": "StructuredDocumentation",
                            "src": "13578:111:16",
                            "text": "@return An account's balance. It can be either a deposit of a `Paymaster`, or a revenue of a Relay Manager."
                        },
                        "functionSelector": "70a08231",
                        "id": 5826,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "balanceOf",
                        "nameLocation": "13703:9:16",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5822,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5821,
                                    "mutability": "mutable",
                                    "name": "target",
                                    "nameLocation": "13721:6:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5826,
                                    "src": "13713:14:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5820,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "13713:7:16",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "13712:16:16"
                        },
                        "returnParameters": {
                            "id": 5825,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5824,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5826,
                                    "src": "13752:7:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 5823,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "13752:7:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "13751:9:16"
                        },
                        "scope": 5896,
                        "src": "13694:67:16",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5827,
                            "nodeType": "StructuredDocumentation",
                            "src": "13767:59:16",
                            "text": "@return The `StakeManager` address for this `RelayHub`."
                        },
                        "functionSelector": "ca64f9e7",
                        "id": 5833,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getStakeManager",
                        "nameLocation": "13840:15:16",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5828,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "13855:2:16"
                        },
                        "returnParameters": {
                            "id": 5832,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5831,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5833,
                                    "src": "13881:13:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IStakeManager_$6284",
                                        "typeString": "contract IStakeManager"
                                    },
                                    "typeName": {
                                        "id": 5830,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 5829,
                                            "name": "IStakeManager",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 6284,
                                            "src": "13881:13:16"
                                        },
                                        "referencedDeclaration": 6284,
                                        "src": "13881:13:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IStakeManager_$6284",
                                            "typeString": "contract IStakeManager"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "13880:15:16"
                        },
                        "scope": 5896,
                        "src": "13831:65:16",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5834,
                            "nodeType": "StructuredDocumentation",
                            "src": "13902:56:16",
                            "text": "@return The `Penalizer` address for this `RelayHub`."
                        },
                        "functionSelector": "75dc7b4e",
                        "id": 5839,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getPenalizer",
                        "nameLocation": "13972:12:16",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5835,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "13984:2:16"
                        },
                        "returnParameters": {
                            "id": 5838,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5837,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5839,
                                    "src": "14010:7:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5836,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "14010:7:16",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "14009:9:16"
                        },
                        "scope": 5896,
                        "src": "13963:56:16",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5840,
                            "nodeType": "StructuredDocumentation",
                            "src": "14025:61:16",
                            "text": "@return The `RelayRegistrar` address for this `RelayHub`."
                        },
                        "functionSelector": "51d85156",
                        "id": 5845,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getRelayRegistrar",
                        "nameLocation": "14100:17:16",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5841,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "14117:2:16"
                        },
                        "returnParameters": {
                            "id": 5844,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5843,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5845,
                                    "src": "14143:7:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5842,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "14143:7:16",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "14142:9:16"
                        },
                        "scope": 5896,
                        "src": "14091:61:16",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5846,
                            "nodeType": "StructuredDocumentation",
                            "src": "14158:59:16",
                            "text": "@return The `BatchGateway` address for this `RelayHub`."
                        },
                        "functionSelector": "f7908a74",
                        "id": 5851,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getBatchGateway",
                        "nameLocation": "14231:15:16",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5847,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "14246:2:16"
                        },
                        "returnParameters": {
                            "id": 5850,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5849,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5851,
                                    "src": "14272:7:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5848,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "14272:7:16",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "14271:9:16"
                        },
                        "scope": 5896,
                        "src": "14222:59:16",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5852,
                            "nodeType": "StructuredDocumentation",
                            "src": "14287:209:16",
                            "text": " @notice Uses `StakeManager` to decide if the Relay Manager can be considered staked or not.\n Returns if the stake's token, amount and delay satisfy all requirements, reverts otherwise."
                        },
                        "functionSelector": "e6e22e12",
                        "id": 5857,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "verifyRelayManagerStaked",
                        "nameLocation": "14510:24:16",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5855,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5854,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "14543:12:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5857,
                                    "src": "14535:20:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5853,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "14535:7:16",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "14534:22:16"
                        },
                        "returnParameters": {
                            "id": 5856,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "14570:0:16"
                        },
                        "scope": 5896,
                        "src": "14501:70:16",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5858,
                            "nodeType": "StructuredDocumentation",
                            "src": "14577:229:16",
                            "text": " @notice Uses `StakeManager` to check if the Relay Manager can be considered abandoned or not.\n Returns true if the stake's abandonment time is in the past including the escheatment delay, false otherwise."
                        },
                        "functionSelector": "39622167",
                        "id": 5865,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "isRelayEscheatable",
                        "nameLocation": "14820:18:16",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5861,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5860,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "14847:12:16",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5865,
                                    "src": "14839:20:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5859,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "14839:7:16",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "14838:22:16"
                        },
                        "returnParameters": {
                            "id": 5864,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5863,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5865,
                                    "src": "14884:4:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 5862,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "14884:4:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "14883:6:16"
                        },
                        "scope": 5896,
                        "src": "14811:79:16",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5866,
                            "nodeType": "StructuredDocumentation",
                            "src": "14896:111:16",
                            "text": "@return `true` if the `RelayHub` is deprecated, `false` it it is not deprecated and can serve transactions."
                        },
                        "functionSelector": "c7178230",
                        "id": 5871,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "isDeprecated",
                        "nameLocation": "15021:12:16",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5867,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "15033:2:16"
                        },
                        "returnParameters": {
                            "id": 5870,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5869,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5871,
                                    "src": "15059:4:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 5868,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "15059:4:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "15058:6:16"
                        },
                        "scope": 5896,
                        "src": "15012:53:16",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5872,
                            "nodeType": "StructuredDocumentation",
                            "src": "15071:77:16",
                            "text": "@return The timestamp from which the hub no longer allows relaying calls."
                        },
                        "functionSelector": "3c16e59a",
                        "id": 5877,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getDeprecationTime",
                        "nameLocation": "15162:18:16",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5873,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "15180:2:16"
                        },
                        "returnParameters": {
                            "id": 5876,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5875,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5877,
                                    "src": "15206:7:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 5874,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "15206:7:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "15205:9:16"
                        },
                        "scope": 5896,
                        "src": "15153:62:16",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5878,
                            "nodeType": "StructuredDocumentation",
                            "src": "15221:69:16",
                            "text": "@return The block number in which the contract has been deployed."
                        },
                        "functionSelector": "20ffd56d",
                        "id": 5883,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getCreationBlock",
                        "nameLocation": "15304:16:16",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5879,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "15320:2:16"
                        },
                        "returnParameters": {
                            "id": 5882,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5881,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5883,
                                    "src": "15346:7:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 5880,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "15346:7:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "15345:9:16"
                        },
                        "scope": 5896,
                        "src": "15295:60:16",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5884,
                            "nodeType": "StructuredDocumentation",
                            "src": "15361:66:16",
                            "text": "@return a SemVer-compliant version of the `RelayHub` contract."
                        },
                        "functionSelector": "d904c732",
                        "id": 5889,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "versionHub",
                        "nameLocation": "15441:10:16",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5885,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "15451:2:16"
                        },
                        "returnParameters": {
                            "id": 5888,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5887,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5889,
                                    "src": "15477:13:16",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_memory_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 5886,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "15477:6:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "15476:15:16"
                        },
                        "scope": 5896,
                        "src": "15432:60:16",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5890,
                            "nodeType": "StructuredDocumentation",
                            "src": "15498:106:16",
                            "text": "@return A total measurable amount of gas left to current execution. Same as 'gasleft()' for pure EVMs."
                        },
                        "functionSelector": "45bdade7",
                        "id": 5895,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "aggregateGasleft",
                        "nameLocation": "15618:16:16",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5891,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "15634:2:16"
                        },
                        "returnParameters": {
                            "id": 5894,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5893,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5895,
                                    "src": "15660:7:16",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 5892,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "15660:7:16",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "15659:9:16"
                        },
                        "scope": 5896,
                        "src": "15609:60:16",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    }
                ],
                "scope": 5897,
                "src": "1000:14671:16",
                "usedErrors": []
            }
        ],
        "src": "0:15671:16"
    },
    "compiler": {
        "name": "solc",
        "version": "0.8.7+commit.e28d00a7.Emscripten.clang"
    },
    "networks": {},
    "schemaVersion": "3.1.0",
    "updatedAt": "2023-03-16T16:54:15.205Z",
    "devdoc": {
        "events": {
            "TransactionRejectedByPaymaster(address,address,bytes32,address,address,address,bytes4,uint256,bytes)": {
                "params": {
                    "reason": "contains a revert reason returned from preRelayedCall or forwarder."
                }
            }
        },
        "kind": "dev",
        "methods": {
            "aggregateGasleft()": {
                "returns": {
                    "_0": "A total measurable amount of gas left to current execution. Same as 'gasleft()' for pure EVMs."
                }
            },
            "balanceOf(address)": {
                "returns": {
                    "_0": "An account's balance. It can be either a deposit of a `Paymaster`, or a revenue of a Relay Manager."
                }
            },
            "calculateCharge(uint256,(uint256,uint256,uint256,address,address,address,bytes,uint256))": {
                "params": {
                    "gasUsed": "An amount of gas used by the transaction.",
                    "relayData": "The details of a transaction signed by the sender."
                },
                "returns": {
                    "_0": "The calculated charge, in wei."
                }
            },
            "calculateDevCharge(uint256)": {
                "params": {
                    "charge": "The amount of Ether in wei the Paymaster will be charged for this transaction."
                },
                "returns": {
                    "_0": "The calculated devFee, in wei."
                }
            },
            "deprecateHub(uint256)": {
                "params": {
                    "_deprecationTime": "The timestamp in seconds after which the `RelayHub` stops serving transactions."
                }
            },
            "getBatchGateway()": {
                "returns": {
                    "_0": "The `BatchGateway` address for this `RelayHub`."
                }
            },
            "getConfiguration()": {
                "returns": {
                    "config": "The configuration of the `RelayHub`."
                }
            },
            "getCreationBlock()": {
                "returns": {
                    "_0": "The block number in which the contract has been deployed."
                }
            },
            "getDeprecationTime()": {
                "returns": {
                    "_0": "The timestamp from which the hub no longer allows relaying calls."
                }
            },
            "getMinimumStakePerToken(address)": {
                "params": {
                    "token": "An address of an ERC-20 compatible tokens."
                },
                "returns": {
                    "_0": "The minimum amount of a given `token` that needs to be staked so that the Relay Manager is considered to be 'staked' by this `RelayHub`. Zero value means this token is not allowed for staking."
                }
            },
            "getPenalizer()": {
                "returns": {
                    "_0": "The `Penalizer` address for this `RelayHub`."
                }
            },
            "getRelayRegistrar()": {
                "returns": {
                    "_0": "The `RelayRegistrar` address for this `RelayHub`."
                }
            },
            "getStakeManager()": {
                "returns": {
                    "_0": "The `StakeManager` address for this `RelayHub`."
                }
            },
            "getWorkerCount(address)": {
                "params": {
                    "manager": "An address of the Relay Manager."
                },
                "returns": {
                    "_0": "The count of Relay Workers associated with this Relay Manager."
                }
            },
            "getWorkerManager(address)": {
                "params": {
                    "worker": "An address of the Relay Worker."
                },
                "returns": {
                    "_0": "The address of its Relay Manager."
                }
            },
            "isDeprecated()": {
                "returns": {
                    "_0": "`true` if the `RelayHub` is deprecated, `false` it it is not deprecated and can serve transactions."
                }
            },
            "penalize(address,address)": {
                "params": {
                    "beneficiary": "The address that called the `Penalizer` and will receive a reward for it.",
                    "relayWorker": "The address of the Relay Worker that committed a penalizable offense."
                }
            },
            "relayCall(string,uint256,((address,address,uint256,uint256,uint256,bytes,uint256),(uint256,uint256,uint256,address,address,address,bytes,uint256)),bytes,bytes)": {
                "params": {
                    "approvalData": "The dapp-specific data forwarded to the `Paymaster`'s `preRelayedCall` method. This value is **not** verified by the `RelayHub` in any way. As an example, it can be used to pass some kind of a third-party signature to the `Paymaster` for verification. Emits a `TransactionRelayed` event regardless of whether the transaction succeeded or failed.",
                    "domainSeparatorName": "The name of the Domain Separator used to verify the EIP-712 signature",
                    "maxAcceptanceBudget": "The maximum valid value for `paymaster.getGasLimits().acceptanceBudget` to return.",
                    "relayRequest": "All details of the requested relayed call.",
                    "signature": "The client's EIP-712 signature over the `relayRequest` struct."
                }
            },
            "setConfiguration((uint256,uint256,uint256,uint256,uint256,address,uint8,uint80,uint16))": {
                "params": {
                    "_config": "The new configuration."
                }
            },
            "setMinimumStakes(address[],uint256[])": {
                "params": {
                    "minimumStake": "An array of minimal amounts necessary for a corresponding token, in wei.",
                    "token": "An array of addresses of ERC-20 compatible tokens."
                }
            },
            "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."
            },
            "versionHub()": {
                "returns": {
                    "_0": "a SemVer-compliant version of the `RelayHub` contract."
                }
            }
        },
        "title": "The RelayHub interface",
        "version": 1
    },
    "userdoc": {
        "events": {
            "AbandonedRelayManagerBalanceEscheated(address,uint256)": {
                "notice": "This event is emitted in case a `relayManager` has been deemed \"abandoned\" for being unresponsive for a prolonged period of time.This event means the entire balance of the relay has been transferred to the `devAddress`."
            },
            "Deposited(address,address,uint256)": {
                "notice": "Emitted when `depositFor` is called, including the amount and account that was funded."
            },
            "HubDeprecated(uint256)": {
                "notice": "This event is emitted in case this `RelayHub` is deprecated and will stop serving transactions soon."
            },
            "RelayHubConfigured((uint256,uint256,uint256,uint256,uint256,address,uint8,uint80,uint16))": {
                "notice": "Emitted when a configuration of the `RelayHub` is changed"
            },
            "RelayWorkersAdded(address,address[],uint256)": {
                "notice": "Emitted when relays are added by a relayManager"
            },
            "StakingTokenDataChanged(address,uint256)": {
                "notice": "Emitted for each token configured for staking in setMinimumStakes"
            },
            "TransactionRejectedByPaymaster(address,address,bytes32,address,address,address,bytes4,uint256,bytes)": {
                "notice": "Emitted when an attempt to relay a call fails and the `Paymaster` does not accept the transaction. The actual relayed call was not executed, and the recipient not charged."
            },
            "TransactionRelayed(address,address,bytes32,address,address,address,bytes4,uint8,uint256)": {
                "notice": "Emitted when a transaction is relayed. Note that the actual internal function call might be reverted. The reason for a revert will be indicated in the `status` field of a corresponding `RelayCallStatus` value.`charge` is the Ether value deducted from the `Paymaster` balance. The amount added to the `relayManager` balance will be lower if there is an activated `devFee` in the `config`."
            },
            "TransactionResult(uint8,bytes)": {
                "notice": "This event is emitted in case the internal function returns a value or reverts with a revert string."
            },
            "Withdrawn(address,address,uint256)": {
                "notice": "Emitted when an account withdraws funds from the `RelayHub`."
            }
        },
        "kind": "user",
        "methods": {
            "addRelayWorkers(address[])": {
                "notice": "Add new worker addresses controlled by the sender who must be a staked Relay Manager address. Emits a `RelayWorkersAdded` event. This function can be called multiple times, emitting new events."
            },
            "calculateCharge(uint256,(uint256,uint256,uint256,address,address,address,bytes,uint256))": {
                "notice": "The fee is expressed as a base fee in wei plus percentage of the actual charge. For example, a value '40' stands for a 40% fee, so the recipient will be charged for 1.4 times the spent amount."
            },
            "calculateDevCharge(uint256)": {
                "notice": "The fee is expressed as a  percentage of the actual charge. For example, a value '40' stands for a 40% fee, so the Relay Manager will only get 60% of the `charge`."
            },
            "depositFor(address)": {
                "notice": "Deposits ether for a `Paymaster`, so that it can and pay for relayed transactions. :warning: **Warning** :warning: Unused balance can only be withdrawn by the holder itself, by calling `withdraw`. Emits a `Deposited` event."
            },
            "deprecateHub(uint256)": {
                "notice": "Deprecate hub by reverting all incoming `relayCall()` calls starting from a given timestamp"
            },
            "escheatAbandonedRelayBalance(address)": {
                "notice": "@param relayManager"
            },
            "isRelayEscheatable(address)": {
                "notice": "Uses `StakeManager` to 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."
            },
            "onRelayServerRegistered(address)": {
                "notice": "The `RelayRegistrar` callback to notify the `RelayHub` that this `relayManager` has updated registration."
            },
            "penalize(address,address)": {
                "notice": "In case the Relay Worker has been found to be in violation of some rules by the `Penalizer` contract, the `Penalizer` will call this method to execute a penalization. The `RelayHub` will look up the Relay Manager of the given Relay Worker and will forward the call to the `StakeManager` contract. The `RelayHub` does not perform the actual penalization either."
            },
            "relayCall(string,uint256,((address,address,uint256,uint256,uint256,bytes,uint256),(uint256,uint256,uint256,address,address,address,bytes,uint256)),bytes,bytes)": {
                "notice": "Relays a transaction. For this to succeed, multiple conditions must be met:  - `Paymaster`'s `preRelayCall` method must succeed and not revert.  - the `msg.sender` must be a registered Relay Worker that the user signed to use.  - the transaction's gas fees must be equal or larger than the ones that were signed by the sender.  - the transaction must have enough gas to run all internal transactions if they use all gas available to them.  - the `Paymaster` must have enough balance to pay the Relay Worker if all gas is spent.If all conditions are met, the call will be relayed and the `Paymaster` charged."
            },
            "setConfiguration((uint256,uint256,uint256,uint256,uint256,address,uint8,uint80,uint16))": {
                "notice": "Sets or changes the configuration of this `RelayHub`."
            },
            "setMinimumStakes(address[],uint256[])": {
                "notice": "Sets or changes the minimum amount of a given `token` that needs to be staked so that the Relay Manager is considered to be 'staked' by this `RelayHub`. Zero value means this token is not allowed for staking."
            },
            "verifyRelayManagerStaked(address)": {
                "notice": "Uses `StakeManager` to decide if the Relay Manager can be considered staked or not. Returns if the stake's token, amount and delay satisfy all requirements, reverts otherwise."
            },
            "withdraw(address,uint256)": {
                "notice": "Withdraws from an account's balance, sending it back to the caller. Relay Managers call this to retrieve their revenue, and `Paymasters` can also use it to reduce their funding. Emits a `Withdrawn` event."
            },
            "withdrawMultiple(address[],uint256[])": {
                "notice": "Withdraws from an account's balance, sending funds to multiple provided addresses. Relay Managers call this to retrieve their revenue, and `Paymasters` can also use it to reduce their funding. Emits a `Withdrawn` event for each destination."
            }
        },
        "notice": "The implementation of this interface provides all the information the GSN client needs to create a valid `RelayRequest` and also serves as an entry point for such requests.The RelayHub also handles all the related financial records and hold the balances of participants. The Paymasters keep their Ether deposited in the `RelayHub` in order to pay for the `RelayRequest`s that thay choose to pay for, and Relay Servers keep their earned Ether in the `RelayHub` until they choose to `withdraw()`The RelayHub on each supported network only needs a single instance and there is usually no need for dApp developers or Relay Server operators to redeploy, reimplement, modify or override the `RelayHub`.",
        "version": 1
    }
}
