{
    "contractName": "TestPaymasterConfigurableMisbehavior",
    "abi": [
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "previousOwner",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "newOwner",
                    "type": "address"
                }
            ],
            "name": "OwnershipTransferred",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "bool",
                    "name": "success",
                    "type": "bool"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "actualCharge",
                    "type": "uint256"
                }
            ],
            "name": "SampleRecipientPostCall",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [],
            "name": "SampleRecipientPreCall",
            "type": "event"
        },
        {
            "inputs": [],
            "name": "CALLDATA_SIZE_LIMIT",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "FORWARDER_HUB_OVERHEAD",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "PAYMASTER_ACCEPTANCE_BUDGET",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "POST_RELAYED_CALL_GAS_LIMIT",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "PRE_RELAYED_CALL_GAS_LIMIT",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "deposit",
            "outputs": [],
            "stateMutability": "payable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "expensiveGasLimits",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getRelayHub",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getTrustedForwarder",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "greedyAcceptanceBudget",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "outOfGasPre",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "owner",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes",
                    "name": "context",
                    "type": "bytes"
                },
                {
                    "internalType": "bool",
                    "name": "success",
                    "type": "bool"
                },
                {
                    "internalType": "uint256",
                    "name": "gasUseWithoutPost",
                    "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": "postRelayedCall",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "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"
                },
                {
                    "internalType": "uint256",
                    "name": "maxPossibleGas",
                    "type": "uint256"
                }
            ],
            "name": "preRelayedCall",
            "outputs": [
                {
                    "internalType": "bytes",
                    "name": "",
                    "type": "bytes"
                },
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "renounceOwnership",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "returnInvalidErrorCode",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "revertPostRelayCall",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "revertPreRelayCall",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "revertPreRelayCallOnEvenBlocks",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract IRelayHub",
                    "name": "hub",
                    "type": "address"
                }
            ],
            "name": "setRelayHub",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "forwarder",
                    "type": "address"
                }
            ],
            "name": "setTrustedForwarder",
            "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": "newOwner",
                    "type": "address"
                }
            ],
            "name": "transferOwnership",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "versionPaymaster",
            "outputs": [
                {
                    "internalType": "string",
                    "name": "",
                    "type": "string"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address payable",
                    "name": "destination",
                    "type": "address"
                }
            ],
            "name": "withdrawAll",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "withdrawDuringPostRelayedCall",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "withdrawDuringPreRelayedCall",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                },
                {
                    "internalType": "address payable",
                    "name": "target",
                    "type": "address"
                }
            ],
            "name": "withdrawRelayHubDepositTo",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "stateMutability": "payable",
            "type": "receive"
        },
        {
            "inputs": [
                {
                    "internalType": "bool",
                    "name": "val",
                    "type": "bool"
                }
            ],
            "name": "setWithdrawDuringPostRelayedCall",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bool",
                    "name": "val",
                    "type": "bool"
                }
            ],
            "name": "setWithdrawDuringPreRelayedCall",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bool",
                    "name": "val",
                    "type": "bool"
                }
            ],
            "name": "setReturnInvalidErrorCode",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bool",
                    "name": "val",
                    "type": "bool"
                }
            ],
            "name": "setRevertPostRelayCall",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bool",
                    "name": "val",
                    "type": "bool"
                }
            ],
            "name": "setRevertPreRelayCall",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bool",
                    "name": "val",
                    "type": "bool"
                }
            ],
            "name": "setRevertPreRelayCallOnEvenBlocks",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bool",
                    "name": "val",
                    "type": "bool"
                }
            ],
            "name": "setOutOfGasPre",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bool",
                    "name": "val",
                    "type": "bool"
                }
            ],
            "name": "setGreedyAcceptanceBudget",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bool",
                    "name": "val",
                    "type": "bool"
                }
            ],
            "name": "setExpensiveGasLimits",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "withdrawAllBalance",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getGasAndDataLimits",
            "outputs": [
                {
                    "components": [
                        {
                            "internalType": "uint256",
                            "name": "acceptanceBudget",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "preRelayedCallGasLimit",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "postRelayedCallGasLimit",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "calldataSizeLimit",
                            "type": "uint256"
                        }
                    ],
                    "internalType": "struct IPaymaster.GasAndDataLimits",
                    "name": "",
                    "type": "tuple"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "acceptanceBudget",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "preRelayedCallGasLimit",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "postRelayedCallGasLimit",
                    "type": "uint256"
                }
            ],
            "name": "setGasLimits",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bool",
                    "name": "on",
                    "type": "bool"
                }
            ],
            "name": "setTrustRecipientRevert",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        }
    ],
    "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"actualCharge\",\"type\":\"uint256\"}],\"name\":\"SampleRecipientPostCall\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"SampleRecipientPreCall\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"CALLDATA_SIZE_LIMIT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FORWARDER_HUB_OVERHEAD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PAYMASTER_ACCEPTANCE_BUDGET\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POST_RELAYED_CALL_GAS_LIMIT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PRE_RELAYED_CALL_GAS_LIMIT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"expensiveGasLimits\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGasAndDataLimits\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"acceptanceBudget\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"preRelayedCallGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"postRelayedCallGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"calldataSizeLimit\",\"type\":\"uint256\"}],\"internalType\":\"struct IPaymaster.GasAndDataLimits\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRelayHub\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTrustedForwarder\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"greedyAcceptanceBudget\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"outOfGasPre\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"context\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"gasUseWithoutPost\",\"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\":\"postRelayedCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"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\"},{\"internalType\":\"uint256\",\"name\":\"maxPossibleGas\",\"type\":\"uint256\"}],\"name\":\"preRelayedCall\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"returnInvalidErrorCode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"revertPostRelayCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"revertPreRelayCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"revertPreRelayCallOnEvenBlocks\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"val\",\"type\":\"bool\"}],\"name\":\"setExpensiveGasLimits\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"acceptanceBudget\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"preRelayedCallGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"postRelayedCallGasLimit\",\"type\":\"uint256\"}],\"name\":\"setGasLimits\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"val\",\"type\":\"bool\"}],\"name\":\"setGreedyAcceptanceBudget\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"val\",\"type\":\"bool\"}],\"name\":\"setOutOfGasPre\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IRelayHub\",\"name\":\"hub\",\"type\":\"address\"}],\"name\":\"setRelayHub\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"val\",\"type\":\"bool\"}],\"name\":\"setReturnInvalidErrorCode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"val\",\"type\":\"bool\"}],\"name\":\"setRevertPostRelayCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"val\",\"type\":\"bool\"}],\"name\":\"setRevertPreRelayCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"val\",\"type\":\"bool\"}],\"name\":\"setRevertPreRelayCallOnEvenBlocks\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"on\",\"type\":\"bool\"}],\"name\":\"setTrustRecipientRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"}],\"name\":\"setTrustedForwarder\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"val\",\"type\":\"bool\"}],\"name\":\"setWithdrawDuringPostRelayedCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"val\",\"type\":\"bool\"}],\"name\":\"setWithdrawDuringPreRelayedCall\",\"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\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"versionPaymaster\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"destination\",\"type\":\"address\"}],\"name\":\"withdrawAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdrawAllBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdrawDuringPostRelayedCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdrawDuringPreRelayedCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"withdrawRelayHubDepositTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getGasAndDataLimits()\":{\"returns\":{\"_0\":\"An instance of the `GasAndDataLimits` struct ##### `acceptanceBudget` If the transactions consumes more than `acceptanceBudget` this Paymaster will be charged for gas no matter what. Transaction that gets rejected after consuming more than `acceptanceBudget` gas is on this Paymaster's expense. Should be set to an amount gas this Paymaster expects to spend deciding whether to accept or reject a request. This includes gas consumed by calculations in the `preRelayedCall`, `Forwarder` and the recipient contract. :warning: **Warning** :warning: As long this value is above `preRelayedCallGasLimit` (see defaults in `BasePaymaster`), the Paymaster is guaranteed it will never pay for rejected transactions. If this value is below `preRelayedCallGasLimit`, it might might make Paymaster open to a \\\"griefing\\\" attack. The relayers should prefer lower `acceptanceBudget`, as it improves their chances of being compensated. From a Relay's point of view, this is the highest gas value a bad Paymaster may cost the relay, since the paymaster will pay anything above that value regardless of whether the transaction succeeds or reverts. Specifying value too high might make the call rejected by relayers (see `maxAcceptanceBudget` in server config). ##### `preRelayedCallGasLimit` The max gas usage of preRelayedCall. Any revert of the `preRelayedCall` is a request rejection by the paymaster. As long as `acceptanceBudget` is above `preRelayedCallGasLimit`, any such revert is not payed by the paymaster. ##### `postRelayedCallGasLimit` The max gas usage of postRelayedCall. The Paymaster is not charged for the maximum, only for actually used gas. Note that an OOG will revert the inner transaction, but the paymaster will be charged for it anyway.\"}},\"getRelayHub()\":{\"returns\":{\"_0\":\"The address of the `RelayHub` that is trusted by this Paymaster to execute the requests.\"}},\"getTrustedForwarder()\":{\"returns\":{\"_0\":\"The address of the `Forwarder` that is trusted by this Paymaster to execute the requests.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"postRelayedCall(bytes,bool,uint256,(uint256,uint256,uint256,address,address,address,bytes,uint256))\":{\"params\":{\"context\":\"The call context, as returned by the preRelayedCall\",\"gasUseWithoutPost\":\"The actual amount of gas used by the entire transaction, EXCEPT        the gas used by the postRelayedCall itself.\",\"relayData\":\"The relay params of the request. can be used by relayHub.calculateCharge()\",\"success\":\"`true` if the relayed call succeeded, false if it reverted\"}},\"preRelayedCall(((address,address,uint256,uint256,uint256,bytes,uint256),(uint256,uint256,uint256,address,address,address,bytes,uint256)),bytes,bytes,uint256)\":{\"params\":{\"approvalData\":\"- extra dapp-specific data (e.g. signature from trusted party)\",\"maxPossibleGas\":\"- based on values returned from `getGasAndDataLimits` the RelayHub will calculate the maximum possible amount of gas the user may be charged for. In order to convert this value to wei, the Paymaster has to call \\\"relayHub.calculateCharge()\\\"\",\"relayRequest\":\"- the full relay request structure\",\"signature\":\"- user's EIP712-compatible signature of the `relayRequest`. Note that in most cases the paymaster shouldn't try use it at all. It is always checked by the forwarder immediately after preRelayedCall returns.\"},\"returns\":{\"_0\":\"A byte array to be passed to postRelayedCall. Can contain any data needed by this Paymaster in any form or be empty if no extra data is needed.\",\"_1\":\"The flag that allows a Paymaster to \\\"delegate\\\" the rejection to the recipient code. It also means the Paymaster trust the recipient to reject fast: both preRelayedCall, forwarder check and recipient checks must fit into the GasLimits.acceptanceBudget, otherwise the TX is paid by the Paymaster. `true` if the Paymaster wants to reject the TX if the recipient reverts. `false` if the Paymaster wants rejects by the recipient to be completed on chain and paid by the Paymaster.\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"versionPaymaster()\":{\"returns\":{\"_0\":\"version The SemVer string of this Paymaster's version.\"}},\"withdrawRelayHubDepositTo(uint256,address)\":{\"params\":{\"amount\":\"The amount to be subtracted from the sender.\",\"target\":\"The target to which the amount will be transferred.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getGasAndDataLimits()\":{\"notice\":\"Return the Gas Limits for Paymaster's functions and maximum msg.data length values for this Paymaster. This function allows different paymasters to have different properties without changes to the RelayHub.\"},\"getTrustedForwarder()\":{\"notice\":\":warning: **Warning** :warning: using incorrect Forwarder may cause the Paymaster to agreeing to pay for invalid transactions.\"},\"postRelayedCall(bytes,bool,uint256,(uint256,uint256,uint256,address,address,address,bytes,uint256))\":{\"notice\":\"This method is called after the actual relayed function call. It may be used to record the transaction (e.g. charge the caller by some contract logic) for this call. Revert in this functions causes a revert of the client's relayed call (and preRelayedCall(), but the Paymaster is still committed to pay the relay for the entire transaction.\"},\"preRelayedCall(((address,address,uint256,uint256,uint256,bytes,uint256),(uint256,uint256,uint256,address,address,address,bytes,uint256)),bytes,bytes,uint256)\":{\"notice\":\"Called by the Relay in view mode and later by the `RelayHub` on-chain to validate that the Paymaster agrees to pay for this call. The request is considered to be rejected by the Paymaster in one of the following conditions:  - `preRelayedCall()` method reverts  - the `Forwarder` reverts because of nonce or signature error  - the `Paymaster` returned `rejectOnRecipientRevert: true` and the recipient contract reverted    (and all that did not consume more than `acceptanceBudget` gas). In any of the above cases, all Paymaster calls and the recipient call are reverted. In any other case the Paymaster will pay for the gas cost of the transaction. Note that even if `postRelayedCall` is reverted the Paymaster will be charged.\"},\"setRelayHub(address)\":{\"notice\":\"The owner of the Paymaster can change the instance of the RelayHub this Paymaster works with. :warning: **Warning** :warning: The deposit on the previous RelayHub must be withdrawn first.\"},\"setTrustedForwarder(address)\":{\"notice\":\"The owner of the Paymaster can change the instance of the Forwarder this Paymaster works with.the Recipients must trust this Forwarder as well in order for the configuration to remain functional.\"},\"withdrawAllBalance()\":{\"notice\":\"leaving withdrawal public and unprotected\"},\"withdrawRelayHubDepositTo(uint256,address)\":{\"notice\":\"Withdraw deposit from the RelayHub.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/Users/alexf/gsn2/packages/contracts/solpp/test/TestPaymasterConfigurableMisbehavior.sol\":\"TestPaymasterConfigurableMisbehavior\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/alexf/gsn2/packages/contracts/solpp/BasePaymaster.sol\":{\"keccak256\":\"0x89c669597c94431753f0e043015677d0a2261121d8dee5db04baa9e0bd60506e\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://195cad8f002b5fd930f007f6f582a8d2193574422c74d65fc556ae58d4227f76\",\"dweb:/ipfs/QmPxDaWYdZfB1kwKCxVMFw92h59RarKXkyadcVT5LT5avd\"]},\"/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/IERC2771Recipient.sol\":{\"keccak256\":\"0x92a3665ec2fc3d2ab78cf8a08451b2ab6466dc7fae3c215150be2132500406fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://364eee344363535733b4cc1a7748e1fc8b10786f6df6c0e2bc0082bcb2477e0e\",\"dweb:/ipfs/QmfCwWAxFqU4woSqu3g5BFPASEA7eCSwcwUSHM9EoYhYdu\"]},\"/Users/alexf/gsn2/packages/contracts/solpp/interfaces/IPaymaster.sol\":{\"keccak256\":\"0x205617108fad6f3543fc12773e9d25998e944852e8ed9d71f79cb799ae299246\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://4903018f63b15211f2714edcf1c56f5c0bee6fea07efaaf908d3a78d07fb6d84\",\"dweb:/ipfs/Qmezexeh6GszFUHW2dgTGWTfb613Ni3tfjLqAtdAYAxCpQ\"]},\"/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/test/TestPaymasterConfigurableMisbehavior.sol\":{\"keccak256\":\"0xb383ff5807d66eaba645b63fa718f63b351cd134ec7b1a897ec9dc7ee4d81b3e\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://c3c1db889cad142731dad08fd76cbb7585aed967f47cd7c785b76bd7530180f3\",\"dweb:/ipfs/QmZfefyFmWeDZ8mNSrz6Atzq6sVMbqTkmCM7wf1PGwZ7xg\"]},\"/Users/alexf/gsn2/packages/contracts/solpp/test/TestPaymasterEverythingAccepted.sol\":{\"keccak256\":\"0xd21014ab3a4ada1c21486db36c971e30be61451e519eaa61f3f074908247c607\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://2956d687a5691de930f698a22a1ff62b151792fbfd4e4a928a5cf6d982e03921\",\"dweb:/ipfs/QmNgkGYL4vqUu6jHHHsRfdCFLnvRQ7WTatkVVJoW2YwJtX\"]},\"/Users/alexf/gsn2/packages/contracts/solpp/utils/GsnEip712Library.sol\":{\"keccak256\":\"0xc35980f371cab5d9af3e1ead06f82b2afb705a8dbb2a5f53793f0179c485c274\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://dd7732d690c7959df567ee3e4863b0045583506fbae3c87b684b6173fd126968\",\"dweb:/ipfs/QmUbcUAqxKZTQS5ZwwPVnfNAtCmas4pPWQhRWXXwWQEeef\"]},\"/Users/alexf/gsn2/packages/contracts/solpp/utils/GsnTypes.sol\":{\"keccak256\":\"0xfc3ed2bbd925e24facf0c3bb96d57dd7fc5bcc4a684b5473f04e8d209b758805\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://cb57b5b38d3e588f119ae45174891f2049d1d0de160a12b81a20335cd8bf731b\",\"dweb:/ipfs/Qmf6xfbdLbTKEpnzxwnSaRy1YZJtLYTZh8URqry86oyoSU\"]},\"/Users/alexf/gsn2/packages/contracts/solpp/utils/GsnUtils.sol\":{\"keccak256\":\"0x8616968305b6127f4cb43209502e074c3964230a66c703e6b8623b03e5ec6442\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://2b1f1163fee75613024b38c25e17649933919f4a47a5ba5e8c3ea046023eb1ad\",\"dweb:/ipfs/QmNWReZE8BQ82eXahdKjnNjQWHuH9L9wcTcnKgyV5ypKCa\"]},\"/Users/alexf/gsn2/packages/contracts/solpp/utils/MinLibBytes.sol\":{\"keccak256\":\"0xa61a3d8fcd89182975d0bd17b86c22b6affd2f7bf26db66b1ddb2ee396f122ab\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2e0bc21e2c8c2f483aee9d5bc003fa77dc7afddbaa7cc99560581a416cfdef11\",\"dweb:/ipfs/QmbwLE7AJpoH2LVeeHxewq3tf1vXhLNUdYsubWxzDGKfTr\"]},\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2\",\"dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y\"]},\"@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/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fb0048dee081f6fffa5f74afc3fb328483c2a30504e94a0ddd2a5114d731ec4d\",\"dweb:/ipfs/QmZptt1nmYoA5SgjwnSgWqgUSDgm4q52Yos3xhnMv3MV43\"]},\"@openzeppelin/contracts/utils/introspection/ERC165Checker.sol\":{\"keccak256\":\"0xc65c83c1039508fa7a42a09a3c6a32babd1c438ba4dbb23581255e784b5d5eed\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a1b3b38db0f76429db899909025e534c366415e9ea8b5ddc4c8901e6a7fc1461\",\"dweb:/ipfs/QmYv1KxyHjLEky9JWNSsSfpGJbiCxFyzVFgTwQKpiqYGUg\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]}},\"version\":1}",
    "bytecode": "0x6080604052620000196200005460201b62000f041760201c565b805160035560208101516004556040810151600555606001516006553480156200004257600080fd5b506200004e33620000c0565b62000137565b620000806040518060800160405280600081526020016000815260200160008152602001600081525090565b604051806080016040528061c350620186a06200009e919062000110565b8152602001620186a081526020016201adb08152602001612904815250905090565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600082198211156200013257634e487b7160e01b600052601160045260246000fd5b500190565b611a5980620001476000396000f3fe6080604052600436106102495760003560e01c80637bb0526411610139578063c510906c116100b6578063d721baa51161007a578063d721baa5146107d1578063da7422281461081d578063df463a661461083d578063f2fde38b14610852578063f9c002f714610872578063fa09e6301461088957600080fd5b8063c510906c14610723578063c82e8ad414610744578063ce1b815f14610772578063d0e30db014610790578063d20bd9801461079857600080fd5b8063921276ea116100fd578063921276ea14610653578063b039a88f14610675578063b90b41cf146106bd578063ba7ddf1c146106d3578063bbdaa3c91461070c57600080fd5b80637bb05264146105a15780637bdf2ec7146105c15780637d4e494a146105f3578063817f12dd146106145780638da5cb5b1461063557600080fd5b806359b8aa2e116101c75780636c9a7b1b1161018b5780636c9a7b1b146104c15780636ef2b63e146104fa5780636f0f690214610533578063715018a61461056c57806376fa01c31461058157600080fd5b806359b8aa2e146103df5780635c5e3db114610400578063618df88d14610416578063645c96871461044f5780636a7ef8e01461048857600080fd5b80632d14c4b71161020e5780632d14c4b71461031f57806338b58641146103415780633b17eadc1461037a5780634b9ed5e31461039d57806351d88938146103be57600080fd5b8062be5dd41461025557806301053c331461028c57806301ffc9a7146102bd5780631bab7cab146102dd57806322455ccf146102fe57600080fd5b3661025057005b600080fd5b34801561026157600080fd5b506102756102703660046116d7565b6108a9565b604051610283929190611839565b60405180910390f35b34801561029857600080fd5b506002546102ad90600160a81b900460ff1681565b6040519015158152602001610283565b3480156102c957600080fd5b506102ad6102d836600461161d565b6108db565b3480156102e957600080fd5b506002546102ad90600160e01b900460ff1681565b34801561030a57600080fd5b506002546102ad90600160d81b900460ff1681565b34801561032b57600080fd5b5061033f61033a366004611795565b61092d565b005b34801561034d57600080fd5b5061033f61035c3660046115e3565b60028054911515600160b01b0260ff60b01b19909216919091179055565b34801561038657600080fd5b5061038f61099f565b604051908152602001610283565b3480156103a957600080fd5b506002546102ad90600160d01b900460ff1681565b3480156103ca57600080fd5b506002546102ad90600160c01b900460ff1681565b3480156103eb57600080fd5b506002546102ad90600160b81b900460ff1681565b34801561040c57600080fd5b5061038f61290481565b34801561042257600080fd5b5061033f6104313660046115e3565b60028054911515600160a01b0260ff60a01b19909216919091179055565b34801561045b57600080fd5b5061033f61046a3660046115e3565b60028054911515600160e01b0260ff60e01b19909216919091179055565b34801561049457600080fd5b5061033f6104a33660046115e3565b60028054911515600160c81b0260ff60c81b19909216919091179055565b3480156104cd57600080fd5b5061033f6104dc3660046115e3565b60028054911515600160a81b0260ff60a81b19909216919091179055565b34801561050657600080fd5b5061033f6105153660046115e3565b60028054911515600160d01b0260ff60d01b19909216919091179055565b34801561053f57600080fd5b5061033f61054e3660046115e3565b60028054911515600160c01b0260ff60c01b19909216919091179055565b34801561057857600080fd5b5061033f610ae2565b34801561058d57600080fd5b5061033f61059c366004611647565b610af6565b3480156105ad57600080fd5b5061033f6105bc3660046115c6565b610b12565b3480156105cd57600080fd5b506001546001600160a01b03165b6040516001600160a01b039091168152602001610283565b3480156105ff57600080fd5b506002546102ad90600160c81b900460ff1681565b34801561062057600080fd5b506002546102ad90600160a01b900460ff1681565b34801561064157600080fd5b506000546001600160a01b03166105db565b34801561065f57600080fd5b50610668610ba2565b604051610283919061185d565b34801561068157600080fd5b5061068a610bc2565b60405161028391908151815260208083015190820152604080830151908201526060918201519181019190915260800190565b3480156106c957600080fd5b5061038f61c35081565b3480156106df57600080fd5b5061033f6106ee3660046115e3565b60028054911515600160b81b0260ff60b81b19909216919091179055565b34801561071857600080fd5b5061038f6201adb081565b34801561072f57600080fd5b506002546102ad90600160b01b900460ff1681565b34801561075057600080fd5b5061033f61075f3660046115e3565b6007805460ff1916911515919091179055565b34801561077e57600080fd5b506002546001600160a01b03166105db565b61033f610caf565b3480156107a457600080fd5b5061033f6107b33660046115e3565b60028054911515600160d81b0260ff60d81b19909216919091179055565b3480156107dd57600080fd5b5061033f6107ec3660046117c5565b6040805160808101825284815260208101849052908101829052600654606090910152600392909255600455600555565b34801561082957600080fd5b5061033f6108383660046115c6565b610d5d565b34801561084957600080fd5b5061038f610ded565b34801561085e57600080fd5b5061033f61086d3660046115c6565b610dff565b34801561087e57600080fd5b5061038f620186a081565b34801561089557600080fd5b5061033f6108a43660046115c6565b610e78565b606060006108b5610f6d565b6108be88610fc7565b6108cc88888888888861105f565b91509150965096945050505050565b60006001600160e01b031982166370d596f560e11b148061090c57506001600160e01b03198216630704183b60e11b145b8061092757506301ffc9a760e01b6001600160e01b03198316145b92915050565b6109356111c5565b60015460405163f3fef3a360e01b81526001600160a01b038381166004830152602482018590529091169063f3fef3a390604401600060405180830381600087803b15801561098357600080fd5b505af1158015610997573d6000803e3d6000fd5b505050505050565b6001546000906001600160a01b03166109fb5760405162461bcd60e51b81526020600482015260196024820152781c995b185e481a1d58881859191c995cdcc81b9bdd081cd95d603a1b60448201526064015b60405180910390fd5b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b158015610a3f57600080fd5b505afa158015610a53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a77919061177c565b60015460405163f3fef3a360e01b8152306004820152602481018390529192506001600160a01b03169063f3fef3a390604401600060405180830381600087803b158015610ac457600080fd5b505af1158015610ad8573d6000803e3d6000fd5b5092949350505050565b610aea6111c5565b610af4600061121f565b565b610afe610f6d565b610b0b858585858561126f565b5050505050565b610b1a6111c5565b610b346001600160a01b03821663e9fb30f760e01b6112b5565b610b805760405162461bcd60e51b815260206004820152601f60248201527f746172676574206973206e6f7420612076616c6964204952656c61794875620060448201526064016109f2565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60606040518060600160405280602881526020016119fc60289139905090565b610bed6040518060800160405280600081526020016000815260200160008152602001600081525090565b600254600160e01b900460ff1615610c33576000805b620186a0811215610c3057600354610c1b908361191e565b9150610c296102bc826118dd565b9050610c03565b50505b600254600160d81b900460ff1615610c825760405180608001604052806003600001546009610c629190611936565b815260045460208201526005546040820152600654606090910152919050565b50604080516080810182526003548152600454602082015260055491810191909152600654606082015290565b6001546001600160a01b0316610d035760405162461bcd60e51b81526020600482015260196024820152781c995b185e481a1d58881859191c995cdcc81b9bdd081cd95d603a1b60448201526064016109f2565b60015460405163aa67c91960e01b81523060048201526001600160a01b039091169063aa67c9199034906024016000604051808303818588803b158015610d4957600080fd5b505af1158015610b0b573d6000803e3d6000fd5b610d656111c5565b610d7f6001600160a01b0382166309788f9960e21b6112b5565b610dcb5760405162461bcd60e51b815260206004820181905260248201527f746172676574206973206e6f7420612076616c69642049466f7277617264657260448201526064016109f2565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b610dfc61c350620186a061191e565b81565b610e076111c5565b6001600160a01b038116610e6c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109f2565b610e758161121f565b50565b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b158015610ebc57600080fd5b505afa158015610ed0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef4919061177c565b9050610f00818361092d565b5050565b610f2f6040518060800160405280600081526020016000815260200160008152602001600081525090565b604051806080016040528061c350620186a0610f4b919061191e565b8152602001620186a081526020016201adb08152602001612904815250905090565b6001546001600160a01b03163314610af45760405162461bcd60e51b815260206004820152601e60248201527f63616e206f6e6c792062652063616c6c65642062792052656c6179487562000060448201526064016109f2565b610fd460208201826118c7565b610fe59060c081019060a0016115c6565b6001600160a01b03166110006002546001600160a01b031690565b6001600160a01b0316146110565760405162461bcd60e51b815260206004820152601860248201527f466f72776172646572206973206e6f742074727573746564000000000000000060448201526064016109f2565b610e75816112d8565b600254606090600090600160c01b900460ff161561108c5760005b8061108481611985565b91505061107a565b600254600160b01b900460ff16156110d55760405162461bcd60e51b815260206004820152600c60248201526b696e76616c696420636f646560a01b60448201526064016109f2565b600254600160a81b900460ff16156110f1576110ef61099f565b505b600254600160c81b900460ff161561111b5760405162461bcd60e51b81526004016109f290611870565b600254600160d01b900460ff16801561113c575061113a6002436119a0565b155b156111a25760405162461bcd60e51b815260206004820152603060248201527f596f752061736b6564206d6520746f20726576657274206f6e206576656e206260448201526f6c6f636b732c2072656d656d6265723f60801b60648201526084016109f2565b50506007546040805160208101909152600081529060ff16965096945050505050565b6000546001600160a01b03163314610af45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109f2565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600254600160a01b900460ff161561128b5761128961099f565b505b600254600160b81b900460ff1615610b0b5760405162461bcd60e51b81526004016109f290611870565b60006112c0836114c1565b80156112d157506112d183836114f4565b9392505050565b6000806112e583806118b1565b6112f69060408101906020016115c6565b6001600160a01b031663572b6c0560e01b61131460208601866118c7565b6113259060c081019060a0016115c6565b6040516001600160a01b03909116602482015260440160408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051611379919061181d565b600060405180830381855afa9150503d80600081146113b4576040519150601f19603f3d011682016040523d82523d6000602084013e6113b9565b606091505b50915091508161140b5760405162461bcd60e51b815260206004820152601c60248201527f697354727573746564466f727761726465723a2072657665727465640000000060448201526064016109f2565b805160201461145c5760405162461bcd60e51b815260206004820181905260248201527f697354727573746564466f727761726465723a2062616420726573706f6e736560448201526064016109f2565b808060200190518101906114709190611600565b6114bc5760405162461bcd60e51b815260206004820152601f60248201527f696e76616c696420666f7277617264657220666f7220726563697069656e740060448201526064016109f2565b505050565b60006114d4826301ffc9a760e01b6114f4565b801561092757506114ed826001600160e01b03196114f4565b1592915050565b604080516001600160e01b03198316602480830191909152825180830390910181526044909101909152602080820180516001600160e01b03166301ffc9a760e01b178152825160009392849283928392918391908a617530fa92503d91506000519050828015611566575060208210155b80156115725750600081115b979650505050505050565b60008083601f84011261158f57600080fd5b50813567ffffffffffffffff8111156115a757600080fd5b6020830191508360208285010111156115bf57600080fd5b9250929050565b6000602082840312156115d857600080fd5b81356112d1816119d8565b6000602082840312156115f557600080fd5b81356112d1816119ed565b60006020828403121561161257600080fd5b81516112d1816119ed565b60006020828403121561162f57600080fd5b81356001600160e01b0319811681146112d157600080fd5b60008060008060006080868803121561165f57600080fd5b853567ffffffffffffffff8082111561167757600080fd5b61168389838a0161157d565b909750955060208801359150611698826119ed565b90935060408701359250606087013590808211156116b557600080fd5b50860161010081890312156116c957600080fd5b809150509295509295909350565b600080600080600080608087890312156116f057600080fd5b863567ffffffffffffffff8082111561170857600080fd5b908801906040828b03121561171c57600080fd5b9096506020880135908082111561173257600080fd5b61173e8a838b0161157d565b9097509550604089013591508082111561175757600080fd5b5061176489828a0161157d565b979a9699509497949695606090950135949350505050565b60006020828403121561178e57600080fd5b5051919050565b600080604083850312156117a857600080fd5b8235915060208301356117ba816119d8565b809150509250929050565b6000806000606084860312156117da57600080fd5b505081359360208301359350604090920135919050565b60008151808452611809816020860160208601611955565b601f01601f19169290920160200192915050565b6000825161182f818460208701611955565b9190910192915050565b60408152600061184c60408301856117f1565b905082151560208301529392505050565b6020815260006112d160208301846117f1565b60208082526021908201527f596f752061736b6564206d6520746f207265766572742c2072656d656d6265726040820152603f60f81b606082015260800190565b6000823560de1983360301811261182f57600080fd5b6000823560fe1983360301811261182f57600080fd5b600080821280156001600160ff1b03849003851316156118ff576118ff6119c2565b600160ff1b8390038412811615611918576119186119c2565b50500190565b60008219821115611931576119316119c2565b500190565b6000816000190483118215151615611950576119506119c2565b500290565b60005b83811015611970578181015183820152602001611958565b8381111561197f576000848401525b50505050565b6000600019821415611999576119996119c2565b5060010190565b6000826119bd57634e487b7160e01b600052601260045260246000fd5b500690565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114610e7557600080fd5b8015158114610e7557600080fdfe332e302e302d626574612e332b6f70656e67736e2e746573742d7065612e697061796d6173746572a26469706673582212203168b1e0fd3a99622a8f505c1210279d51b9b75c358a53b4358250762d3b735364736f6c63430008070033",
    "deployedBytecode": "0x6080604052600436106102495760003560e01c80637bb0526411610139578063c510906c116100b6578063d721baa51161007a578063d721baa5146107d1578063da7422281461081d578063df463a661461083d578063f2fde38b14610852578063f9c002f714610872578063fa09e6301461088957600080fd5b8063c510906c14610723578063c82e8ad414610744578063ce1b815f14610772578063d0e30db014610790578063d20bd9801461079857600080fd5b8063921276ea116100fd578063921276ea14610653578063b039a88f14610675578063b90b41cf146106bd578063ba7ddf1c146106d3578063bbdaa3c91461070c57600080fd5b80637bb05264146105a15780637bdf2ec7146105c15780637d4e494a146105f3578063817f12dd146106145780638da5cb5b1461063557600080fd5b806359b8aa2e116101c75780636c9a7b1b1161018b5780636c9a7b1b146104c15780636ef2b63e146104fa5780636f0f690214610533578063715018a61461056c57806376fa01c31461058157600080fd5b806359b8aa2e146103df5780635c5e3db114610400578063618df88d14610416578063645c96871461044f5780636a7ef8e01461048857600080fd5b80632d14c4b71161020e5780632d14c4b71461031f57806338b58641146103415780633b17eadc1461037a5780634b9ed5e31461039d57806351d88938146103be57600080fd5b8062be5dd41461025557806301053c331461028c57806301ffc9a7146102bd5780631bab7cab146102dd57806322455ccf146102fe57600080fd5b3661025057005b600080fd5b34801561026157600080fd5b506102756102703660046116d7565b6108a9565b604051610283929190611839565b60405180910390f35b34801561029857600080fd5b506002546102ad90600160a81b900460ff1681565b6040519015158152602001610283565b3480156102c957600080fd5b506102ad6102d836600461161d565b6108db565b3480156102e957600080fd5b506002546102ad90600160e01b900460ff1681565b34801561030a57600080fd5b506002546102ad90600160d81b900460ff1681565b34801561032b57600080fd5b5061033f61033a366004611795565b61092d565b005b34801561034d57600080fd5b5061033f61035c3660046115e3565b60028054911515600160b01b0260ff60b01b19909216919091179055565b34801561038657600080fd5b5061038f61099f565b604051908152602001610283565b3480156103a957600080fd5b506002546102ad90600160d01b900460ff1681565b3480156103ca57600080fd5b506002546102ad90600160c01b900460ff1681565b3480156103eb57600080fd5b506002546102ad90600160b81b900460ff1681565b34801561040c57600080fd5b5061038f61290481565b34801561042257600080fd5b5061033f6104313660046115e3565b60028054911515600160a01b0260ff60a01b19909216919091179055565b34801561045b57600080fd5b5061033f61046a3660046115e3565b60028054911515600160e01b0260ff60e01b19909216919091179055565b34801561049457600080fd5b5061033f6104a33660046115e3565b60028054911515600160c81b0260ff60c81b19909216919091179055565b3480156104cd57600080fd5b5061033f6104dc3660046115e3565b60028054911515600160a81b0260ff60a81b19909216919091179055565b34801561050657600080fd5b5061033f6105153660046115e3565b60028054911515600160d01b0260ff60d01b19909216919091179055565b34801561053f57600080fd5b5061033f61054e3660046115e3565b60028054911515600160c01b0260ff60c01b19909216919091179055565b34801561057857600080fd5b5061033f610ae2565b34801561058d57600080fd5b5061033f61059c366004611647565b610af6565b3480156105ad57600080fd5b5061033f6105bc3660046115c6565b610b12565b3480156105cd57600080fd5b506001546001600160a01b03165b6040516001600160a01b039091168152602001610283565b3480156105ff57600080fd5b506002546102ad90600160c81b900460ff1681565b34801561062057600080fd5b506002546102ad90600160a01b900460ff1681565b34801561064157600080fd5b506000546001600160a01b03166105db565b34801561065f57600080fd5b50610668610ba2565b604051610283919061185d565b34801561068157600080fd5b5061068a610bc2565b60405161028391908151815260208083015190820152604080830151908201526060918201519181019190915260800190565b3480156106c957600080fd5b5061038f61c35081565b3480156106df57600080fd5b5061033f6106ee3660046115e3565b60028054911515600160b81b0260ff60b81b19909216919091179055565b34801561071857600080fd5b5061038f6201adb081565b34801561072f57600080fd5b506002546102ad90600160b01b900460ff1681565b34801561075057600080fd5b5061033f61075f3660046115e3565b6007805460ff1916911515919091179055565b34801561077e57600080fd5b506002546001600160a01b03166105db565b61033f610caf565b3480156107a457600080fd5b5061033f6107b33660046115e3565b60028054911515600160d81b0260ff60d81b19909216919091179055565b3480156107dd57600080fd5b5061033f6107ec3660046117c5565b6040805160808101825284815260208101849052908101829052600654606090910152600392909255600455600555565b34801561082957600080fd5b5061033f6108383660046115c6565b610d5d565b34801561084957600080fd5b5061038f610ded565b34801561085e57600080fd5b5061033f61086d3660046115c6565b610dff565b34801561087e57600080fd5b5061038f620186a081565b34801561089557600080fd5b5061033f6108a43660046115c6565b610e78565b606060006108b5610f6d565b6108be88610fc7565b6108cc88888888888861105f565b91509150965096945050505050565b60006001600160e01b031982166370d596f560e11b148061090c57506001600160e01b03198216630704183b60e11b145b8061092757506301ffc9a760e01b6001600160e01b03198316145b92915050565b6109356111c5565b60015460405163f3fef3a360e01b81526001600160a01b038381166004830152602482018590529091169063f3fef3a390604401600060405180830381600087803b15801561098357600080fd5b505af1158015610997573d6000803e3d6000fd5b505050505050565b6001546000906001600160a01b03166109fb5760405162461bcd60e51b81526020600482015260196024820152781c995b185e481a1d58881859191c995cdcc81b9bdd081cd95d603a1b60448201526064015b60405180910390fd5b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b158015610a3f57600080fd5b505afa158015610a53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a77919061177c565b60015460405163f3fef3a360e01b8152306004820152602481018390529192506001600160a01b03169063f3fef3a390604401600060405180830381600087803b158015610ac457600080fd5b505af1158015610ad8573d6000803e3d6000fd5b5092949350505050565b610aea6111c5565b610af4600061121f565b565b610afe610f6d565b610b0b858585858561126f565b5050505050565b610b1a6111c5565b610b346001600160a01b03821663e9fb30f760e01b6112b5565b610b805760405162461bcd60e51b815260206004820152601f60248201527f746172676574206973206e6f7420612076616c6964204952656c61794875620060448201526064016109f2565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60606040518060600160405280602881526020016119fc60289139905090565b610bed6040518060800160405280600081526020016000815260200160008152602001600081525090565b600254600160e01b900460ff1615610c33576000805b620186a0811215610c3057600354610c1b908361191e565b9150610c296102bc826118dd565b9050610c03565b50505b600254600160d81b900460ff1615610c825760405180608001604052806003600001546009610c629190611936565b815260045460208201526005546040820152600654606090910152919050565b50604080516080810182526003548152600454602082015260055491810191909152600654606082015290565b6001546001600160a01b0316610d035760405162461bcd60e51b81526020600482015260196024820152781c995b185e481a1d58881859191c995cdcc81b9bdd081cd95d603a1b60448201526064016109f2565b60015460405163aa67c91960e01b81523060048201526001600160a01b039091169063aa67c9199034906024016000604051808303818588803b158015610d4957600080fd5b505af1158015610b0b573d6000803e3d6000fd5b610d656111c5565b610d7f6001600160a01b0382166309788f9960e21b6112b5565b610dcb5760405162461bcd60e51b815260206004820181905260248201527f746172676574206973206e6f7420612076616c69642049466f7277617264657260448201526064016109f2565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b610dfc61c350620186a061191e565b81565b610e076111c5565b6001600160a01b038116610e6c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109f2565b610e758161121f565b50565b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b158015610ebc57600080fd5b505afa158015610ed0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef4919061177c565b9050610f00818361092d565b5050565b610f2f6040518060800160405280600081526020016000815260200160008152602001600081525090565b604051806080016040528061c350620186a0610f4b919061191e565b8152602001620186a081526020016201adb08152602001612904815250905090565b6001546001600160a01b03163314610af45760405162461bcd60e51b815260206004820152601e60248201527f63616e206f6e6c792062652063616c6c65642062792052656c6179487562000060448201526064016109f2565b610fd460208201826118c7565b610fe59060c081019060a0016115c6565b6001600160a01b03166110006002546001600160a01b031690565b6001600160a01b0316146110565760405162461bcd60e51b815260206004820152601860248201527f466f72776172646572206973206e6f742074727573746564000000000000000060448201526064016109f2565b610e75816112d8565b600254606090600090600160c01b900460ff161561108c5760005b8061108481611985565b91505061107a565b600254600160b01b900460ff16156110d55760405162461bcd60e51b815260206004820152600c60248201526b696e76616c696420636f646560a01b60448201526064016109f2565b600254600160a81b900460ff16156110f1576110ef61099f565b505b600254600160c81b900460ff161561111b5760405162461bcd60e51b81526004016109f290611870565b600254600160d01b900460ff16801561113c575061113a6002436119a0565b155b156111a25760405162461bcd60e51b815260206004820152603060248201527f596f752061736b6564206d6520746f20726576657274206f6e206576656e206260448201526f6c6f636b732c2072656d656d6265723f60801b60648201526084016109f2565b50506007546040805160208101909152600081529060ff16965096945050505050565b6000546001600160a01b03163314610af45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109f2565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600254600160a01b900460ff161561128b5761128961099f565b505b600254600160b81b900460ff1615610b0b5760405162461bcd60e51b81526004016109f290611870565b60006112c0836114c1565b80156112d157506112d183836114f4565b9392505050565b6000806112e583806118b1565b6112f69060408101906020016115c6565b6001600160a01b031663572b6c0560e01b61131460208601866118c7565b6113259060c081019060a0016115c6565b6040516001600160a01b03909116602482015260440160408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051611379919061181d565b600060405180830381855afa9150503d80600081146113b4576040519150601f19603f3d011682016040523d82523d6000602084013e6113b9565b606091505b50915091508161140b5760405162461bcd60e51b815260206004820152601c60248201527f697354727573746564466f727761726465723a2072657665727465640000000060448201526064016109f2565b805160201461145c5760405162461bcd60e51b815260206004820181905260248201527f697354727573746564466f727761726465723a2062616420726573706f6e736560448201526064016109f2565b808060200190518101906114709190611600565b6114bc5760405162461bcd60e51b815260206004820152601f60248201527f696e76616c696420666f7277617264657220666f7220726563697069656e740060448201526064016109f2565b505050565b60006114d4826301ffc9a760e01b6114f4565b801561092757506114ed826001600160e01b03196114f4565b1592915050565b604080516001600160e01b03198316602480830191909152825180830390910181526044909101909152602080820180516001600160e01b03166301ffc9a760e01b178152825160009392849283928392918391908a617530fa92503d91506000519050828015611566575060208210155b80156115725750600081115b979650505050505050565b60008083601f84011261158f57600080fd5b50813567ffffffffffffffff8111156115a757600080fd5b6020830191508360208285010111156115bf57600080fd5b9250929050565b6000602082840312156115d857600080fd5b81356112d1816119d8565b6000602082840312156115f557600080fd5b81356112d1816119ed565b60006020828403121561161257600080fd5b81516112d1816119ed565b60006020828403121561162f57600080fd5b81356001600160e01b0319811681146112d157600080fd5b60008060008060006080868803121561165f57600080fd5b853567ffffffffffffffff8082111561167757600080fd5b61168389838a0161157d565b909750955060208801359150611698826119ed565b90935060408701359250606087013590808211156116b557600080fd5b50860161010081890312156116c957600080fd5b809150509295509295909350565b600080600080600080608087890312156116f057600080fd5b863567ffffffffffffffff8082111561170857600080fd5b908801906040828b03121561171c57600080fd5b9096506020880135908082111561173257600080fd5b61173e8a838b0161157d565b9097509550604089013591508082111561175757600080fd5b5061176489828a0161157d565b979a9699509497949695606090950135949350505050565b60006020828403121561178e57600080fd5b5051919050565b600080604083850312156117a857600080fd5b8235915060208301356117ba816119d8565b809150509250929050565b6000806000606084860312156117da57600080fd5b505081359360208301359350604090920135919050565b60008151808452611809816020860160208601611955565b601f01601f19169290920160200192915050565b6000825161182f818460208701611955565b9190910192915050565b60408152600061184c60408301856117f1565b905082151560208301529392505050565b6020815260006112d160208301846117f1565b60208082526021908201527f596f752061736b6564206d6520746f207265766572742c2072656d656d6265726040820152603f60f81b606082015260800190565b6000823560de1983360301811261182f57600080fd5b6000823560fe1983360301811261182f57600080fd5b600080821280156001600160ff1b03849003851316156118ff576118ff6119c2565b600160ff1b8390038412811615611918576119186119c2565b50500190565b60008219821115611931576119316119c2565b500190565b6000816000190483118215151615611950576119506119c2565b500290565b60005b83811015611970578181015183820152602001611958565b8381111561197f576000848401525b50505050565b6000600019821415611999576119996119c2565b5060010190565b6000826119bd57634e487b7160e01b600052601260045260246000fd5b500690565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114610e7557600080fd5b8015158114610e7557600080fdfe332e302e302d626574612e332b6f70656e67736e2e746573742d7065612e697061796d6173746572a26469706673582212203168b1e0fd3a99622a8f505c1210279d51b9b75c358a53b4358250762d3b735364736f6c63430008070033",
    "immutableReferences": {},
    "sourceMap": "136:4706:23:-:0;;;3641:27;:25;;;;;:27;;:::i;:::-;3596:72;;;;;;;;;;;;;;;;;;;;;136:4706;;;;;;;;;-1:-1:-1;936:32:47;719:10:55;936:18:47;:32::i;:::-;136:4706:23;;1781:362:0;1879:41;136:4706:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1879:41:0;1944:192;;;;;;;;1052:5;1186:6;1318:51;;;;:::i;:::-;1944:192;;;;1186:6;1944:192;;;;1252:6;1944:192;;;;1421:5;1944:192;;;1937:199;;1781:362;:::o;2433:187:47:-;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:47;;;-1:-1:-1;;;;;;2541:17:47;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;14:225:63:-;54:3;85:1;81:6;78:1;75:13;72:136;;;130:10;125:3;121:20;118:1;111:31;165:4;162:1;155:15;193:4;190:1;183:15;72:136;-1:-1:-1;224:9:63;;14:225::o;:::-;136:4706:23;;;;;;",
    "deployedSourceMap": "136:4706:23:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5154:533:0;;;;;;;;;;-1:-1:-1;5154:533:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;271:40:23;;;;;;;;;;-1:-1:-1;271:40:23;;;;-1:-1:-1;;;271:40:23;;;;;;;;;5942:14:63;;5935:22;5917:41;;5905:2;5890:18;271:40:23;5777:187:63;1461:283:0;;;;;;;;;;-1:-1:-1;1461:283:0;;;;;:::i;:::-;;:::i;547:30:23:-;;;;;;;;;;-1:-1:-1;547:30:23;;;;-1:-1:-1;;;547:30:23;;;;;;507:34;;;;;;;;;;-1:-1:-1;507:34:23;;;;-1:-1:-1;;;507:34:23;;;;;;4975:142:0;;;;;;;;;;-1:-1:-1;4975:142:0;;;;;:::i;:::-;;:::i;:::-;;814:97:23;;;;;;;;;;-1:-1:-1;814:97:23;;;;;:::i;:::-;876:22;:28;;;;;-1:-1:-1;;;876:28:23;-1:-1:-1;;;;876:28:23;;;;;;;;;814:97;3304:286;;;;;;;;;;;;;:::i;:::-;;;12089:25:63;;;12077:2;12062:18;3304:286:23;11943:177:63;459:42:23;;;;;;;;;;-1:-1:-1;459:42:23;;;;-1:-1:-1;;;459:42:23;;;;;;394:23;;;;;;;;;;-1:-1:-1;394:23:23;;;;-1:-1:-1;;;394:23:23;;;;;;357:31;;;;;;;;;;-1:-1:-1;357:31:23;;;;-1:-1:-1;;;357:31:23;;;;;;1375:51:0;;;;;;;;;;;;1421:5;1375:51;;584:111:23;;;;;;;;;;-1:-1:-1;584:111:23;;;;;:::i;:::-;653:29;:35;;;;;-1:-1:-1;;;653:35:23;-1:-1:-1;;;;653:35:23;;;;;;;;;584:111;1407:89;;;;;;;;;;-1:-1:-1;1407:89:23;;;;;:::i;:::-;1465:18;:24;;;;;-1:-1:-1;;;1465:24:23;-1:-1:-1;;;;1465:24:23;;;;;;;;;1407:89;1012;;;;;;;;;;-1:-1:-1;1012:89:23;;;;;:::i;:::-;1070:18;:24;;;;;-1:-1:-1;;;1070:24:23;-1:-1:-1;;;;1070:24:23;;;;;;;;;1012:89;700:109;;;;;;;;;;-1:-1:-1;700:109:23;;;;;:::i;:::-;768:28;:34;;;;;-1:-1:-1;;;768:34:23;-1:-1:-1;;;;768:34:23;;;;;;;;;700:109;1106:113;;;;;;;;;;-1:-1:-1;1106:113:23;;;;;:::i;:::-;1176:30;:36;;;;;-1:-1:-1;;;1176:36:23;-1:-1:-1;;;;1176:36:23;;;;;;;;;1106:113;1224:75;;;;;;;;;;-1:-1:-1;1224:75:23;;;;;:::i;:::-;1275:11;:17;;;;;-1:-1:-1;;;1275:17:23;-1:-1:-1;;;;1275:17:23;;;;;;;;;1224:75;1831:101:47;;;;;;;;;;;;;:::i;6140:309:0:-;;;;;;;;;;-1:-1:-1;6140:309:0;;;;;:::i;:::-;;:::i;3551:197::-;;;;;;;;;;-1:-1:-1;3551:197:0;;;;;:::i;:::-;;:::i;829:103::-;;;;;;;;;;-1:-1:-1;916:8:0;;-1:-1:-1;;;;;916:8:0;829:103;;;-1:-1:-1;;;;;5438:32:63;;;5420:51;;5408:2;5393:18;829:103:0;5274:203:63;423:30:23;;;;;;;;;;-1:-1:-1;423:30:23;;;;-1:-1:-1;;;423:30:23;;;;;;224:41;;;;;;;;;;-1:-1:-1;224:41:23;;;;-1:-1:-1;;;224:41:23;;;;;;1201:85:47;;;;;;;;;;-1:-1:-1;1247:7:47;1273:6;-1:-1:-1;;;;;1273:6:47;1201:85;;222:148:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;3675:605:23:-;;;;;;;;;;;;;:::i;:::-;;;;;;11729:13:63;;11711:32;;11799:4;11787:17;;;11781:24;11759:20;;;11752:54;11862:4;11850:17;;;11844:24;11822:20;;;11815:54;11925:4;11913:17;;;11907:24;11885:20;;;11878:54;;;;11698:3;11683:19;;11496:442;1003:54:0;;;;;;;;;;;;1052:5;1003:54;;916:91:23;;;;;;;;;;-1:-1:-1;916:91:23;;;;;:::i;:::-;975:19;:25;;;;;-1:-1:-1;;;975:25:23;-1:-1:-1;;;;975:25:23;;;;;;;;;916:91;1198:60:0;;;;;;;;;;;;1252:6;1198:60;;317:34:23;;;;;;;;;;-1:-1:-1;317:34:23;;;;-1:-1:-1;;;317:34:23;;;;;;4656:91;;;;;;;;;;-1:-1:-1;4656:91:23;;;;;:::i;:::-;4715:20;:25;;-1:-1:-1;;4715:25:23;;;;;;;;;;4656:91;4234:118:0;;;;;;;;;;-1:-1:-1;4328:17:0;;-1:-1:-1;;;;;4328:17:0;4234:118;;1381:181:24;;;:::i;1305:97:23:-;;;;;;;;;;-1:-1:-1;1305:97:23;;;;;:::i;:::-;1367:22;:28;;;;;-1:-1:-1;;;1367:28:23;-1:-1:-1;;;;1367:28:23;;;;;;;;;1305:97;4326:324;;;;;;;;;;-1:-1:-1;4326:324:23;;;;;:::i;:::-;4465:178;;;;;;;;;;;;;;;;;;;;;;;4609:24;;4465:178;;;;;4609:6;4456:187;;;;;;;;4326:324;3997:231:0;;;;;;;;;;-1:-1:-1;3997:231:0;;;;;:::i;:::-;;:::i;1264:105::-;;;;;;;;;;;;;:::i;2081:198:47:-;;;;;;;;;;-1:-1:-1;2081:198:47;;;;;:::i;:::-;;:::i;1133:59:0:-;;;;;;;;;;;;1186:6;1133:59;;1568:180:24;;;;;;;;;;-1:-1:-1;1568:180:24;;;;;:::i;:::-;;:::i;5154:533:0:-;5379:12;5393:4;5409:21;:19;:21::i;:::-;5440:30;5457:12;5440:16;:30::i;:::-;5610:70;5626:12;5640:9;;5651:12;;5665:14;5610:15;:70::i;:::-;5603:77;;;;5154:533;;;;;;;;;:::o;1461:283::-;1563:4;-1:-1:-1;;;;;;1586:43:0;;-1:-1:-1;;;1586:43:0;;:99;;-1:-1:-1;;;;;;;1645:40:0;;-1:-1:-1;;;1645:40:0;1586:99;:151;;;-1:-1:-1;;;;;;;;;;937:40:58;;;1701:36:0;1579:158;1461:283;-1:-1:-1;;1461:283:0:o;4975:142::-;1094:13:47;:11;:13::i;:::-;5077:8:0::1;::::0;:33:::1;::::0;-1:-1:-1;;;5077:33:0;;-1:-1:-1;;;;;5690:32:63;;;5077:33:0::1;::::0;::::1;5672:51:63::0;5739:18;;;5732:34;;;5077:8:0;;::::1;::::0;:17:::1;::::0;5645:18:63;;5077:33:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;4975:142:::0;;:::o;3304:286:23:-;3385:8;;3350:7;;-1:-1:-1;;;;;3385:8:23;3369:69;;;;-1:-1:-1;;;3369:69:23;;8029:2:63;3369:69:23;;;8011:21:63;8068:2;8048:18;;;8041:30;-1:-1:-1;;;8087:18:63;;;8080:55;8152:18;;3369:69:23;;;;;;;;;3466:8;;:33;;-1:-1:-1;;;3466:33:23;;3493:4;3466:33;;;5420:51:63;3448:15:23;;-1:-1:-1;;;;;3466:8:23;;:18;;5393::63;;3466:33:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3509:8;;:50;;-1:-1:-1;;;3509:50:23;;3543:4;3509:50;;;5672:51:63;5739:18;;;5732:34;;;3448:51:23;;-1:-1:-1;;;;;;3509:8:23;;:17;;5645:18:63;;3509:50:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3576:7:23;;3304:286;-1:-1:-1;;;;3304:286:23:o;1831:101:47:-;1094:13;:11;:13::i;:::-;1895:30:::1;1922:1;1895:18;:30::i;:::-;1831:101::o:0;6140:309:0:-;6347:21;:19;:21::i;:::-;6378:64;6395:7;;6404;6413:17;6432:9;6378:16;:64::i;:::-;6140:309;;;;;:::o;3551:197::-;1094:13:47;:11;:13::i;:::-;3622:59:0::1;-1:-1:-1::0;;;;;3622:30:0;::::1;-1:-1:-1::0;;;3622:30:0::1;:59::i;:::-;3614:103;;;::::0;-1:-1:-1;;;3614:103:0;;10562:2:63;3614:103:0::1;::::0;::::1;10544:21:63::0;10601:2;10581:18;;;10574:30;10640:33;10620:18;;;10613:61;10691:18;;3614:103:0::1;10360:355:63::0;3614:103:0::1;3727:8;:14:::0;;-1:-1:-1;;;;;;3727:14:0::1;-1:-1:-1::0;;;;;3727:14:0;;;::::1;::::0;;;::::1;::::0;;3551:197::o;222:148:24:-;290:13;314:49;;;;;;;;;;;;;;;;;;;222:148;:::o;3675:605:23:-;3744:34;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3744:34:23;3795:18;;-1:-1:-1;;;3795:18:23;;;;3791:234;;;3829:11;;3912:103;3929:6;3927:1;:8;3912:103;;;3977:6;:23;3971:29;;:3;:29;:::i;:::-;3964:36;-1:-1:-1;3937:6:23;3940:3;3937:6;;:::i;:::-;;;3912:103;;;;3815:210;3791:234;4038:22;;-1:-1:-1;;;4038:22:23;;;;4034:217;;;4083:157;;;;;;;;4111:6;:23;;;4137:1;4111:27;;;;:::i;:::-;4083:157;;4140:29;;4083:157;;;;4171:30;;4083:157;;;;4215:24;;4083:157;;;;;4076:164;3675:605;-1:-1:-1;3675:605:23:o;4034:217::-;-1:-1:-1;4260:13:23;;;;;;;;4267:6;4260:13;;;;;;;;;;;;;;;;;;;;;;;;;3675:605::o;1381:181:24:-;1441:8;;-1:-1:-1;;;;;1441:8:24;1425:69;;;;-1:-1:-1;;;1425:69:24;;8029:2:63;1425:69:24;;;8011:21:63;8068:2;8048:18;;;8041:30;-1:-1:-1;;;8087:18:63;;;8080:55;8152:18;;1425:69:24;7827:349:63;1425:69:24;1504:8;;:51;;-1:-1:-1;;;1504:51:24;;1549:4;1504:51;;;5420::63;-1:-1:-1;;;;;1504:8:24;;;;:19;;1530:9;;5393:18:63;;1504:51:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3997:231:0;1094:13:47;:11;:13::i;:::-;4088:57:0::1;-1:-1:-1::0;;;;;4088:27:0;::::1;-1:-1:-1::0;;;4088:27:0::1;:57::i;:::-;4080:102;;;::::0;-1:-1:-1;;;4080:102:0;;8736:2:63;4080:102:0::1;::::0;::::1;8718:21:63::0;;;8755:18;;;8748:30;8814:34;8794:18;;;8787:62;8866:18;;4080:102:0::1;8534:356:63::0;4080:102:0::1;4192:17;:29:::0;;-1:-1:-1;;;;;;4192:29:0::1;-1:-1:-1::0;;;;;4192:29:0;;;::::1;::::0;;;::::1;::::0;;3997:231::o;1264:105::-;1318:51;1052:5;1186:6;1318:51;:::i;:::-;1264:105;:::o;2081:198:47:-;1094:13;:11;:13::i;:::-;-1:-1:-1;;;;;2169:22:47;::::1;2161:73;;;::::0;-1:-1:-1;;;2161:73:47;;7265:2:63;2161:73:47::1;::::0;::::1;7247:21:63::0;7304:2;7284:18;;;7277:30;7343:34;7323:18;;;7316:62;-1:-1:-1;;;7394:18:63;;;7387:36;7440:19;;2161:73:47::1;7063:402:63::0;2161:73:47::1;2244:28;2263:8;2244:18;:28::i;:::-;2081:198:::0;:::o;1568:180:24:-;1652:8;;:33;;-1:-1:-1;;;1652:33:24;;1679:4;1652:33;;;5420:51:63;1635:14:24;;-1:-1:-1;;;;;1652:8:24;;:18;;5393::63;;1652:33:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1635:50;;1695:46;1721:6;1729:11;1695:25;:46::i;:::-;1625:123;1568:180;:::o;1781:362:0:-;1879:41;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1879:41:0;1944:192;;;;;;;;1052:5;1186:6;1318:51;;;;:::i;:::-;1944:192;;;;1186:6;1944:192;;;;1252:6;1944:192;;;;1421:5;1944:192;;;1937:199;;1781:362;:::o;2621:140::-;916:8;;-1:-1:-1;;;;;916:8:0;2692:10;:27;2684:70;;;;-1:-1:-1;;;2684:70:0;;10922:2:63;2684:70:0;;;10904:21:63;10961:2;10941:18;;;10934:30;11000:32;10980:18;;;10973:60;11050:18;;2684:70:0;10720:354:63;2332:283:0;2484:22;;;;:12;:22;:::i;:::-;:32;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2459:57:0;:21;4328:17;;-1:-1:-1;;;;;4328:17:0;;4234:118;2459:21;-1:-1:-1;;;;;2459:57:0;;2451:94;;;;-1:-1:-1;;;2451:94:0;;8383:2:63;2451:94:0;;;8365:21:63;8422:2;8402:18;;;8395:30;8461:26;8441:18;;;8434:54;8505:18;;2451:94:0;8181:348:63;2451:94:0;2555:53;2595:12;2555:39;:53::i;1899:889:23:-;2224:11;;2125:12;;2139:4;;-1:-1:-1;;;2224:11:23;;;;2220:117;;;2251:9;2278:49;2309:3;;;;:::i;:::-;;;;2278:49;;2220:117;2356:22;;-1:-1:-1;;;2356:22:23;;;;2355:23;2347:48;;;;-1:-1:-1;;;2347:48:23;;9097:2:63;2347:48:23;;;9079:21:63;9136:2;9116:18;;;9109:30;-1:-1:-1;;;9155:18:63;;;9148:42;9207:18;;2347:48:23;8895:336:63;2347:48:23;2410:28;;-1:-1:-1;;;2410:28:23;;;;2406:79;;;2454:20;:18;:20::i;:::-;;2406:79;2498:18;;-1:-1:-1;;;2498:18:23;;;;2494:92;;;2532:43;;-1:-1:-1;;;2532:43:23;;;;;;;:::i;2494:92::-;2599:30;;-1:-1:-1;;;2599:30:23;;;;:55;;;;-1:-1:-1;2633:16:23;2648:1;2633:12;:16;:::i;:::-;:21;2599:55;2595:144;;;2670:58;;-1:-1:-1;;;2670:58:23;;11281:2:63;2670:58:23;;;11263:21:63;11320:2;11300:18;;;11293:30;11359:34;11339:18;;;11332:62;-1:-1:-1;;;11410:18:63;;;11403:46;11466:19;;2670:58:23;11079:412:63;2595:144:23;-1:-1:-1;;2760:20:23;;2748:33;;;;;;;;;2760:20;2748:33;;;2760:20;;1899:889;;;;;;;;;:::o;1359:130:47:-;1247:7;1273:6;-1:-1:-1;;;;;1273:6:47;719:10:55;1422:23:47;1414:68;;;;-1:-1:-1;;;1414:68:47;;10201:2:63;1414:68:47;;;10183:21:63;;;10220:18;;;10213:30;10279:34;10259:18;;;10252:62;10331:18;;1414:68:47;9999:356:63;2433:187:47;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:47;;;-1:-1:-1;;;;;;2541:17:47;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;2794:454:23:-;3064:29;;-1:-1:-1;;;3064:29:23;;;;3060:80;;;3109:20;:18;:20::i;:::-;;3060:80;3153:19;;-1:-1:-1;;;3153:19:23;;;;3149:93;;;3188:43;;-1:-1:-1;;;3188:43:23;;;;;;;:::i;1333:274:59:-;1420:4;1527:23;1542:7;1527:14;:23::i;:::-;:73;;;;;1554:46;1579:7;1588:11;1554:24;:46::i;:::-;1520:80;1333:274;-1:-1:-1;;;1333:274:59:o;2158:540:38:-;2260:12;;2294:20;:12;;:20;:::i;:::-;:23;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2294:34:38;-1:-1:-1;;;2429:22:38;;;;:12;:22;:::i;:::-;:32;;;;;;;;;:::i;:::-;2342:133;;-1:-1:-1;;;;;5438:32:63;;;2342:133:38;;;5420:51:63;5393:18;;2342:133:38;;;-1:-1:-1;;2342:133:38;;;;;;;;;;;;;;-1:-1:-1;;;;;2342:133:38;-1:-1:-1;;;;;;2342:133:38;;;;;;;;;;2294:191;;;;2342:133;2294:191;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2259:226;;;;2503:7;2495:48;;;;-1:-1:-1;;;2495:48:38;;7672:2:63;2495:48:38;;;7654:21:63;7711:2;7691:18;;;7684:30;7750;7730:18;;;7723:58;7798:18;;2495:48:38;7470:352:63;2495:48:38;2561:3;:10;2575:2;2561:16;2553:61;;;;-1:-1:-1;;;2553:61:38;;9438:2:63;2553:61:38;;;9420:21:63;;;9457:18;;;9450:30;9516:34;9496:18;;;9489:62;9568:18;;2553:61:38;9236:356:63;2553:61:38;2643:3;2632:23;;;;;;;;;;;;:::i;:::-;2624:67;;;;-1:-1:-1;;;2624:67:38;;6905:2:63;2624:67:38;;;6887:21:63;6944:2;6924:18;;;6917:30;6983:33;6963:18;;;6956:61;7034:18;;2624:67:38;6703:355:63;2624:67:38;2249:449;;2158:540;:::o;704:411:59:-;768:4;975:60;1000:7;-1:-1:-1;;;975:24:59;:60::i;:::-;:133;;;;-1:-1:-1;1052:56:59;1077:7;-1:-1:-1;;;;;;1052:24:59;:56::i;:::-;1051:57;956:152;704:411;-1:-1:-1;;704:411:59:o;4223:638::-;4385:71;;;-1:-1:-1;;;;;;6131:33:63;;4385:71:59;;;;6113:52:63;;;;4385:71:59;;;;;;;;;;6086:18:63;;;;4385:71:59;;;;;;;;;-1:-1:-1;;;;;4385:71:59;-1:-1:-1;;;4385:71:59;;;4664:20;;4316:4;;4385:71;4316:4;;;;;;4385:71;4316:4;;4664:20;4629:7;4622:5;4611:86;4600:97;;4724:16;4710:30;;4774:4;4768:11;4753:26;;4806:7;:29;;;;;4831:4;4817:10;:18;;4806:29;:48;;;;;4853:1;4839:11;:15;4806:48;4799:55;4223:638;-1:-1:-1;;;;;;;4223:638:59:o;14:347:63:-;65:8;75:6;129:3;122:4;114:6;110:17;106:27;96:55;;147:1;144;137:12;96:55;-1:-1:-1;170:20:63;;213:18;202:30;;199:50;;;245:1;242;235:12;199:50;282:4;274:6;270:17;258:29;;334:3;327:4;318:6;310;306:19;302:30;299:39;296:59;;;351:1;348;341:12;296:59;14:347;;;;;:::o;366:247::-;425:6;478:2;466:9;457:7;453:23;449:32;446:52;;;494:1;491;484:12;446:52;533:9;520:23;552:31;577:5;552:31;:::i;878:241::-;934:6;987:2;975:9;966:7;962:23;958:32;955:52;;;1003:1;1000;993:12;955:52;1042:9;1029:23;1061:28;1083:5;1061:28;:::i;1124:245::-;1191:6;1244:2;1232:9;1223:7;1219:23;1215:32;1212:52;;;1260:1;1257;1250:12;1212:52;1292:9;1286:16;1311:28;1333:5;1311:28;:::i;1374:286::-;1432:6;1485:2;1473:9;1464:7;1460:23;1456:32;1453:52;;;1501:1;1498;1491:12;1453:52;1527:23;;-1:-1:-1;;;;;;1579:32:63;;1569:43;;1559:71;;1626:1;1623;1616:12;1665:895;1788:6;1796;1804;1812;1820;1873:3;1861:9;1852:7;1848:23;1844:33;1841:53;;;1890:1;1887;1880:12;1841:53;1930:9;1917:23;1959:18;2000:2;1992:6;1989:14;1986:34;;;2016:1;2013;2006:12;1986:34;2055:58;2105:7;2096:6;2085:9;2081:22;2055:58;:::i;:::-;2132:8;;-1:-1:-1;2029:84:63;-1:-1:-1;2217:2:63;2202:18;;2189:32;;-1:-1:-1;2230:28:63;2189:32;2230:28;:::i;:::-;2277:5;;-1:-1:-1;2329:2:63;2314:18;;2301:32;;-1:-1:-1;2386:2:63;2371:18;;2358:32;;2402:16;;;2399:36;;;2431:1;2428;2421:12;2399:36;-1:-1:-1;2454:24:63;;2512:3;2494:16;;;2490:26;2487:46;;;2529:1;2526;2519:12;2487:46;2552:2;2542:12;;;1665:895;;;;;;;;:::o;2835:1055::-;2975:6;2983;2991;2999;3007;3015;3068:3;3056:9;3047:7;3043:23;3039:33;3036:53;;;3085:1;3082;3075:12;3036:53;3125:9;3112:23;3154:18;3195:2;3187:6;3184:14;3181:34;;;3211:1;3208;3201:12;3181:34;3234:22;;;;3290:2;3272:16;;;3268:25;3265:45;;;3306:1;3303;3296:12;3265:45;3329:2;;-1:-1:-1;3384:2:63;3369:18;;3356:32;;3400:16;;;3397:36;;;3429:1;3426;3419:12;3397:36;3468:60;3520:7;3509:8;3498:9;3494:24;3468:60;:::i;:::-;3547:8;;-1:-1:-1;3442:86:63;-1:-1:-1;3635:2:63;3620:18;;3607:32;;-1:-1:-1;3651:16:63;;;3648:36;;;3680:1;3677;3670:12;3648:36;;3719:60;3771:7;3760:8;3749:9;3745:24;3719:60;:::i;:::-;2835:1055;;;;-1:-1:-1;2835:1055:63;;;;;3880:2;3865:18;;;3852:32;;2835:1055;-1:-1:-1;;;;2835:1055:63:o;3895:184::-;3965:6;4018:2;4006:9;3997:7;3993:23;3989:32;3986:52;;;4034:1;4031;4024:12;3986:52;-1:-1:-1;4057:16:63;;3895:184;-1:-1:-1;3895:184:63:o;4084:323::-;4160:6;4168;4221:2;4209:9;4200:7;4196:23;4192:32;4189:52;;;4237:1;4234;4227:12;4189:52;4273:9;4260:23;4250:33;;4333:2;4322:9;4318:18;4305:32;4346:31;4371:5;4346:31;:::i;:::-;4396:5;4386:15;;;4084:323;;;;;:::o;4412:316::-;4489:6;4497;4505;4558:2;4546:9;4537:7;4533:23;4529:32;4526:52;;;4574:1;4571;4564:12;4526:52;-1:-1:-1;;4597:23:63;;;4667:2;4652:18;;4639:32;;-1:-1:-1;4718:2:63;4703:18;;;4690:32;;4412:316;-1:-1:-1;4412:316:63:o;4733:257::-;4774:3;4812:5;4806:12;4839:6;4834:3;4827:19;4855:63;4911:6;4904:4;4899:3;4895:14;4888:4;4881:5;4877:16;4855:63;:::i;:::-;4972:2;4951:15;-1:-1:-1;;4947:29:63;4938:39;;;;4979:4;4934:50;;4733:257;-1:-1:-1;;4733:257:63:o;4995:274::-;5124:3;5162:6;5156:13;5178:53;5224:6;5219:3;5212:4;5204:6;5200:17;5178:53;:::i;:::-;5247:16;;;;;4995:274;-1:-1:-1;;4995:274:63:o;6176:298::-;6345:2;6334:9;6327:21;6308:4;6365:44;6405:2;6394:9;6390:18;6382:6;6365:44;:::i;:::-;6357:52;;6459:6;6452:14;6445:22;6440:2;6429:9;6425:18;6418:50;6176:298;;;;;:::o;6479:219::-;6628:2;6617:9;6610:21;6591:4;6648:44;6688:2;6677:9;6673:18;6665:6;6648:44;:::i;9597:397::-;9799:2;9781:21;;;9838:2;9818:18;;;9811:30;9877:34;9872:2;9857:18;;9850:62;-1:-1:-1;;;9943:2:63;9928:18;;9921:31;9984:3;9969:19;;9597:397::o;12125:332::-;12225:4;12283:11;12270:25;12377:3;12373:8;12362;12346:14;12342:29;12338:44;12318:18;12314:69;12304:97;;12397:1;12394;12387:12;12462:327;12557:4;12615:11;12602:25;12709:3;12705:8;12694;12678:14;12674:29;12670:44;12650:18;12646:69;12636:97;;12729:1;12726;12719:12;12794:265;12833:3;12861:9;;;12886:10;;-1:-1:-1;;;;;12905:27:63;;;12898:35;;12882:52;12879:78;;;12937:18;;:::i;:::-;-1:-1:-1;;;12984:19:63;;;12977:27;;12969:36;;12966:62;;;13008:18;;:::i;:::-;-1:-1:-1;;13044:9:63;;12794:265::o;13064:128::-;13104:3;13135:1;13131:6;13128:1;13125:13;13122:39;;;13141:18;;:::i;:::-;-1:-1:-1;13177:9:63;;13064:128::o;13197:168::-;13237:7;13303:1;13299;13295:6;13291:14;13288:1;13285:21;13280:1;13273:9;13266:17;13262:45;13259:71;;;13310:18;;:::i;:::-;-1:-1:-1;13350:9:63;;13197:168::o;13370:258::-;13442:1;13452:113;13466:6;13463:1;13460:13;13452:113;;;13542:11;;;13536:18;13523:11;;;13516:39;13488:2;13481:10;13452:113;;;13583:6;13580:1;13577:13;13574:48;;;13618:1;13609:6;13604:3;13600:16;13593:27;13574:48;;13370:258;;;:::o;13633:135::-;13672:3;-1:-1:-1;;13693:17:63;;13690:43;;;13713:18;;:::i;:::-;-1:-1:-1;13760:1:63;13749:13;;13633:135::o;13773:209::-;13805:1;13831;13821:132;;13875:10;13870:3;13866:20;13863:1;13856:31;13910:4;13907:1;13900:15;13938:4;13935:1;13928:15;13821:132;-1:-1:-1;13967:9:63;;13773:209::o;13987:127::-;14048:10;14043:3;14039:20;14036:1;14029:31;14079:4;14076:1;14069:15;14103:4;14100:1;14093:15;14119:131;-1:-1:-1;;;;;14194:31:63;;14184:42;;14174:70;;14240:1;14237;14230:12;14255:118;14341:5;14334:13;14327:21;14320:5;14317:32;14307:60;;14363:1;14360;14353:12",
    "source": "pragma solidity ^0.8.0;\npragma abicoder v2;\n\n// SPDX-License-Identifier: GPL-3.0-only\n\nimport \"./TestPaymasterEverythingAccepted.sol\";\n\ncontract TestPaymasterConfigurableMisbehavior is TestPaymasterEverythingAccepted {\n\n    bool public withdrawDuringPostRelayedCall;\n    bool public withdrawDuringPreRelayedCall;\n    bool public returnInvalidErrorCode;\n    bool public revertPostRelayCall;\n    bool public outOfGasPre;\n    bool public revertPreRelayCall;\n    bool public revertPreRelayCallOnEvenBlocks;\n    bool public greedyAcceptanceBudget;\n    bool public expensiveGasLimits;\n\n    function setWithdrawDuringPostRelayedCall(bool val) public {\n        withdrawDuringPostRelayedCall = val;\n    }\n    function setWithdrawDuringPreRelayedCall(bool val) public {\n        withdrawDuringPreRelayedCall = val;\n    }\n    function setReturnInvalidErrorCode(bool val) public {\n        returnInvalidErrorCode = val;\n    }\n    function setRevertPostRelayCall(bool val) public {\n        revertPostRelayCall = val;\n    }\n    function setRevertPreRelayCall(bool val) public {\n        revertPreRelayCall = val;\n    }\n    function setRevertPreRelayCallOnEvenBlocks(bool val) public {\n        revertPreRelayCallOnEvenBlocks = val;\n    }\n    function setOutOfGasPre(bool val) public {\n        outOfGasPre = val;\n    }\n\n    function setGreedyAcceptanceBudget(bool val) public {\n        greedyAcceptanceBudget = val;\n    }\n    function setExpensiveGasLimits(bool val) public {\n        expensiveGasLimits = val;\n    }\n\n    // solhint-disable-next-line no-empty-blocks\n    function _verifyApprovalData(bytes calldata approvalData) internal virtual override view {}\n\n    // solhint-disable-next-line no-empty-blocks\n    function _verifyPaymasterData(GsnTypes.RelayRequest calldata relayRequest) internal virtual override view {}\n\n    // solhint-disable reason-string\n    // contains comments that are checked in tests\n    function _preRelayedCall(\n        GsnTypes.RelayRequest calldata relayRequest,\n        bytes calldata signature,\n        bytes calldata approvalData,\n        uint256 maxPossibleGas\n    )\n    internal\n    override\n    returns (bytes memory, bool) {\n        (relayRequest, signature, approvalData, maxPossibleGas);\n        if (outOfGasPre) {\n            uint256 i = 0;\n            while (true) {\n                i++;\n            }\n        }\n\n        require(!returnInvalidErrorCode, \"invalid code\");\n\n        if (withdrawDuringPreRelayedCall) {\n            withdrawAllBalance();\n        }\n        if (revertPreRelayCall) {\n            revert(\"You asked me to revert, remember?\");\n        }\n        if (revertPreRelayCallOnEvenBlocks && block.number % 2 == 0) {\n            revert(\"You asked me to revert on even blocks, remember?\");\n        }\n        return (\"\", trustRecipientRevert);\n    }\n\n    function _postRelayedCall(\n        bytes calldata context,\n        bool success,\n        uint256 gasUseWithoutPost,\n        GsnTypes.RelayData calldata relayData\n    )\n    internal\n    override\n    {\n        (context, success, gasUseWithoutPost, relayData);\n        if (withdrawDuringPostRelayedCall) {\n            withdrawAllBalance();\n        }\n        if (revertPostRelayCall) {\n            revert(\"You asked me to revert, remember?\");\n        }\n    }\n\n    /// leaving withdrawal public and unprotected\n    function withdrawAllBalance() public returns (uint256) {\n        require(address(relayHub) != address(0), \"relay hub address not set\");\n        uint256 balance = relayHub.balanceOf(address(this));\n        relayHub.withdraw(payable(address(this)), balance);\n        return balance;\n    }\n\n    IPaymaster.GasAndDataLimits private limits = super.getGasAndDataLimits();\n\n    function getGasAndDataLimits()\n    public override view\n    returns (IPaymaster.GasAndDataLimits memory) {\n\n        if (expensiveGasLimits) {\n            uint256 sum;\n            //memory access is 700gas, so we waste ~50000\n            for ( int i=0; i<100000; i+=700 ) {\n                sum  = sum + limits.acceptanceBudget;\n            }\n        }\n        if (greedyAcceptanceBudget) {\n            return IPaymaster.GasAndDataLimits(limits.acceptanceBudget * 9, limits.preRelayedCallGasLimit, limits.postRelayedCallGasLimit,\n            limits.calldataSizeLimit);\n        }\n        return limits;\n    }\n\n    bool private trustRecipientRevert;\n\n    function setGasLimits(uint256 acceptanceBudget, uint256 preRelayedCallGasLimit, uint256 postRelayedCallGasLimit) public {\n        limits = IPaymaster.GasAndDataLimits(\n            acceptanceBudget,\n            preRelayedCallGasLimit,\n            postRelayedCallGasLimit,\n            limits.calldataSizeLimit\n        );\n    }\n\n    function setTrustRecipientRevert(bool on) public {\n        trustRecipientRevert = on;\n    }\n\n    // solhint-disable-next-line no-empty-blocks\n    receive() external override payable {}\n}",
    "sourcePath": "/Users/alexf/gsn2/packages/contracts/solpp/test/TestPaymasterConfigurableMisbehavior.sol",
    "ast": {
        "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/test/TestPaymasterConfigurableMisbehavior.sol",
        "exportedSymbols": {
            "BasePaymaster": [
                397
            ],
            "Context": [
                11508
            ],
            "ERC165": [
                12146
            ],
            "ERC165Checker": [
                12340
            ],
            "GsnEip712Library": [
                8464
            ],
            "GsnTypes": [
                8492
            ],
            "GsnUtils": [
                8572
            ],
            "IERC165": [
                12352
            ],
            "IERC20": [
                10849
            ],
            "IERC2771Recipient": [
                5374
            ],
            "IForwarder": [
                5129
            ],
            "IPaymaster": [
                5447
            ],
            "IRelayHub": [
                5896
            ],
            "IStakeManager": [
                6284
            ],
            "MinLibBytes": [
                8687
            ],
            "Ownable": [
                10182
            ],
            "TestPaymasterConfigurableMisbehavior": [
                6866
            ],
            "TestPaymasterEverythingAccepted": [
                7006
            ]
        },
        "id": 6867,
        "license": "GPL-3.0-only",
        "nodeType": "SourceUnit",
        "nodes": [
            {
                "id": 6489,
                "literals": [
                    "solidity",
                    "^",
                    "0.8",
                    ".0"
                ],
                "nodeType": "PragmaDirective",
                "src": "0:23:23"
            },
            {
                "id": 6490,
                "literals": [
                    "abicoder",
                    "v2"
                ],
                "nodeType": "PragmaDirective",
                "src": "24:19:23"
            },
            {
                "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/test/TestPaymasterEverythingAccepted.sol",
                "file": "./TestPaymasterEverythingAccepted.sol",
                "id": 6491,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 6867,
                "sourceUnit": 7007,
                "src": "87:47:23",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "abstract": false,
                "baseContracts": [
                    {
                        "baseName": {
                            "id": 6492,
                            "name": "TestPaymasterEverythingAccepted",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 7006,
                            "src": "185:31:23"
                        },
                        "id": 6493,
                        "nodeType": "InheritanceSpecifier",
                        "src": "185:31:23"
                    }
                ],
                "contractDependencies": [],
                "contractKind": "contract",
                "fullyImplemented": true,
                "id": 6866,
                "linearizedBaseContracts": [
                    6866,
                    7006,
                    397,
                    12146,
                    10182,
                    11508,
                    5447,
                    12352
                ],
                "name": "TestPaymasterConfigurableMisbehavior",
                "nameLocation": "145:36:23",
                "nodeType": "ContractDefinition",
                "nodes": [
                    {
                        "constant": false,
                        "functionSelector": "817f12dd",
                        "id": 6495,
                        "mutability": "mutable",
                        "name": "withdrawDuringPostRelayedCall",
                        "nameLocation": "236:29:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 6866,
                        "src": "224:41:23",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                        },
                        "typeName": {
                            "id": 6494,
                            "name": "bool",
                            "nodeType": "ElementaryTypeName",
                            "src": "224:4:23",
                            "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                            }
                        },
                        "visibility": "public"
                    },
                    {
                        "constant": false,
                        "functionSelector": "01053c33",
                        "id": 6497,
                        "mutability": "mutable",
                        "name": "withdrawDuringPreRelayedCall",
                        "nameLocation": "283:28:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 6866,
                        "src": "271:40:23",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                        },
                        "typeName": {
                            "id": 6496,
                            "name": "bool",
                            "nodeType": "ElementaryTypeName",
                            "src": "271:4:23",
                            "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                            }
                        },
                        "visibility": "public"
                    },
                    {
                        "constant": false,
                        "functionSelector": "c510906c",
                        "id": 6499,
                        "mutability": "mutable",
                        "name": "returnInvalidErrorCode",
                        "nameLocation": "329:22:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 6866,
                        "src": "317:34:23",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                        },
                        "typeName": {
                            "id": 6498,
                            "name": "bool",
                            "nodeType": "ElementaryTypeName",
                            "src": "317:4:23",
                            "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                            }
                        },
                        "visibility": "public"
                    },
                    {
                        "constant": false,
                        "functionSelector": "59b8aa2e",
                        "id": 6501,
                        "mutability": "mutable",
                        "name": "revertPostRelayCall",
                        "nameLocation": "369:19:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 6866,
                        "src": "357:31:23",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                        },
                        "typeName": {
                            "id": 6500,
                            "name": "bool",
                            "nodeType": "ElementaryTypeName",
                            "src": "357:4:23",
                            "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                            }
                        },
                        "visibility": "public"
                    },
                    {
                        "constant": false,
                        "functionSelector": "51d88938",
                        "id": 6503,
                        "mutability": "mutable",
                        "name": "outOfGasPre",
                        "nameLocation": "406:11:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 6866,
                        "src": "394:23:23",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                        },
                        "typeName": {
                            "id": 6502,
                            "name": "bool",
                            "nodeType": "ElementaryTypeName",
                            "src": "394:4:23",
                            "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                            }
                        },
                        "visibility": "public"
                    },
                    {
                        "constant": false,
                        "functionSelector": "7d4e494a",
                        "id": 6505,
                        "mutability": "mutable",
                        "name": "revertPreRelayCall",
                        "nameLocation": "435:18:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 6866,
                        "src": "423:30:23",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                        },
                        "typeName": {
                            "id": 6504,
                            "name": "bool",
                            "nodeType": "ElementaryTypeName",
                            "src": "423:4:23",
                            "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                            }
                        },
                        "visibility": "public"
                    },
                    {
                        "constant": false,
                        "functionSelector": "4b9ed5e3",
                        "id": 6507,
                        "mutability": "mutable",
                        "name": "revertPreRelayCallOnEvenBlocks",
                        "nameLocation": "471:30:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 6866,
                        "src": "459:42:23",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                        },
                        "typeName": {
                            "id": 6506,
                            "name": "bool",
                            "nodeType": "ElementaryTypeName",
                            "src": "459:4:23",
                            "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                            }
                        },
                        "visibility": "public"
                    },
                    {
                        "constant": false,
                        "functionSelector": "22455ccf",
                        "id": 6509,
                        "mutability": "mutable",
                        "name": "greedyAcceptanceBudget",
                        "nameLocation": "519:22:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 6866,
                        "src": "507:34:23",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                        },
                        "typeName": {
                            "id": 6508,
                            "name": "bool",
                            "nodeType": "ElementaryTypeName",
                            "src": "507:4:23",
                            "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                            }
                        },
                        "visibility": "public"
                    },
                    {
                        "constant": false,
                        "functionSelector": "1bab7cab",
                        "id": 6511,
                        "mutability": "mutable",
                        "name": "expensiveGasLimits",
                        "nameLocation": "559:18:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 6866,
                        "src": "547:30:23",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                        },
                        "typeName": {
                            "id": 6510,
                            "name": "bool",
                            "nodeType": "ElementaryTypeName",
                            "src": "547:4:23",
                            "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                            }
                        },
                        "visibility": "public"
                    },
                    {
                        "body": {
                            "id": 6520,
                            "nodeType": "Block",
                            "src": "643:52:23",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 6518,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 6516,
                                            "name": "withdrawDuringPostRelayedCall",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6495,
                                            "src": "653:29:23",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 6517,
                                            "name": "val",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6513,
                                            "src": "685:3:23",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "src": "653:35:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 6519,
                                    "nodeType": "ExpressionStatement",
                                    "src": "653:35:23"
                                }
                            ]
                        },
                        "functionSelector": "618df88d",
                        "id": 6521,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "setWithdrawDuringPostRelayedCall",
                        "nameLocation": "593:32:23",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6514,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6513,
                                    "mutability": "mutable",
                                    "name": "val",
                                    "nameLocation": "631:3:23",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6521,
                                    "src": "626:8:23",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 6512,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "626:4:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "625:10:23"
                        },
                        "returnParameters": {
                            "id": 6515,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "643:0:23"
                        },
                        "scope": 6866,
                        "src": "584:111:23",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "body": {
                            "id": 6530,
                            "nodeType": "Block",
                            "src": "758:51:23",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 6528,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 6526,
                                            "name": "withdrawDuringPreRelayedCall",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6497,
                                            "src": "768:28:23",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 6527,
                                            "name": "val",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6523,
                                            "src": "799:3:23",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "src": "768:34:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 6529,
                                    "nodeType": "ExpressionStatement",
                                    "src": "768:34:23"
                                }
                            ]
                        },
                        "functionSelector": "6c9a7b1b",
                        "id": 6531,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "setWithdrawDuringPreRelayedCall",
                        "nameLocation": "709:31:23",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6524,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6523,
                                    "mutability": "mutable",
                                    "name": "val",
                                    "nameLocation": "746:3:23",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6531,
                                    "src": "741:8:23",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 6522,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "741:4:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "740:10:23"
                        },
                        "returnParameters": {
                            "id": 6525,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "758:0:23"
                        },
                        "scope": 6866,
                        "src": "700:109:23",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "body": {
                            "id": 6540,
                            "nodeType": "Block",
                            "src": "866:45:23",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 6538,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 6536,
                                            "name": "returnInvalidErrorCode",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6499,
                                            "src": "876:22:23",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 6537,
                                            "name": "val",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6533,
                                            "src": "901:3:23",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "src": "876:28:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 6539,
                                    "nodeType": "ExpressionStatement",
                                    "src": "876:28:23"
                                }
                            ]
                        },
                        "functionSelector": "38b58641",
                        "id": 6541,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "setReturnInvalidErrorCode",
                        "nameLocation": "823:25:23",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6534,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6533,
                                    "mutability": "mutable",
                                    "name": "val",
                                    "nameLocation": "854:3:23",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6541,
                                    "src": "849:8:23",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 6532,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "849:4:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "848:10:23"
                        },
                        "returnParameters": {
                            "id": 6535,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "866:0:23"
                        },
                        "scope": 6866,
                        "src": "814:97:23",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "body": {
                            "id": 6550,
                            "nodeType": "Block",
                            "src": "965:42:23",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 6548,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 6546,
                                            "name": "revertPostRelayCall",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6501,
                                            "src": "975:19:23",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 6547,
                                            "name": "val",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6543,
                                            "src": "997:3:23",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "src": "975:25:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 6549,
                                    "nodeType": "ExpressionStatement",
                                    "src": "975:25:23"
                                }
                            ]
                        },
                        "functionSelector": "ba7ddf1c",
                        "id": 6551,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "setRevertPostRelayCall",
                        "nameLocation": "925:22:23",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6544,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6543,
                                    "mutability": "mutable",
                                    "name": "val",
                                    "nameLocation": "953:3:23",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6551,
                                    "src": "948:8:23",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 6542,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "948:4:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "947:10:23"
                        },
                        "returnParameters": {
                            "id": 6545,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "965:0:23"
                        },
                        "scope": 6866,
                        "src": "916:91:23",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "body": {
                            "id": 6560,
                            "nodeType": "Block",
                            "src": "1060:41:23",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 6558,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 6556,
                                            "name": "revertPreRelayCall",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6505,
                                            "src": "1070:18:23",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 6557,
                                            "name": "val",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6553,
                                            "src": "1091:3:23",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "src": "1070:24:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 6559,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1070:24:23"
                                }
                            ]
                        },
                        "functionSelector": "6a7ef8e0",
                        "id": 6561,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "setRevertPreRelayCall",
                        "nameLocation": "1021:21:23",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6554,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6553,
                                    "mutability": "mutable",
                                    "name": "val",
                                    "nameLocation": "1048:3:23",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6561,
                                    "src": "1043:8:23",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 6552,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1043:4:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1042:10:23"
                        },
                        "returnParameters": {
                            "id": 6555,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1060:0:23"
                        },
                        "scope": 6866,
                        "src": "1012:89:23",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "body": {
                            "id": 6570,
                            "nodeType": "Block",
                            "src": "1166:53:23",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 6568,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 6566,
                                            "name": "revertPreRelayCallOnEvenBlocks",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6507,
                                            "src": "1176:30:23",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 6567,
                                            "name": "val",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6563,
                                            "src": "1209:3:23",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "src": "1176:36:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 6569,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1176:36:23"
                                }
                            ]
                        },
                        "functionSelector": "6ef2b63e",
                        "id": 6571,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "setRevertPreRelayCallOnEvenBlocks",
                        "nameLocation": "1115:33:23",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6564,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6563,
                                    "mutability": "mutable",
                                    "name": "val",
                                    "nameLocation": "1154:3:23",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6571,
                                    "src": "1149:8:23",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 6562,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1149:4:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1148:10:23"
                        },
                        "returnParameters": {
                            "id": 6565,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1166:0:23"
                        },
                        "scope": 6866,
                        "src": "1106:113:23",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "body": {
                            "id": 6580,
                            "nodeType": "Block",
                            "src": "1265:34:23",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 6578,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 6576,
                                            "name": "outOfGasPre",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6503,
                                            "src": "1275:11:23",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 6577,
                                            "name": "val",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6573,
                                            "src": "1289:3:23",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "src": "1275:17:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 6579,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1275:17:23"
                                }
                            ]
                        },
                        "functionSelector": "6f0f6902",
                        "id": 6581,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "setOutOfGasPre",
                        "nameLocation": "1233:14:23",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6574,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6573,
                                    "mutability": "mutable",
                                    "name": "val",
                                    "nameLocation": "1253:3:23",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6581,
                                    "src": "1248:8:23",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 6572,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1248:4:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1247:10:23"
                        },
                        "returnParameters": {
                            "id": 6575,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1265:0:23"
                        },
                        "scope": 6866,
                        "src": "1224:75:23",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "body": {
                            "id": 6590,
                            "nodeType": "Block",
                            "src": "1357:45:23",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 6588,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 6586,
                                            "name": "greedyAcceptanceBudget",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6509,
                                            "src": "1367:22:23",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 6587,
                                            "name": "val",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6583,
                                            "src": "1392:3:23",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "src": "1367:28:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 6589,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1367:28:23"
                                }
                            ]
                        },
                        "functionSelector": "d20bd980",
                        "id": 6591,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "setGreedyAcceptanceBudget",
                        "nameLocation": "1314:25:23",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6584,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6583,
                                    "mutability": "mutable",
                                    "name": "val",
                                    "nameLocation": "1345:3:23",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6591,
                                    "src": "1340:8:23",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 6582,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1340:4:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1339:10:23"
                        },
                        "returnParameters": {
                            "id": 6585,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1357:0:23"
                        },
                        "scope": 6866,
                        "src": "1305:97:23",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "body": {
                            "id": 6600,
                            "nodeType": "Block",
                            "src": "1455:41:23",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 6598,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 6596,
                                            "name": "expensiveGasLimits",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6511,
                                            "src": "1465:18:23",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 6597,
                                            "name": "val",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6593,
                                            "src": "1486:3:23",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "src": "1465:24:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 6599,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1465:24:23"
                                }
                            ]
                        },
                        "functionSelector": "645c9687",
                        "id": 6601,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "setExpensiveGasLimits",
                        "nameLocation": "1416:21:23",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6594,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6593,
                                    "mutability": "mutable",
                                    "name": "val",
                                    "nameLocation": "1443:3:23",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6601,
                                    "src": "1438:8:23",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 6592,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1438:4:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1437:10:23"
                        },
                        "returnParameters": {
                            "id": 6595,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1455:0:23"
                        },
                        "scope": 6866,
                        "src": "1407:89:23",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            187
                        ],
                        "body": {
                            "id": 6607,
                            "nodeType": "Block",
                            "src": "1640:2:23",
                            "statements": []
                        },
                        "id": 6608,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "_verifyApprovalData",
                        "nameLocation": "1560:19:23",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 6605,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "1626:8:23"
                        },
                        "parameters": {
                            "id": 6604,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6603,
                                    "mutability": "mutable",
                                    "name": "approvalData",
                                    "nameLocation": "1595:12:23",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6608,
                                    "src": "1580:27:23",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 6602,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1580:5:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1579:29:23"
                        },
                        "returnParameters": {
                            "id": 6606,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1640:0:23"
                        },
                        "scope": 6866,
                        "src": "1551:91:23",
                        "stateMutability": "view",
                        "virtual": true,
                        "visibility": "internal"
                    },
                    {
                        "baseFunctions": [
                            173
                        ],
                        "body": {
                            "id": 6615,
                            "nodeType": "Block",
                            "src": "1803:2:23",
                            "statements": []
                        },
                        "id": 6616,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "_verifyPaymasterData",
                        "nameLocation": "1706:20:23",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 6613,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "1789:8:23"
                        },
                        "parameters": {
                            "id": 6612,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6611,
                                    "mutability": "mutable",
                                    "name": "relayRequest",
                                    "nameLocation": "1758:12:23",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6616,
                                    "src": "1727:43:23",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                        "typeString": "struct GsnTypes.RelayRequest"
                                    },
                                    "typeName": {
                                        "id": 6610,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 6609,
                                            "name": "GsnTypes.RelayRequest",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 8491,
                                            "src": "1727:21:23"
                                        },
                                        "referencedDeclaration": 8491,
                                        "src": "1727:21:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_storage_ptr",
                                            "typeString": "struct GsnTypes.RelayRequest"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1726:45:23"
                        },
                        "returnParameters": {
                            "id": 6614,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1803:0:23"
                        },
                        "scope": 6866,
                        "src": "1697:108:23",
                        "stateMutability": "view",
                        "virtual": true,
                        "visibility": "internal"
                    },
                    {
                        "baseFunctions": [
                            6931
                        ],
                        "body": {
                            "id": 6689,
                            "nodeType": "Block",
                            "src": "2145:643:23",
                            "statements": [
                                {
                                    "expression": {
                                        "components": [
                                            {
                                                "id": 6633,
                                                "name": "relayRequest",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6619,
                                                "src": "2156:12:23",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                    "typeString": "struct GsnTypes.RelayRequest calldata"
                                                }
                                            },
                                            {
                                                "id": 6634,
                                                "name": "signature",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6621,
                                                "src": "2170:9:23",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            },
                                            {
                                                "id": 6635,
                                                "name": "approvalData",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6623,
                                                "src": "2181:12:23",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            },
                                            {
                                                "id": 6636,
                                                "name": "maxPossibleGas",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6625,
                                                "src": "2195:14:23",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "id": 6637,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "2155:55:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_struct$_RelayRequest_$8491_calldata_ptr_$_t_bytes_calldata_ptr_$_t_bytes_calldata_ptr_$_t_uint256_$",
                                            "typeString": "tuple(struct GsnTypes.RelayRequest calldata,bytes calldata,bytes calldata,uint256)"
                                        }
                                    },
                                    "id": 6638,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2155:55:23"
                                },
                                {
                                    "condition": {
                                        "id": 6639,
                                        "name": "outOfGasPre",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6503,
                                        "src": "2224:11:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 6651,
                                    "nodeType": "IfStatement",
                                    "src": "2220:117:23",
                                    "trueBody": {
                                        "id": 6650,
                                        "nodeType": "Block",
                                        "src": "2237:100:23",
                                        "statements": [
                                            {
                                                "assignments": [
                                                    6641
                                                ],
                                                "declarations": [
                                                    {
                                                        "constant": false,
                                                        "id": 6641,
                                                        "mutability": "mutable",
                                                        "name": "i",
                                                        "nameLocation": "2259:1:23",
                                                        "nodeType": "VariableDeclaration",
                                                        "scope": 6650,
                                                        "src": "2251:9:23",
                                                        "stateVariable": false,
                                                        "storageLocation": "default",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        },
                                                        "typeName": {
                                                            "id": 6640,
                                                            "name": "uint256",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "2251:7:23",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        },
                                                        "visibility": "internal"
                                                    }
                                                ],
                                                "id": 6643,
                                                "initialValue": {
                                                    "hexValue": "30",
                                                    "id": 6642,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "2263:1:23",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_0_by_1",
                                                        "typeString": "int_const 0"
                                                    },
                                                    "value": "0"
                                                },
                                                "nodeType": "VariableDeclarationStatement",
                                                "src": "2251:13:23"
                                            },
                                            {
                                                "body": {
                                                    "id": 6648,
                                                    "nodeType": "Block",
                                                    "src": "2291:36:23",
                                                    "statements": [
                                                        {
                                                            "expression": {
                                                                "id": 6646,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "nodeType": "UnaryOperation",
                                                                "operator": "++",
                                                                "prefix": false,
                                                                "src": "2309:3:23",
                                                                "subExpression": {
                                                                    "id": 6645,
                                                                    "name": "i",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 6641,
                                                                    "src": "2309:1:23",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_uint256",
                                                                        "typeString": "uint256"
                                                                    }
                                                                },
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            },
                                                            "id": 6647,
                                                            "nodeType": "ExpressionStatement",
                                                            "src": "2309:3:23"
                                                        }
                                                    ]
                                                },
                                                "condition": {
                                                    "hexValue": "74727565",
                                                    "id": 6644,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "bool",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "2285:4:23",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    },
                                                    "value": "true"
                                                },
                                                "id": 6649,
                                                "nodeType": "WhileStatement",
                                                "src": "2278:49:23"
                                            }
                                        ]
                                    }
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 6654,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "UnaryOperation",
                                                "operator": "!",
                                                "prefix": true,
                                                "src": "2355:23:23",
                                                "subExpression": {
                                                    "id": 6653,
                                                    "name": "returnInvalidErrorCode",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 6499,
                                                    "src": "2356:22:23",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "696e76616c696420636f6465",
                                                "id": 6655,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "2380:14:23",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_8264af2715f4c1c57bdec9af30ed01e8198809e4e4467a12fd18de911785fd93",
                                                    "typeString": "literal_string \"invalid code\""
                                                },
                                                "value": "invalid code"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_8264af2715f4c1c57bdec9af30ed01e8198809e4e4467a12fd18de911785fd93",
                                                    "typeString": "literal_string \"invalid code\""
                                                }
                                            ],
                                            "id": 6652,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "2347:7:23",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 6656,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2347:48:23",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 6657,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2347:48:23"
                                },
                                {
                                    "condition": {
                                        "id": 6658,
                                        "name": "withdrawDuringPreRelayedCall",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6497,
                                        "src": "2410:28:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 6663,
                                    "nodeType": "IfStatement",
                                    "src": "2406:79:23",
                                    "trueBody": {
                                        "id": 6662,
                                        "nodeType": "Block",
                                        "src": "2440:45:23",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "arguments": [],
                                                    "expression": {
                                                        "argumentTypes": [],
                                                        "id": 6659,
                                                        "name": "withdrawAllBalance",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 6768,
                                                        "src": "2454:18:23",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_uint256_$",
                                                            "typeString": "function () returns (uint256)"
                                                        }
                                                    },
                                                    "id": 6660,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "2454:20:23",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "id": 6661,
                                                "nodeType": "ExpressionStatement",
                                                "src": "2454:20:23"
                                            }
                                        ]
                                    }
                                },
                                {
                                    "condition": {
                                        "id": 6664,
                                        "name": "revertPreRelayCall",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6505,
                                        "src": "2498:18:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 6670,
                                    "nodeType": "IfStatement",
                                    "src": "2494:92:23",
                                    "trueBody": {
                                        "id": 6669,
                                        "nodeType": "Block",
                                        "src": "2518:68:23",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "hexValue": "596f752061736b6564206d6520746f207265766572742c2072656d656d6265723f",
                                                            "id": 6666,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "string",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "2539:35:23",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_stringliteral_951bb8d072d9524fc3cf57cf7fb48f842befafc1060013c7ac7349b0991cb9ff",
                                                                "typeString": "literal_string \"You asked me to revert, remember?\""
                                                            },
                                                            "value": "You asked me to revert, remember?"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_stringliteral_951bb8d072d9524fc3cf57cf7fb48f842befafc1060013c7ac7349b0991cb9ff",
                                                                "typeString": "literal_string \"You asked me to revert, remember?\""
                                                            }
                                                        ],
                                                        "id": 6665,
                                                        "name": "revert",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [
                                                            4294967277,
                                                            4294967277
                                                        ],
                                                        "referencedDeclaration": 4294967277,
                                                        "src": "2532:6:23",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                                            "typeString": "function (string memory) pure"
                                                        }
                                                    },
                                                    "id": 6667,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "2532:43:23",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$__$",
                                                        "typeString": "tuple()"
                                                    }
                                                },
                                                "id": 6668,
                                                "nodeType": "ExpressionStatement",
                                                "src": "2532:43:23"
                                            }
                                        ]
                                    }
                                },
                                {
                                    "condition": {
                                        "commonType": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        },
                                        "id": 6678,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "id": 6671,
                                            "name": "revertPreRelayCallOnEvenBlocks",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6507,
                                            "src": "2599:30:23",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "&&",
                                        "rightExpression": {
                                            "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "id": 6677,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 6675,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "id": 6672,
                                                        "name": "block",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967292,
                                                        "src": "2633:5:23",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_block",
                                                            "typeString": "block"
                                                        }
                                                    },
                                                    "id": 6673,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "number",
                                                    "nodeType": "MemberAccess",
                                                    "src": "2633:12:23",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "%",
                                                "rightExpression": {
                                                    "hexValue": "32",
                                                    "id": 6674,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "2648:1:23",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_2_by_1",
                                                        "typeString": "int_const 2"
                                                    },
                                                    "value": "2"
                                                },
                                                "src": "2633:16:23",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "==",
                                            "rightExpression": {
                                                "hexValue": "30",
                                                "id": 6676,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "number",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "2653:1:23",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_rational_0_by_1",
                                                    "typeString": "int_const 0"
                                                },
                                                "value": "0"
                                            },
                                            "src": "2633:21:23",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "src": "2599:55:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 6684,
                                    "nodeType": "IfStatement",
                                    "src": "2595:144:23",
                                    "trueBody": {
                                        "id": 6683,
                                        "nodeType": "Block",
                                        "src": "2656:83:23",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "hexValue": "596f752061736b6564206d6520746f20726576657274206f6e206576656e20626c6f636b732c2072656d656d6265723f",
                                                            "id": 6680,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "string",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "2677:50:23",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_stringliteral_fe10bb9675995fc584335f79eeb07c8f88eea53ba6c579c1160a757d8480a569",
                                                                "typeString": "literal_string \"You asked me to revert on even blocks, remember?\""
                                                            },
                                                            "value": "You asked me to revert on even blocks, remember?"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_stringliteral_fe10bb9675995fc584335f79eeb07c8f88eea53ba6c579c1160a757d8480a569",
                                                                "typeString": "literal_string \"You asked me to revert on even blocks, remember?\""
                                                            }
                                                        ],
                                                        "id": 6679,
                                                        "name": "revert",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [
                                                            4294967277,
                                                            4294967277
                                                        ],
                                                        "referencedDeclaration": 4294967277,
                                                        "src": "2670:6:23",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                                            "typeString": "function (string memory) pure"
                                                        }
                                                    },
                                                    "id": 6681,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "2670:58:23",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$__$",
                                                        "typeString": "tuple()"
                                                    }
                                                },
                                                "id": 6682,
                                                "nodeType": "ExpressionStatement",
                                                "src": "2670:58:23"
                                            }
                                        ]
                                    }
                                },
                                {
                                    "expression": {
                                        "components": [
                                            {
                                                "hexValue": "",
                                                "id": 6685,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "2756:2:23",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                                    "typeString": "literal_string \"\""
                                                },
                                                "value": ""
                                            },
                                            {
                                                "id": 6686,
                                                "name": "trustRecipientRevert",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6829,
                                                "src": "2760:20:23",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            }
                                        ],
                                        "id": 6687,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "2755:26:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470_$_t_bool_$",
                                            "typeString": "tuple(literal_string \"\",bool)"
                                        }
                                    },
                                    "functionReturnParameters": 6632,
                                    "id": 6688,
                                    "nodeType": "Return",
                                    "src": "2748:33:23"
                                }
                            ]
                        },
                        "id": 6690,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "_preRelayedCall",
                        "nameLocation": "1908:15:23",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 6627,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "2103:8:23"
                        },
                        "parameters": {
                            "id": 6626,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6619,
                                    "mutability": "mutable",
                                    "name": "relayRequest",
                                    "nameLocation": "1964:12:23",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6690,
                                    "src": "1933:43:23",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                        "typeString": "struct GsnTypes.RelayRequest"
                                    },
                                    "typeName": {
                                        "id": 6618,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 6617,
                                            "name": "GsnTypes.RelayRequest",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 8491,
                                            "src": "1933:21:23"
                                        },
                                        "referencedDeclaration": 8491,
                                        "src": "1933:21:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_storage_ptr",
                                            "typeString": "struct GsnTypes.RelayRequest"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6621,
                                    "mutability": "mutable",
                                    "name": "signature",
                                    "nameLocation": "2001:9:23",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6690,
                                    "src": "1986:24:23",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 6620,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1986:5:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6623,
                                    "mutability": "mutable",
                                    "name": "approvalData",
                                    "nameLocation": "2035:12:23",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6690,
                                    "src": "2020:27:23",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 6622,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2020:5:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6625,
                                    "mutability": "mutable",
                                    "name": "maxPossibleGas",
                                    "nameLocation": "2065:14:23",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6690,
                                    "src": "2057:22:23",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 6624,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2057:7:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1923:162:23"
                        },
                        "returnParameters": {
                            "id": 6632,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6629,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6690,
                                    "src": "2125:12:23",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 6628,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2125:5:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6631,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6690,
                                    "src": "2139:4:23",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 6630,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2139:4:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2124:20:23"
                        },
                        "scope": 6866,
                        "src": "1899:889:23",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "baseFunctions": [
                            6955
                        ],
                        "body": {
                            "id": 6722,
                            "nodeType": "Block",
                            "src": "2992:256:23",
                            "statements": [
                                {
                                    "expression": {
                                        "components": [
                                            {
                                                "id": 6703,
                                                "name": "context",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6692,
                                                "src": "3003:7:23",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            },
                                            {
                                                "id": 6704,
                                                "name": "success",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6694,
                                                "src": "3012:7:23",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "id": 6705,
                                                "name": "gasUseWithoutPost",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6696,
                                                "src": "3021:17:23",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            {
                                                "id": 6706,
                                                "name": "relayData",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6699,
                                                "src": "3040:9:23",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                    "typeString": "struct GsnTypes.RelayData calldata"
                                                }
                                            }
                                        ],
                                        "id": 6707,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "3002:48:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_bytes_calldata_ptr_$_t_bool_$_t_uint256_$_t_struct$_RelayData_$8484_calldata_ptr_$",
                                            "typeString": "tuple(bytes calldata,bool,uint256,struct GsnTypes.RelayData calldata)"
                                        }
                                    },
                                    "id": 6708,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3002:48:23"
                                },
                                {
                                    "condition": {
                                        "id": 6709,
                                        "name": "withdrawDuringPostRelayedCall",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6495,
                                        "src": "3064:29:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 6714,
                                    "nodeType": "IfStatement",
                                    "src": "3060:80:23",
                                    "trueBody": {
                                        "id": 6713,
                                        "nodeType": "Block",
                                        "src": "3095:45:23",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "arguments": [],
                                                    "expression": {
                                                        "argumentTypes": [],
                                                        "id": 6710,
                                                        "name": "withdrawAllBalance",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 6768,
                                                        "src": "3109:18:23",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_uint256_$",
                                                            "typeString": "function () returns (uint256)"
                                                        }
                                                    },
                                                    "id": 6711,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "3109:20:23",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "id": 6712,
                                                "nodeType": "ExpressionStatement",
                                                "src": "3109:20:23"
                                            }
                                        ]
                                    }
                                },
                                {
                                    "condition": {
                                        "id": 6715,
                                        "name": "revertPostRelayCall",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6501,
                                        "src": "3153:19:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 6721,
                                    "nodeType": "IfStatement",
                                    "src": "3149:93:23",
                                    "trueBody": {
                                        "id": 6720,
                                        "nodeType": "Block",
                                        "src": "3174:68:23",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "hexValue": "596f752061736b6564206d6520746f207265766572742c2072656d656d6265723f",
                                                            "id": 6717,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "string",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "3195:35:23",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_stringliteral_951bb8d072d9524fc3cf57cf7fb48f842befafc1060013c7ac7349b0991cb9ff",
                                                                "typeString": "literal_string \"You asked me to revert, remember?\""
                                                            },
                                                            "value": "You asked me to revert, remember?"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_stringliteral_951bb8d072d9524fc3cf57cf7fb48f842befafc1060013c7ac7349b0991cb9ff",
                                                                "typeString": "literal_string \"You asked me to revert, remember?\""
                                                            }
                                                        ],
                                                        "id": 6716,
                                                        "name": "revert",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [
                                                            4294967277,
                                                            4294967277
                                                        ],
                                                        "referencedDeclaration": 4294967277,
                                                        "src": "3188:6:23",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                                            "typeString": "function (string memory) pure"
                                                        }
                                                    },
                                                    "id": 6718,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "3188:43:23",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$__$",
                                                        "typeString": "tuple()"
                                                    }
                                                },
                                                "id": 6719,
                                                "nodeType": "ExpressionStatement",
                                                "src": "3188:43:23"
                                            }
                                        ]
                                    }
                                }
                            ]
                        },
                        "id": 6723,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "_postRelayedCall",
                        "nameLocation": "2803:16:23",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 6701,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "2979:8:23"
                        },
                        "parameters": {
                            "id": 6700,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6692,
                                    "mutability": "mutable",
                                    "name": "context",
                                    "nameLocation": "2844:7:23",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6723,
                                    "src": "2829:22:23",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 6691,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2829:5:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6694,
                                    "mutability": "mutable",
                                    "name": "success",
                                    "nameLocation": "2866:7:23",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6723,
                                    "src": "2861:12:23",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 6693,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2861:4:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6696,
                                    "mutability": "mutable",
                                    "name": "gasUseWithoutPost",
                                    "nameLocation": "2891:17:23",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6723,
                                    "src": "2883:25:23",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 6695,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2883:7:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6699,
                                    "mutability": "mutable",
                                    "name": "relayData",
                                    "nameLocation": "2946:9:23",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6723,
                                    "src": "2918:37:23",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                        "typeString": "struct GsnTypes.RelayData"
                                    },
                                    "typeName": {
                                        "id": 6698,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 6697,
                                            "name": "GsnTypes.RelayData",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 8484,
                                            "src": "2918:18:23"
                                        },
                                        "referencedDeclaration": 8484,
                                        "src": "2918:18:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayData_$8484_storage_ptr",
                                            "typeString": "struct GsnTypes.RelayData"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2819:142:23"
                        },
                        "returnParameters": {
                            "id": 6702,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "2992:0:23"
                        },
                        "scope": 6866,
                        "src": "2794:454:23",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 6767,
                            "nodeType": "Block",
                            "src": "3359:231:23",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                "id": 6738,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "arguments": [
                                                        {
                                                            "id": 6732,
                                                            "name": "relayHub",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 23,
                                                            "src": "3385:8:23",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_contract$_IRelayHub_$5896",
                                                                "typeString": "contract IRelayHub"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_contract$_IRelayHub_$5896",
                                                                "typeString": "contract IRelayHub"
                                                            }
                                                        ],
                                                        "id": 6731,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "ElementaryTypeNameExpression",
                                                        "src": "3377:7:23",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_address_$",
                                                            "typeString": "type(address)"
                                                        },
                                                        "typeName": {
                                                            "id": 6730,
                                                            "name": "address",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "3377:7:23",
                                                            "typeDescriptions": {}
                                                        }
                                                    },
                                                    "id": 6733,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "typeConversion",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "3377:17:23",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "!=",
                                                "rightExpression": {
                                                    "arguments": [
                                                        {
                                                            "hexValue": "30",
                                                            "id": 6736,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "number",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "3406:1:23",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_rational_0_by_1",
                                                                "typeString": "int_const 0"
                                                            },
                                                            "value": "0"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_rational_0_by_1",
                                                                "typeString": "int_const 0"
                                                            }
                                                        ],
                                                        "id": 6735,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "ElementaryTypeNameExpression",
                                                        "src": "3398:7:23",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_address_$",
                                                            "typeString": "type(address)"
                                                        },
                                                        "typeName": {
                                                            "id": 6734,
                                                            "name": "address",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "3398:7:23",
                                                            "typeDescriptions": {}
                                                        }
                                                    },
                                                    "id": 6737,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "typeConversion",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "3398:10:23",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "src": "3377:31:23",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "72656c6179206875622061646472657373206e6f7420736574",
                                                "id": 6739,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "3410:27:23",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_2e4bcc216326d2d371e2433ec8e1af9c54827701515af7cd10f9acc79120d313",
                                                    "typeString": "literal_string \"relay hub address not set\""
                                                },
                                                "value": "relay hub address not set"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_2e4bcc216326d2d371e2433ec8e1af9c54827701515af7cd10f9acc79120d313",
                                                    "typeString": "literal_string \"relay hub address not set\""
                                                }
                                            ],
                                            "id": 6729,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "3369:7:23",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 6740,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3369:69:23",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 6741,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3369:69:23"
                                },
                                {
                                    "assignments": [
                                        6743
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 6743,
                                            "mutability": "mutable",
                                            "name": "balance",
                                            "nameLocation": "3456:7:23",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 6767,
                                            "src": "3448:15:23",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 6742,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "3448:7:23",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 6751,
                                    "initialValue": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "id": 6748,
                                                        "name": "this",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967268,
                                                        "src": "3493:4:23",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_contract$_TestPaymasterConfigurableMisbehavior_$6866",
                                                            "typeString": "contract TestPaymasterConfigurableMisbehavior"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_contract$_TestPaymasterConfigurableMisbehavior_$6866",
                                                            "typeString": "contract TestPaymasterConfigurableMisbehavior"
                                                        }
                                                    ],
                                                    "id": 6747,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "ElementaryTypeNameExpression",
                                                    "src": "3485:7:23",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_address_$",
                                                        "typeString": "type(address)"
                                                    },
                                                    "typeName": {
                                                        "id": 6746,
                                                        "name": "address",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "3485:7:23",
                                                        "typeDescriptions": {}
                                                    }
                                                },
                                                "id": 6749,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "typeConversion",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "3485:13:23",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "expression": {
                                                "id": 6744,
                                                "name": "relayHub",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 23,
                                                "src": "3466:8:23",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_IRelayHub_$5896",
                                                    "typeString": "contract IRelayHub"
                                                }
                                            },
                                            "id": 6745,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "balanceOf",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 5826,
                                            "src": "3466:18:23",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                                                "typeString": "function (address) view external returns (uint256)"
                                            }
                                        },
                                        "id": 6750,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3466:33:23",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "3448:51:23"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "arguments": [
                                                            {
                                                                "id": 6759,
                                                                "name": "this",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 4294967268,
                                                                "src": "3543:4:23",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_contract$_TestPaymasterConfigurableMisbehavior_$6866",
                                                                    "typeString": "contract TestPaymasterConfigurableMisbehavior"
                                                                }
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_contract$_TestPaymasterConfigurableMisbehavior_$6866",
                                                                    "typeString": "contract TestPaymasterConfigurableMisbehavior"
                                                                }
                                                            ],
                                                            "id": 6758,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "nodeType": "ElementaryTypeNameExpression",
                                                            "src": "3535:7:23",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_type$_t_address_$",
                                                                "typeString": "type(address)"
                                                            },
                                                            "typeName": {
                                                                "id": 6757,
                                                                "name": "address",
                                                                "nodeType": "ElementaryTypeName",
                                                                "src": "3535:7:23",
                                                                "typeDescriptions": {}
                                                            }
                                                        },
                                                        "id": 6760,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "typeConversion",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "3535:13:23",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    ],
                                                    "id": 6756,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "ElementaryTypeNameExpression",
                                                    "src": "3527:8:23",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_address_payable_$",
                                                        "typeString": "type(address payable)"
                                                    },
                                                    "typeName": {
                                                        "id": 6755,
                                                        "name": "address",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "3527:8:23",
                                                        "stateMutability": "payable",
                                                        "typeDescriptions": {}
                                                    }
                                                },
                                                "id": 6761,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "typeConversion",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "3527:22:23",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            },
                                            {
                                                "id": 6762,
                                                "name": "balance",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6743,
                                                "src": "3551:7:23",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "expression": {
                                                "id": 6752,
                                                "name": "relayHub",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 23,
                                                "src": "3509:8:23",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_IRelayHub_$5896",
                                                    "typeString": "contract IRelayHub"
                                                }
                                            },
                                            "id": 6754,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "withdraw",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 5695,
                                            "src": "3509:17:23",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_external_nonpayable$_t_address_payable_$_t_uint256_$returns$__$",
                                                "typeString": "function (address payable,uint256) external"
                                            }
                                        },
                                        "id": 6763,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3509:50:23",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 6764,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3509:50:23"
                                },
                                {
                                    "expression": {
                                        "id": 6765,
                                        "name": "balance",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6743,
                                        "src": "3576:7:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "functionReturnParameters": 6728,
                                    "id": 6766,
                                    "nodeType": "Return",
                                    "src": "3569:14:23"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 6724,
                            "nodeType": "StructuredDocumentation",
                            "src": "3254:45:23",
                            "text": "leaving withdrawal public and unprotected"
                        },
                        "functionSelector": "3b17eadc",
                        "id": 6768,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "withdrawAllBalance",
                        "nameLocation": "3313:18:23",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6725,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "3331:2:23"
                        },
                        "returnParameters": {
                            "id": 6728,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6727,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6768,
                                    "src": "3350:7:23",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 6726,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3350:7:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3349:9:23"
                        },
                        "scope": 6866,
                        "src": "3304:286:23",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "constant": false,
                        "id": 6774,
                        "mutability": "mutable",
                        "name": "limits",
                        "nameLocation": "3632:6:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 6866,
                        "src": "3596:72:23",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_storage",
                            "typeString": "struct IPaymaster.GasAndDataLimits"
                        },
                        "typeName": {
                            "id": 6770,
                            "nodeType": "UserDefinedTypeName",
                            "pathNode": {
                                "id": 6769,
                                "name": "IPaymaster.GasAndDataLimits",
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 5391,
                                "src": "3596:27:23"
                            },
                            "referencedDeclaration": 5391,
                            "src": "3596:27:23",
                            "typeDescriptions": {
                                "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_storage_ptr",
                                "typeString": "struct IPaymaster.GasAndDataLimits"
                            }
                        },
                        "value": {
                            "arguments": [],
                            "expression": {
                                "argumentTypes": [],
                                "expression": {
                                    "id": 6771,
                                    "name": "super",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4294967271,
                                    "src": "3641:5:23",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_super$_TestPaymasterConfigurableMisbehavior_$6866_$",
                                        "typeString": "type(contract super TestPaymasterConfigurableMisbehavior)"
                                    }
                                },
                                "id": 6772,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "getGasAndDataLimits",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 103,
                                "src": "3641:25:23",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$__$returns$_t_struct$_GasAndDataLimits_$5391_memory_ptr_$",
                                    "typeString": "function () view returns (struct IPaymaster.GasAndDataLimits memory)"
                                }
                            },
                            "id": 6773,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3641:27:23",
                            "tryCall": false,
                            "typeDescriptions": {
                                "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_memory_ptr",
                                "typeString": "struct IPaymaster.GasAndDataLimits memory"
                            }
                        },
                        "visibility": "private"
                    },
                    {
                        "baseFunctions": [
                            103
                        ],
                        "body": {
                            "id": 6826,
                            "nodeType": "Block",
                            "src": "3780:500:23",
                            "statements": [
                                {
                                    "condition": {
                                        "id": 6781,
                                        "name": "expensiveGasLimits",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6511,
                                        "src": "3795:18:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 6806,
                                    "nodeType": "IfStatement",
                                    "src": "3791:234:23",
                                    "trueBody": {
                                        "id": 6805,
                                        "nodeType": "Block",
                                        "src": "3815:210:23",
                                        "statements": [
                                            {
                                                "assignments": [
                                                    6783
                                                ],
                                                "declarations": [
                                                    {
                                                        "constant": false,
                                                        "id": 6783,
                                                        "mutability": "mutable",
                                                        "name": "sum",
                                                        "nameLocation": "3837:3:23",
                                                        "nodeType": "VariableDeclaration",
                                                        "scope": 6805,
                                                        "src": "3829:11:23",
                                                        "stateVariable": false,
                                                        "storageLocation": "default",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        },
                                                        "typeName": {
                                                            "id": 6782,
                                                            "name": "uint256",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "3829:7:23",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        },
                                                        "visibility": "internal"
                                                    }
                                                ],
                                                "id": 6784,
                                                "nodeType": "VariableDeclarationStatement",
                                                "src": "3829:11:23"
                                            },
                                            {
                                                "body": {
                                                    "id": 6803,
                                                    "nodeType": "Block",
                                                    "src": "3946:69:23",
                                                    "statements": [
                                                        {
                                                            "expression": {
                                                                "id": 6801,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "leftHandSide": {
                                                                    "id": 6796,
                                                                    "name": "sum",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 6783,
                                                                    "src": "3964:3:23",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_uint256",
                                                                        "typeString": "uint256"
                                                                    }
                                                                },
                                                                "nodeType": "Assignment",
                                                                "operator": "=",
                                                                "rightHandSide": {
                                                                    "commonType": {
                                                                        "typeIdentifier": "t_uint256",
                                                                        "typeString": "uint256"
                                                                    },
                                                                    "id": 6800,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "leftExpression": {
                                                                        "id": 6797,
                                                                        "name": "sum",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 6783,
                                                                        "src": "3971:3:23",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_uint256",
                                                                            "typeString": "uint256"
                                                                        }
                                                                    },
                                                                    "nodeType": "BinaryOperation",
                                                                    "operator": "+",
                                                                    "rightExpression": {
                                                                        "expression": {
                                                                            "id": 6798,
                                                                            "name": "limits",
                                                                            "nodeType": "Identifier",
                                                                            "overloadedDeclarations": [],
                                                                            "referencedDeclaration": 6774,
                                                                            "src": "3977:6:23",
                                                                            "typeDescriptions": {
                                                                                "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_storage",
                                                                                "typeString": "struct IPaymaster.GasAndDataLimits storage ref"
                                                                            }
                                                                        },
                                                                        "id": 6799,
                                                                        "isConstant": false,
                                                                        "isLValue": true,
                                                                        "isPure": false,
                                                                        "lValueRequested": false,
                                                                        "memberName": "acceptanceBudget",
                                                                        "nodeType": "MemberAccess",
                                                                        "referencedDeclaration": 5384,
                                                                        "src": "3977:23:23",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_uint256",
                                                                            "typeString": "uint256"
                                                                        }
                                                                    },
                                                                    "src": "3971:29:23",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_uint256",
                                                                        "typeString": "uint256"
                                                                    }
                                                                },
                                                                "src": "3964:36:23",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            },
                                                            "id": 6802,
                                                            "nodeType": "ExpressionStatement",
                                                            "src": "3964:36:23"
                                                        }
                                                    ]
                                                },
                                                "condition": {
                                                    "commonType": {
                                                        "typeIdentifier": "t_int256",
                                                        "typeString": "int256"
                                                    },
                                                    "id": 6791,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "id": 6789,
                                                        "name": "i",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 6786,
                                                        "src": "3927:1:23",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_int256",
                                                            "typeString": "int256"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "<",
                                                    "rightExpression": {
                                                        "hexValue": "313030303030",
                                                        "id": 6790,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "number",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "3929:6:23",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_rational_100000_by_1",
                                                            "typeString": "int_const 100000"
                                                        },
                                                        "value": "100000"
                                                    },
                                                    "src": "3927:8:23",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "id": 6804,
                                                "initializationExpression": {
                                                    "assignments": [
                                                        6786
                                                    ],
                                                    "declarations": [
                                                        {
                                                            "constant": false,
                                                            "id": 6786,
                                                            "mutability": "mutable",
                                                            "name": "i",
                                                            "nameLocation": "3922:1:23",
                                                            "nodeType": "VariableDeclaration",
                                                            "scope": 6804,
                                                            "src": "3918:5:23",
                                                            "stateVariable": false,
                                                            "storageLocation": "default",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_int256",
                                                                "typeString": "int256"
                                                            },
                                                            "typeName": {
                                                                "id": 6785,
                                                                "name": "int",
                                                                "nodeType": "ElementaryTypeName",
                                                                "src": "3918:3:23",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_int256",
                                                                    "typeString": "int256"
                                                                }
                                                            },
                                                            "visibility": "internal"
                                                        }
                                                    ],
                                                    "id": 6788,
                                                    "initialValue": {
                                                        "hexValue": "30",
                                                        "id": 6787,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "number",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "3924:1:23",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_rational_0_by_1",
                                                            "typeString": "int_const 0"
                                                        },
                                                        "value": "0"
                                                    },
                                                    "nodeType": "VariableDeclarationStatement",
                                                    "src": "3918:7:23"
                                                },
                                                "loopExpression": {
                                                    "expression": {
                                                        "id": 6794,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "leftHandSide": {
                                                            "id": 6792,
                                                            "name": "i",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 6786,
                                                            "src": "3937:1:23",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_int256",
                                                                "typeString": "int256"
                                                            }
                                                        },
                                                        "nodeType": "Assignment",
                                                        "operator": "+=",
                                                        "rightHandSide": {
                                                            "hexValue": "373030",
                                                            "id": 6793,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "number",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "3940:3:23",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_rational_700_by_1",
                                                                "typeString": "int_const 700"
                                                            },
                                                            "value": "700"
                                                        },
                                                        "src": "3937:6:23",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_int256",
                                                            "typeString": "int256"
                                                        }
                                                    },
                                                    "id": 6795,
                                                    "nodeType": "ExpressionStatement",
                                                    "src": "3937:6:23"
                                                },
                                                "nodeType": "ForStatement",
                                                "src": "3912:103:23"
                                            }
                                        ]
                                    }
                                },
                                {
                                    "condition": {
                                        "id": 6807,
                                        "name": "greedyAcceptanceBudget",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6509,
                                        "src": "4038:22:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 6823,
                                    "nodeType": "IfStatement",
                                    "src": "4034:217:23",
                                    "trueBody": {
                                        "id": 6822,
                                        "nodeType": "Block",
                                        "src": "4062:189:23",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "commonType": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            },
                                                            "id": 6813,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "leftExpression": {
                                                                "expression": {
                                                                    "id": 6810,
                                                                    "name": "limits",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 6774,
                                                                    "src": "4111:6:23",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_storage",
                                                                        "typeString": "struct IPaymaster.GasAndDataLimits storage ref"
                                                                    }
                                                                },
                                                                "id": 6811,
                                                                "isConstant": false,
                                                                "isLValue": true,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "acceptanceBudget",
                                                                "nodeType": "MemberAccess",
                                                                "referencedDeclaration": 5384,
                                                                "src": "4111:23:23",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            },
                                                            "nodeType": "BinaryOperation",
                                                            "operator": "*",
                                                            "rightExpression": {
                                                                "hexValue": "39",
                                                                "id": 6812,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "kind": "number",
                                                                "lValueRequested": false,
                                                                "nodeType": "Literal",
                                                                "src": "4137:1:23",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_rational_9_by_1",
                                                                    "typeString": "int_const 9"
                                                                },
                                                                "value": "9"
                                                            },
                                                            "src": "4111:27:23",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        },
                                                        {
                                                            "expression": {
                                                                "id": 6814,
                                                                "name": "limits",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 6774,
                                                                "src": "4140:6:23",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_storage",
                                                                    "typeString": "struct IPaymaster.GasAndDataLimits storage ref"
                                                                }
                                                            },
                                                            "id": 6815,
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "preRelayedCallGasLimit",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 5386,
                                                            "src": "4140:29:23",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        },
                                                        {
                                                            "expression": {
                                                                "id": 6816,
                                                                "name": "limits",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 6774,
                                                                "src": "4171:6:23",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_storage",
                                                                    "typeString": "struct IPaymaster.GasAndDataLimits storage ref"
                                                                }
                                                            },
                                                            "id": 6817,
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "postRelayedCallGasLimit",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 5388,
                                                            "src": "4171:30:23",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        },
                                                        {
                                                            "expression": {
                                                                "id": 6818,
                                                                "name": "limits",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 6774,
                                                                "src": "4215:6:23",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_storage",
                                                                    "typeString": "struct IPaymaster.GasAndDataLimits storage ref"
                                                                }
                                                            },
                                                            "id": 6819,
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "calldataSizeLimit",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 5390,
                                                            "src": "4215:24:23",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        ],
                                                        "expression": {
                                                            "id": 6808,
                                                            "name": "IPaymaster",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 5447,
                                                            "src": "4083:10:23",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_type$_t_contract$_IPaymaster_$5447_$",
                                                                "typeString": "type(contract IPaymaster)"
                                                            }
                                                        },
                                                        "id": 6809,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "GasAndDataLimits",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 5391,
                                                        "src": "4083:27:23",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_struct$_GasAndDataLimits_$5391_storage_ptr_$",
                                                            "typeString": "type(struct IPaymaster.GasAndDataLimits storage pointer)"
                                                        }
                                                    },
                                                    "id": 6820,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "structConstructorCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "4083:157:23",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_memory_ptr",
                                                        "typeString": "struct IPaymaster.GasAndDataLimits memory"
                                                    }
                                                },
                                                "functionReturnParameters": 6780,
                                                "id": 6821,
                                                "nodeType": "Return",
                                                "src": "4076:164:23"
                                            }
                                        ]
                                    }
                                },
                                {
                                    "expression": {
                                        "id": 6824,
                                        "name": "limits",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6774,
                                        "src": "4267:6:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_storage",
                                            "typeString": "struct IPaymaster.GasAndDataLimits storage ref"
                                        }
                                    },
                                    "functionReturnParameters": 6780,
                                    "id": 6825,
                                    "nodeType": "Return",
                                    "src": "4260:13:23"
                                }
                            ]
                        },
                        "functionSelector": "b039a88f",
                        "id": 6827,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getGasAndDataLimits",
                        "nameLocation": "3684:19:23",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 6776,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "3717:8:23"
                        },
                        "parameters": {
                            "id": 6775,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "3703:2:23"
                        },
                        "returnParameters": {
                            "id": 6780,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6779,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6827,
                                    "src": "3744:34:23",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_memory_ptr",
                                        "typeString": "struct IPaymaster.GasAndDataLimits"
                                    },
                                    "typeName": {
                                        "id": 6778,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 6777,
                                            "name": "IPaymaster.GasAndDataLimits",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 5391,
                                            "src": "3744:27:23"
                                        },
                                        "referencedDeclaration": 5391,
                                        "src": "3744:27:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_storage_ptr",
                                            "typeString": "struct IPaymaster.GasAndDataLimits"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3743:36:23"
                        },
                        "scope": 6866,
                        "src": "3675:605:23",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "constant": false,
                        "id": 6829,
                        "mutability": "mutable",
                        "name": "trustRecipientRevert",
                        "nameLocation": "4299:20:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 6866,
                        "src": "4286:33:23",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                        },
                        "typeName": {
                            "id": 6828,
                            "name": "bool",
                            "nodeType": "ElementaryTypeName",
                            "src": "4286:4:23",
                            "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                            }
                        },
                        "visibility": "private"
                    },
                    {
                        "body": {
                            "id": 6849,
                            "nodeType": "Block",
                            "src": "4446:204:23",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 6847,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 6838,
                                            "name": "limits",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6774,
                                            "src": "4456:6:23",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_storage",
                                                "typeString": "struct IPaymaster.GasAndDataLimits storage ref"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "arguments": [
                                                {
                                                    "id": 6841,
                                                    "name": "acceptanceBudget",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 6831,
                                                    "src": "4506:16:23",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                {
                                                    "id": 6842,
                                                    "name": "preRelayedCallGasLimit",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 6833,
                                                    "src": "4536:22:23",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                {
                                                    "id": 6843,
                                                    "name": "postRelayedCallGasLimit",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 6835,
                                                    "src": "4572:23:23",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                {
                                                    "expression": {
                                                        "id": 6844,
                                                        "name": "limits",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 6774,
                                                        "src": "4609:6:23",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_storage",
                                                            "typeString": "struct IPaymaster.GasAndDataLimits storage ref"
                                                        }
                                                    },
                                                    "id": 6845,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "calldataSizeLimit",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 5390,
                                                    "src": "4609:24:23",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                ],
                                                "expression": {
                                                    "id": 6839,
                                                    "name": "IPaymaster",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 5447,
                                                    "src": "4465:10:23",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_contract$_IPaymaster_$5447_$",
                                                        "typeString": "type(contract IPaymaster)"
                                                    }
                                                },
                                                "id": 6840,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "GasAndDataLimits",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 5391,
                                                "src": "4465:27:23",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_struct$_GasAndDataLimits_$5391_storage_ptr_$",
                                                    "typeString": "type(struct IPaymaster.GasAndDataLimits storage pointer)"
                                                }
                                            },
                                            "id": 6846,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "structConstructorCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "4465:178:23",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_memory_ptr",
                                                "typeString": "struct IPaymaster.GasAndDataLimits memory"
                                            }
                                        },
                                        "src": "4456:187:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_storage",
                                            "typeString": "struct IPaymaster.GasAndDataLimits storage ref"
                                        }
                                    },
                                    "id": 6848,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4456:187:23"
                                }
                            ]
                        },
                        "functionSelector": "d721baa5",
                        "id": 6850,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "setGasLimits",
                        "nameLocation": "4335:12:23",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6836,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6831,
                                    "mutability": "mutable",
                                    "name": "acceptanceBudget",
                                    "nameLocation": "4356:16:23",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6850,
                                    "src": "4348:24:23",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 6830,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4348:7:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6833,
                                    "mutability": "mutable",
                                    "name": "preRelayedCallGasLimit",
                                    "nameLocation": "4382:22:23",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6850,
                                    "src": "4374:30:23",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 6832,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4374:7:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6835,
                                    "mutability": "mutable",
                                    "name": "postRelayedCallGasLimit",
                                    "nameLocation": "4414:23:23",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6850,
                                    "src": "4406:31:23",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 6834,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4406:7:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4347:91:23"
                        },
                        "returnParameters": {
                            "id": 6837,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "4446:0:23"
                        },
                        "scope": 6866,
                        "src": "4326:324:23",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "body": {
                            "id": 6859,
                            "nodeType": "Block",
                            "src": "4705:42:23",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 6857,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 6855,
                                            "name": "trustRecipientRevert",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6829,
                                            "src": "4715:20:23",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 6856,
                                            "name": "on",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6852,
                                            "src": "4738:2:23",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "src": "4715:25:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 6858,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4715:25:23"
                                }
                            ]
                        },
                        "functionSelector": "c82e8ad4",
                        "id": 6860,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "setTrustRecipientRevert",
                        "nameLocation": "4665:23:23",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6853,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6852,
                                    "mutability": "mutable",
                                    "name": "on",
                                    "nameLocation": "4694:2:23",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6860,
                                    "src": "4689:7:23",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 6851,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4689:4:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4688:9:23"
                        },
                        "returnParameters": {
                            "id": 6854,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "4705:0:23"
                        },
                        "scope": 6866,
                        "src": "4656:91:23",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            278
                        ],
                        "body": {
                            "id": 6864,
                            "nodeType": "Block",
                            "src": "4838:2:23",
                            "statements": []
                        },
                        "id": 6865,
                        "implemented": true,
                        "kind": "receive",
                        "modifiers": [],
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 6862,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "4821:8:23"
                        },
                        "parameters": {
                            "id": 6861,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "4809:2:23"
                        },
                        "returnParameters": {
                            "id": 6863,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "4838:0:23"
                        },
                        "scope": 6866,
                        "src": "4802:38:23",
                        "stateMutability": "payable",
                        "virtual": false,
                        "visibility": "external"
                    }
                ],
                "scope": 6867,
                "src": "136:4706:23",
                "usedErrors": []
            }
        ],
        "src": "0:4842:23"
    },
    "legacyAST": {
        "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/test/TestPaymasterConfigurableMisbehavior.sol",
        "exportedSymbols": {
            "BasePaymaster": [
                397
            ],
            "Context": [
                11508
            ],
            "ERC165": [
                12146
            ],
            "ERC165Checker": [
                12340
            ],
            "GsnEip712Library": [
                8464
            ],
            "GsnTypes": [
                8492
            ],
            "GsnUtils": [
                8572
            ],
            "IERC165": [
                12352
            ],
            "IERC20": [
                10849
            ],
            "IERC2771Recipient": [
                5374
            ],
            "IForwarder": [
                5129
            ],
            "IPaymaster": [
                5447
            ],
            "IRelayHub": [
                5896
            ],
            "IStakeManager": [
                6284
            ],
            "MinLibBytes": [
                8687
            ],
            "Ownable": [
                10182
            ],
            "TestPaymasterConfigurableMisbehavior": [
                6866
            ],
            "TestPaymasterEverythingAccepted": [
                7006
            ]
        },
        "id": 6867,
        "license": "GPL-3.0-only",
        "nodeType": "SourceUnit",
        "nodes": [
            {
                "id": 6489,
                "literals": [
                    "solidity",
                    "^",
                    "0.8",
                    ".0"
                ],
                "nodeType": "PragmaDirective",
                "src": "0:23:23"
            },
            {
                "id": 6490,
                "literals": [
                    "abicoder",
                    "v2"
                ],
                "nodeType": "PragmaDirective",
                "src": "24:19:23"
            },
            {
                "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/test/TestPaymasterEverythingAccepted.sol",
                "file": "./TestPaymasterEverythingAccepted.sol",
                "id": 6491,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 6867,
                "sourceUnit": 7007,
                "src": "87:47:23",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "abstract": false,
                "baseContracts": [
                    {
                        "baseName": {
                            "id": 6492,
                            "name": "TestPaymasterEverythingAccepted",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 7006,
                            "src": "185:31:23"
                        },
                        "id": 6493,
                        "nodeType": "InheritanceSpecifier",
                        "src": "185:31:23"
                    }
                ],
                "contractDependencies": [],
                "contractKind": "contract",
                "fullyImplemented": true,
                "id": 6866,
                "linearizedBaseContracts": [
                    6866,
                    7006,
                    397,
                    12146,
                    10182,
                    11508,
                    5447,
                    12352
                ],
                "name": "TestPaymasterConfigurableMisbehavior",
                "nameLocation": "145:36:23",
                "nodeType": "ContractDefinition",
                "nodes": [
                    {
                        "constant": false,
                        "functionSelector": "817f12dd",
                        "id": 6495,
                        "mutability": "mutable",
                        "name": "withdrawDuringPostRelayedCall",
                        "nameLocation": "236:29:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 6866,
                        "src": "224:41:23",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                        },
                        "typeName": {
                            "id": 6494,
                            "name": "bool",
                            "nodeType": "ElementaryTypeName",
                            "src": "224:4:23",
                            "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                            }
                        },
                        "visibility": "public"
                    },
                    {
                        "constant": false,
                        "functionSelector": "01053c33",
                        "id": 6497,
                        "mutability": "mutable",
                        "name": "withdrawDuringPreRelayedCall",
                        "nameLocation": "283:28:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 6866,
                        "src": "271:40:23",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                        },
                        "typeName": {
                            "id": 6496,
                            "name": "bool",
                            "nodeType": "ElementaryTypeName",
                            "src": "271:4:23",
                            "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                            }
                        },
                        "visibility": "public"
                    },
                    {
                        "constant": false,
                        "functionSelector": "c510906c",
                        "id": 6499,
                        "mutability": "mutable",
                        "name": "returnInvalidErrorCode",
                        "nameLocation": "329:22:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 6866,
                        "src": "317:34:23",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                        },
                        "typeName": {
                            "id": 6498,
                            "name": "bool",
                            "nodeType": "ElementaryTypeName",
                            "src": "317:4:23",
                            "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                            }
                        },
                        "visibility": "public"
                    },
                    {
                        "constant": false,
                        "functionSelector": "59b8aa2e",
                        "id": 6501,
                        "mutability": "mutable",
                        "name": "revertPostRelayCall",
                        "nameLocation": "369:19:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 6866,
                        "src": "357:31:23",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                        },
                        "typeName": {
                            "id": 6500,
                            "name": "bool",
                            "nodeType": "ElementaryTypeName",
                            "src": "357:4:23",
                            "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                            }
                        },
                        "visibility": "public"
                    },
                    {
                        "constant": false,
                        "functionSelector": "51d88938",
                        "id": 6503,
                        "mutability": "mutable",
                        "name": "outOfGasPre",
                        "nameLocation": "406:11:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 6866,
                        "src": "394:23:23",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                        },
                        "typeName": {
                            "id": 6502,
                            "name": "bool",
                            "nodeType": "ElementaryTypeName",
                            "src": "394:4:23",
                            "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                            }
                        },
                        "visibility": "public"
                    },
                    {
                        "constant": false,
                        "functionSelector": "7d4e494a",
                        "id": 6505,
                        "mutability": "mutable",
                        "name": "revertPreRelayCall",
                        "nameLocation": "435:18:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 6866,
                        "src": "423:30:23",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                        },
                        "typeName": {
                            "id": 6504,
                            "name": "bool",
                            "nodeType": "ElementaryTypeName",
                            "src": "423:4:23",
                            "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                            }
                        },
                        "visibility": "public"
                    },
                    {
                        "constant": false,
                        "functionSelector": "4b9ed5e3",
                        "id": 6507,
                        "mutability": "mutable",
                        "name": "revertPreRelayCallOnEvenBlocks",
                        "nameLocation": "471:30:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 6866,
                        "src": "459:42:23",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                        },
                        "typeName": {
                            "id": 6506,
                            "name": "bool",
                            "nodeType": "ElementaryTypeName",
                            "src": "459:4:23",
                            "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                            }
                        },
                        "visibility": "public"
                    },
                    {
                        "constant": false,
                        "functionSelector": "22455ccf",
                        "id": 6509,
                        "mutability": "mutable",
                        "name": "greedyAcceptanceBudget",
                        "nameLocation": "519:22:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 6866,
                        "src": "507:34:23",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                        },
                        "typeName": {
                            "id": 6508,
                            "name": "bool",
                            "nodeType": "ElementaryTypeName",
                            "src": "507:4:23",
                            "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                            }
                        },
                        "visibility": "public"
                    },
                    {
                        "constant": false,
                        "functionSelector": "1bab7cab",
                        "id": 6511,
                        "mutability": "mutable",
                        "name": "expensiveGasLimits",
                        "nameLocation": "559:18:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 6866,
                        "src": "547:30:23",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                        },
                        "typeName": {
                            "id": 6510,
                            "name": "bool",
                            "nodeType": "ElementaryTypeName",
                            "src": "547:4:23",
                            "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                            }
                        },
                        "visibility": "public"
                    },
                    {
                        "body": {
                            "id": 6520,
                            "nodeType": "Block",
                            "src": "643:52:23",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 6518,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 6516,
                                            "name": "withdrawDuringPostRelayedCall",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6495,
                                            "src": "653:29:23",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 6517,
                                            "name": "val",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6513,
                                            "src": "685:3:23",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "src": "653:35:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 6519,
                                    "nodeType": "ExpressionStatement",
                                    "src": "653:35:23"
                                }
                            ]
                        },
                        "functionSelector": "618df88d",
                        "id": 6521,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "setWithdrawDuringPostRelayedCall",
                        "nameLocation": "593:32:23",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6514,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6513,
                                    "mutability": "mutable",
                                    "name": "val",
                                    "nameLocation": "631:3:23",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6521,
                                    "src": "626:8:23",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 6512,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "626:4:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "625:10:23"
                        },
                        "returnParameters": {
                            "id": 6515,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "643:0:23"
                        },
                        "scope": 6866,
                        "src": "584:111:23",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "body": {
                            "id": 6530,
                            "nodeType": "Block",
                            "src": "758:51:23",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 6528,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 6526,
                                            "name": "withdrawDuringPreRelayedCall",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6497,
                                            "src": "768:28:23",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 6527,
                                            "name": "val",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6523,
                                            "src": "799:3:23",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "src": "768:34:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 6529,
                                    "nodeType": "ExpressionStatement",
                                    "src": "768:34:23"
                                }
                            ]
                        },
                        "functionSelector": "6c9a7b1b",
                        "id": 6531,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "setWithdrawDuringPreRelayedCall",
                        "nameLocation": "709:31:23",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6524,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6523,
                                    "mutability": "mutable",
                                    "name": "val",
                                    "nameLocation": "746:3:23",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6531,
                                    "src": "741:8:23",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 6522,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "741:4:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "740:10:23"
                        },
                        "returnParameters": {
                            "id": 6525,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "758:0:23"
                        },
                        "scope": 6866,
                        "src": "700:109:23",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "body": {
                            "id": 6540,
                            "nodeType": "Block",
                            "src": "866:45:23",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 6538,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 6536,
                                            "name": "returnInvalidErrorCode",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6499,
                                            "src": "876:22:23",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 6537,
                                            "name": "val",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6533,
                                            "src": "901:3:23",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "src": "876:28:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 6539,
                                    "nodeType": "ExpressionStatement",
                                    "src": "876:28:23"
                                }
                            ]
                        },
                        "functionSelector": "38b58641",
                        "id": 6541,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "setReturnInvalidErrorCode",
                        "nameLocation": "823:25:23",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6534,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6533,
                                    "mutability": "mutable",
                                    "name": "val",
                                    "nameLocation": "854:3:23",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6541,
                                    "src": "849:8:23",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 6532,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "849:4:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "848:10:23"
                        },
                        "returnParameters": {
                            "id": 6535,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "866:0:23"
                        },
                        "scope": 6866,
                        "src": "814:97:23",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "body": {
                            "id": 6550,
                            "nodeType": "Block",
                            "src": "965:42:23",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 6548,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 6546,
                                            "name": "revertPostRelayCall",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6501,
                                            "src": "975:19:23",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 6547,
                                            "name": "val",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6543,
                                            "src": "997:3:23",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "src": "975:25:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 6549,
                                    "nodeType": "ExpressionStatement",
                                    "src": "975:25:23"
                                }
                            ]
                        },
                        "functionSelector": "ba7ddf1c",
                        "id": 6551,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "setRevertPostRelayCall",
                        "nameLocation": "925:22:23",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6544,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6543,
                                    "mutability": "mutable",
                                    "name": "val",
                                    "nameLocation": "953:3:23",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6551,
                                    "src": "948:8:23",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 6542,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "948:4:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "947:10:23"
                        },
                        "returnParameters": {
                            "id": 6545,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "965:0:23"
                        },
                        "scope": 6866,
                        "src": "916:91:23",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "body": {
                            "id": 6560,
                            "nodeType": "Block",
                            "src": "1060:41:23",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 6558,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 6556,
                                            "name": "revertPreRelayCall",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6505,
                                            "src": "1070:18:23",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 6557,
                                            "name": "val",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6553,
                                            "src": "1091:3:23",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "src": "1070:24:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 6559,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1070:24:23"
                                }
                            ]
                        },
                        "functionSelector": "6a7ef8e0",
                        "id": 6561,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "setRevertPreRelayCall",
                        "nameLocation": "1021:21:23",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6554,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6553,
                                    "mutability": "mutable",
                                    "name": "val",
                                    "nameLocation": "1048:3:23",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6561,
                                    "src": "1043:8:23",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 6552,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1043:4:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1042:10:23"
                        },
                        "returnParameters": {
                            "id": 6555,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1060:0:23"
                        },
                        "scope": 6866,
                        "src": "1012:89:23",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "body": {
                            "id": 6570,
                            "nodeType": "Block",
                            "src": "1166:53:23",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 6568,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 6566,
                                            "name": "revertPreRelayCallOnEvenBlocks",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6507,
                                            "src": "1176:30:23",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 6567,
                                            "name": "val",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6563,
                                            "src": "1209:3:23",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "src": "1176:36:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 6569,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1176:36:23"
                                }
                            ]
                        },
                        "functionSelector": "6ef2b63e",
                        "id": 6571,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "setRevertPreRelayCallOnEvenBlocks",
                        "nameLocation": "1115:33:23",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6564,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6563,
                                    "mutability": "mutable",
                                    "name": "val",
                                    "nameLocation": "1154:3:23",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6571,
                                    "src": "1149:8:23",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 6562,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1149:4:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1148:10:23"
                        },
                        "returnParameters": {
                            "id": 6565,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1166:0:23"
                        },
                        "scope": 6866,
                        "src": "1106:113:23",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "body": {
                            "id": 6580,
                            "nodeType": "Block",
                            "src": "1265:34:23",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 6578,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 6576,
                                            "name": "outOfGasPre",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6503,
                                            "src": "1275:11:23",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 6577,
                                            "name": "val",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6573,
                                            "src": "1289:3:23",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "src": "1275:17:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 6579,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1275:17:23"
                                }
                            ]
                        },
                        "functionSelector": "6f0f6902",
                        "id": 6581,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "setOutOfGasPre",
                        "nameLocation": "1233:14:23",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6574,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6573,
                                    "mutability": "mutable",
                                    "name": "val",
                                    "nameLocation": "1253:3:23",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6581,
                                    "src": "1248:8:23",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 6572,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1248:4:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1247:10:23"
                        },
                        "returnParameters": {
                            "id": 6575,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1265:0:23"
                        },
                        "scope": 6866,
                        "src": "1224:75:23",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "body": {
                            "id": 6590,
                            "nodeType": "Block",
                            "src": "1357:45:23",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 6588,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 6586,
                                            "name": "greedyAcceptanceBudget",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6509,
                                            "src": "1367:22:23",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 6587,
                                            "name": "val",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6583,
                                            "src": "1392:3:23",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "src": "1367:28:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 6589,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1367:28:23"
                                }
                            ]
                        },
                        "functionSelector": "d20bd980",
                        "id": 6591,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "setGreedyAcceptanceBudget",
                        "nameLocation": "1314:25:23",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6584,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6583,
                                    "mutability": "mutable",
                                    "name": "val",
                                    "nameLocation": "1345:3:23",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6591,
                                    "src": "1340:8:23",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 6582,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1340:4:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1339:10:23"
                        },
                        "returnParameters": {
                            "id": 6585,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1357:0:23"
                        },
                        "scope": 6866,
                        "src": "1305:97:23",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "body": {
                            "id": 6600,
                            "nodeType": "Block",
                            "src": "1455:41:23",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 6598,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 6596,
                                            "name": "expensiveGasLimits",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6511,
                                            "src": "1465:18:23",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 6597,
                                            "name": "val",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6593,
                                            "src": "1486:3:23",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "src": "1465:24:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 6599,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1465:24:23"
                                }
                            ]
                        },
                        "functionSelector": "645c9687",
                        "id": 6601,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "setExpensiveGasLimits",
                        "nameLocation": "1416:21:23",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6594,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6593,
                                    "mutability": "mutable",
                                    "name": "val",
                                    "nameLocation": "1443:3:23",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6601,
                                    "src": "1438:8:23",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 6592,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1438:4:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1437:10:23"
                        },
                        "returnParameters": {
                            "id": 6595,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1455:0:23"
                        },
                        "scope": 6866,
                        "src": "1407:89:23",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            187
                        ],
                        "body": {
                            "id": 6607,
                            "nodeType": "Block",
                            "src": "1640:2:23",
                            "statements": []
                        },
                        "id": 6608,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "_verifyApprovalData",
                        "nameLocation": "1560:19:23",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 6605,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "1626:8:23"
                        },
                        "parameters": {
                            "id": 6604,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6603,
                                    "mutability": "mutable",
                                    "name": "approvalData",
                                    "nameLocation": "1595:12:23",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6608,
                                    "src": "1580:27:23",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 6602,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1580:5:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1579:29:23"
                        },
                        "returnParameters": {
                            "id": 6606,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1640:0:23"
                        },
                        "scope": 6866,
                        "src": "1551:91:23",
                        "stateMutability": "view",
                        "virtual": true,
                        "visibility": "internal"
                    },
                    {
                        "baseFunctions": [
                            173
                        ],
                        "body": {
                            "id": 6615,
                            "nodeType": "Block",
                            "src": "1803:2:23",
                            "statements": []
                        },
                        "id": 6616,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "_verifyPaymasterData",
                        "nameLocation": "1706:20:23",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 6613,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "1789:8:23"
                        },
                        "parameters": {
                            "id": 6612,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6611,
                                    "mutability": "mutable",
                                    "name": "relayRequest",
                                    "nameLocation": "1758:12:23",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6616,
                                    "src": "1727:43:23",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                        "typeString": "struct GsnTypes.RelayRequest"
                                    },
                                    "typeName": {
                                        "id": 6610,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 6609,
                                            "name": "GsnTypes.RelayRequest",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 8491,
                                            "src": "1727:21:23"
                                        },
                                        "referencedDeclaration": 8491,
                                        "src": "1727:21:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_storage_ptr",
                                            "typeString": "struct GsnTypes.RelayRequest"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1726:45:23"
                        },
                        "returnParameters": {
                            "id": 6614,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1803:0:23"
                        },
                        "scope": 6866,
                        "src": "1697:108:23",
                        "stateMutability": "view",
                        "virtual": true,
                        "visibility": "internal"
                    },
                    {
                        "baseFunctions": [
                            6931
                        ],
                        "body": {
                            "id": 6689,
                            "nodeType": "Block",
                            "src": "2145:643:23",
                            "statements": [
                                {
                                    "expression": {
                                        "components": [
                                            {
                                                "id": 6633,
                                                "name": "relayRequest",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6619,
                                                "src": "2156:12:23",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                    "typeString": "struct GsnTypes.RelayRequest calldata"
                                                }
                                            },
                                            {
                                                "id": 6634,
                                                "name": "signature",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6621,
                                                "src": "2170:9:23",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            },
                                            {
                                                "id": 6635,
                                                "name": "approvalData",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6623,
                                                "src": "2181:12:23",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            },
                                            {
                                                "id": 6636,
                                                "name": "maxPossibleGas",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6625,
                                                "src": "2195:14:23",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "id": 6637,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "2155:55:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_struct$_RelayRequest_$8491_calldata_ptr_$_t_bytes_calldata_ptr_$_t_bytes_calldata_ptr_$_t_uint256_$",
                                            "typeString": "tuple(struct GsnTypes.RelayRequest calldata,bytes calldata,bytes calldata,uint256)"
                                        }
                                    },
                                    "id": 6638,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2155:55:23"
                                },
                                {
                                    "condition": {
                                        "id": 6639,
                                        "name": "outOfGasPre",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6503,
                                        "src": "2224:11:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 6651,
                                    "nodeType": "IfStatement",
                                    "src": "2220:117:23",
                                    "trueBody": {
                                        "id": 6650,
                                        "nodeType": "Block",
                                        "src": "2237:100:23",
                                        "statements": [
                                            {
                                                "assignments": [
                                                    6641
                                                ],
                                                "declarations": [
                                                    {
                                                        "constant": false,
                                                        "id": 6641,
                                                        "mutability": "mutable",
                                                        "name": "i",
                                                        "nameLocation": "2259:1:23",
                                                        "nodeType": "VariableDeclaration",
                                                        "scope": 6650,
                                                        "src": "2251:9:23",
                                                        "stateVariable": false,
                                                        "storageLocation": "default",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        },
                                                        "typeName": {
                                                            "id": 6640,
                                                            "name": "uint256",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "2251:7:23",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        },
                                                        "visibility": "internal"
                                                    }
                                                ],
                                                "id": 6643,
                                                "initialValue": {
                                                    "hexValue": "30",
                                                    "id": 6642,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "2263:1:23",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_0_by_1",
                                                        "typeString": "int_const 0"
                                                    },
                                                    "value": "0"
                                                },
                                                "nodeType": "VariableDeclarationStatement",
                                                "src": "2251:13:23"
                                            },
                                            {
                                                "body": {
                                                    "id": 6648,
                                                    "nodeType": "Block",
                                                    "src": "2291:36:23",
                                                    "statements": [
                                                        {
                                                            "expression": {
                                                                "id": 6646,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "nodeType": "UnaryOperation",
                                                                "operator": "++",
                                                                "prefix": false,
                                                                "src": "2309:3:23",
                                                                "subExpression": {
                                                                    "id": 6645,
                                                                    "name": "i",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 6641,
                                                                    "src": "2309:1:23",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_uint256",
                                                                        "typeString": "uint256"
                                                                    }
                                                                },
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            },
                                                            "id": 6647,
                                                            "nodeType": "ExpressionStatement",
                                                            "src": "2309:3:23"
                                                        }
                                                    ]
                                                },
                                                "condition": {
                                                    "hexValue": "74727565",
                                                    "id": 6644,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "bool",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "2285:4:23",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    },
                                                    "value": "true"
                                                },
                                                "id": 6649,
                                                "nodeType": "WhileStatement",
                                                "src": "2278:49:23"
                                            }
                                        ]
                                    }
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 6654,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "UnaryOperation",
                                                "operator": "!",
                                                "prefix": true,
                                                "src": "2355:23:23",
                                                "subExpression": {
                                                    "id": 6653,
                                                    "name": "returnInvalidErrorCode",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 6499,
                                                    "src": "2356:22:23",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "696e76616c696420636f6465",
                                                "id": 6655,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "2380:14:23",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_8264af2715f4c1c57bdec9af30ed01e8198809e4e4467a12fd18de911785fd93",
                                                    "typeString": "literal_string \"invalid code\""
                                                },
                                                "value": "invalid code"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_8264af2715f4c1c57bdec9af30ed01e8198809e4e4467a12fd18de911785fd93",
                                                    "typeString": "literal_string \"invalid code\""
                                                }
                                            ],
                                            "id": 6652,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "2347:7:23",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 6656,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2347:48:23",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 6657,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2347:48:23"
                                },
                                {
                                    "condition": {
                                        "id": 6658,
                                        "name": "withdrawDuringPreRelayedCall",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6497,
                                        "src": "2410:28:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 6663,
                                    "nodeType": "IfStatement",
                                    "src": "2406:79:23",
                                    "trueBody": {
                                        "id": 6662,
                                        "nodeType": "Block",
                                        "src": "2440:45:23",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "arguments": [],
                                                    "expression": {
                                                        "argumentTypes": [],
                                                        "id": 6659,
                                                        "name": "withdrawAllBalance",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 6768,
                                                        "src": "2454:18:23",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_uint256_$",
                                                            "typeString": "function () returns (uint256)"
                                                        }
                                                    },
                                                    "id": 6660,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "2454:20:23",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "id": 6661,
                                                "nodeType": "ExpressionStatement",
                                                "src": "2454:20:23"
                                            }
                                        ]
                                    }
                                },
                                {
                                    "condition": {
                                        "id": 6664,
                                        "name": "revertPreRelayCall",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6505,
                                        "src": "2498:18:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 6670,
                                    "nodeType": "IfStatement",
                                    "src": "2494:92:23",
                                    "trueBody": {
                                        "id": 6669,
                                        "nodeType": "Block",
                                        "src": "2518:68:23",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "hexValue": "596f752061736b6564206d6520746f207265766572742c2072656d656d6265723f",
                                                            "id": 6666,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "string",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "2539:35:23",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_stringliteral_951bb8d072d9524fc3cf57cf7fb48f842befafc1060013c7ac7349b0991cb9ff",
                                                                "typeString": "literal_string \"You asked me to revert, remember?\""
                                                            },
                                                            "value": "You asked me to revert, remember?"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_stringliteral_951bb8d072d9524fc3cf57cf7fb48f842befafc1060013c7ac7349b0991cb9ff",
                                                                "typeString": "literal_string \"You asked me to revert, remember?\""
                                                            }
                                                        ],
                                                        "id": 6665,
                                                        "name": "revert",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [
                                                            4294967277,
                                                            4294967277
                                                        ],
                                                        "referencedDeclaration": 4294967277,
                                                        "src": "2532:6:23",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                                            "typeString": "function (string memory) pure"
                                                        }
                                                    },
                                                    "id": 6667,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "2532:43:23",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$__$",
                                                        "typeString": "tuple()"
                                                    }
                                                },
                                                "id": 6668,
                                                "nodeType": "ExpressionStatement",
                                                "src": "2532:43:23"
                                            }
                                        ]
                                    }
                                },
                                {
                                    "condition": {
                                        "commonType": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        },
                                        "id": 6678,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "id": 6671,
                                            "name": "revertPreRelayCallOnEvenBlocks",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6507,
                                            "src": "2599:30:23",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "&&",
                                        "rightExpression": {
                                            "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "id": 6677,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 6675,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "id": 6672,
                                                        "name": "block",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967292,
                                                        "src": "2633:5:23",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_block",
                                                            "typeString": "block"
                                                        }
                                                    },
                                                    "id": 6673,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "number",
                                                    "nodeType": "MemberAccess",
                                                    "src": "2633:12:23",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "%",
                                                "rightExpression": {
                                                    "hexValue": "32",
                                                    "id": 6674,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "2648:1:23",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_2_by_1",
                                                        "typeString": "int_const 2"
                                                    },
                                                    "value": "2"
                                                },
                                                "src": "2633:16:23",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "==",
                                            "rightExpression": {
                                                "hexValue": "30",
                                                "id": 6676,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "number",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "2653:1:23",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_rational_0_by_1",
                                                    "typeString": "int_const 0"
                                                },
                                                "value": "0"
                                            },
                                            "src": "2633:21:23",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "src": "2599:55:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 6684,
                                    "nodeType": "IfStatement",
                                    "src": "2595:144:23",
                                    "trueBody": {
                                        "id": 6683,
                                        "nodeType": "Block",
                                        "src": "2656:83:23",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "hexValue": "596f752061736b6564206d6520746f20726576657274206f6e206576656e20626c6f636b732c2072656d656d6265723f",
                                                            "id": 6680,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "string",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "2677:50:23",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_stringliteral_fe10bb9675995fc584335f79eeb07c8f88eea53ba6c579c1160a757d8480a569",
                                                                "typeString": "literal_string \"You asked me to revert on even blocks, remember?\""
                                                            },
                                                            "value": "You asked me to revert on even blocks, remember?"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_stringliteral_fe10bb9675995fc584335f79eeb07c8f88eea53ba6c579c1160a757d8480a569",
                                                                "typeString": "literal_string \"You asked me to revert on even blocks, remember?\""
                                                            }
                                                        ],
                                                        "id": 6679,
                                                        "name": "revert",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [
                                                            4294967277,
                                                            4294967277
                                                        ],
                                                        "referencedDeclaration": 4294967277,
                                                        "src": "2670:6:23",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                                            "typeString": "function (string memory) pure"
                                                        }
                                                    },
                                                    "id": 6681,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "2670:58:23",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$__$",
                                                        "typeString": "tuple()"
                                                    }
                                                },
                                                "id": 6682,
                                                "nodeType": "ExpressionStatement",
                                                "src": "2670:58:23"
                                            }
                                        ]
                                    }
                                },
                                {
                                    "expression": {
                                        "components": [
                                            {
                                                "hexValue": "",
                                                "id": 6685,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "2756:2:23",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                                    "typeString": "literal_string \"\""
                                                },
                                                "value": ""
                                            },
                                            {
                                                "id": 6686,
                                                "name": "trustRecipientRevert",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6829,
                                                "src": "2760:20:23",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            }
                                        ],
                                        "id": 6687,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "2755:26:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470_$_t_bool_$",
                                            "typeString": "tuple(literal_string \"\",bool)"
                                        }
                                    },
                                    "functionReturnParameters": 6632,
                                    "id": 6688,
                                    "nodeType": "Return",
                                    "src": "2748:33:23"
                                }
                            ]
                        },
                        "id": 6690,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "_preRelayedCall",
                        "nameLocation": "1908:15:23",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 6627,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "2103:8:23"
                        },
                        "parameters": {
                            "id": 6626,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6619,
                                    "mutability": "mutable",
                                    "name": "relayRequest",
                                    "nameLocation": "1964:12:23",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6690,
                                    "src": "1933:43:23",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                        "typeString": "struct GsnTypes.RelayRequest"
                                    },
                                    "typeName": {
                                        "id": 6618,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 6617,
                                            "name": "GsnTypes.RelayRequest",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 8491,
                                            "src": "1933:21:23"
                                        },
                                        "referencedDeclaration": 8491,
                                        "src": "1933:21:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_storage_ptr",
                                            "typeString": "struct GsnTypes.RelayRequest"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6621,
                                    "mutability": "mutable",
                                    "name": "signature",
                                    "nameLocation": "2001:9:23",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6690,
                                    "src": "1986:24:23",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 6620,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1986:5:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6623,
                                    "mutability": "mutable",
                                    "name": "approvalData",
                                    "nameLocation": "2035:12:23",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6690,
                                    "src": "2020:27:23",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 6622,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2020:5:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6625,
                                    "mutability": "mutable",
                                    "name": "maxPossibleGas",
                                    "nameLocation": "2065:14:23",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6690,
                                    "src": "2057:22:23",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 6624,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2057:7:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1923:162:23"
                        },
                        "returnParameters": {
                            "id": 6632,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6629,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6690,
                                    "src": "2125:12:23",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 6628,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2125:5:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6631,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6690,
                                    "src": "2139:4:23",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 6630,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2139:4:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2124:20:23"
                        },
                        "scope": 6866,
                        "src": "1899:889:23",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "baseFunctions": [
                            6955
                        ],
                        "body": {
                            "id": 6722,
                            "nodeType": "Block",
                            "src": "2992:256:23",
                            "statements": [
                                {
                                    "expression": {
                                        "components": [
                                            {
                                                "id": 6703,
                                                "name": "context",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6692,
                                                "src": "3003:7:23",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            },
                                            {
                                                "id": 6704,
                                                "name": "success",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6694,
                                                "src": "3012:7:23",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "id": 6705,
                                                "name": "gasUseWithoutPost",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6696,
                                                "src": "3021:17:23",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            {
                                                "id": 6706,
                                                "name": "relayData",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6699,
                                                "src": "3040:9:23",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                    "typeString": "struct GsnTypes.RelayData calldata"
                                                }
                                            }
                                        ],
                                        "id": 6707,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "3002:48:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_bytes_calldata_ptr_$_t_bool_$_t_uint256_$_t_struct$_RelayData_$8484_calldata_ptr_$",
                                            "typeString": "tuple(bytes calldata,bool,uint256,struct GsnTypes.RelayData calldata)"
                                        }
                                    },
                                    "id": 6708,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3002:48:23"
                                },
                                {
                                    "condition": {
                                        "id": 6709,
                                        "name": "withdrawDuringPostRelayedCall",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6495,
                                        "src": "3064:29:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 6714,
                                    "nodeType": "IfStatement",
                                    "src": "3060:80:23",
                                    "trueBody": {
                                        "id": 6713,
                                        "nodeType": "Block",
                                        "src": "3095:45:23",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "arguments": [],
                                                    "expression": {
                                                        "argumentTypes": [],
                                                        "id": 6710,
                                                        "name": "withdrawAllBalance",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 6768,
                                                        "src": "3109:18:23",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_uint256_$",
                                                            "typeString": "function () returns (uint256)"
                                                        }
                                                    },
                                                    "id": 6711,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "3109:20:23",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "id": 6712,
                                                "nodeType": "ExpressionStatement",
                                                "src": "3109:20:23"
                                            }
                                        ]
                                    }
                                },
                                {
                                    "condition": {
                                        "id": 6715,
                                        "name": "revertPostRelayCall",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6501,
                                        "src": "3153:19:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 6721,
                                    "nodeType": "IfStatement",
                                    "src": "3149:93:23",
                                    "trueBody": {
                                        "id": 6720,
                                        "nodeType": "Block",
                                        "src": "3174:68:23",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "hexValue": "596f752061736b6564206d6520746f207265766572742c2072656d656d6265723f",
                                                            "id": 6717,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "string",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "3195:35:23",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_stringliteral_951bb8d072d9524fc3cf57cf7fb48f842befafc1060013c7ac7349b0991cb9ff",
                                                                "typeString": "literal_string \"You asked me to revert, remember?\""
                                                            },
                                                            "value": "You asked me to revert, remember?"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_stringliteral_951bb8d072d9524fc3cf57cf7fb48f842befafc1060013c7ac7349b0991cb9ff",
                                                                "typeString": "literal_string \"You asked me to revert, remember?\""
                                                            }
                                                        ],
                                                        "id": 6716,
                                                        "name": "revert",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [
                                                            4294967277,
                                                            4294967277
                                                        ],
                                                        "referencedDeclaration": 4294967277,
                                                        "src": "3188:6:23",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                                            "typeString": "function (string memory) pure"
                                                        }
                                                    },
                                                    "id": 6718,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "3188:43:23",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$__$",
                                                        "typeString": "tuple()"
                                                    }
                                                },
                                                "id": 6719,
                                                "nodeType": "ExpressionStatement",
                                                "src": "3188:43:23"
                                            }
                                        ]
                                    }
                                }
                            ]
                        },
                        "id": 6723,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "_postRelayedCall",
                        "nameLocation": "2803:16:23",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 6701,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "2979:8:23"
                        },
                        "parameters": {
                            "id": 6700,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6692,
                                    "mutability": "mutable",
                                    "name": "context",
                                    "nameLocation": "2844:7:23",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6723,
                                    "src": "2829:22:23",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 6691,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2829:5:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6694,
                                    "mutability": "mutable",
                                    "name": "success",
                                    "nameLocation": "2866:7:23",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6723,
                                    "src": "2861:12:23",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 6693,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2861:4:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6696,
                                    "mutability": "mutable",
                                    "name": "gasUseWithoutPost",
                                    "nameLocation": "2891:17:23",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6723,
                                    "src": "2883:25:23",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 6695,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2883:7:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6699,
                                    "mutability": "mutable",
                                    "name": "relayData",
                                    "nameLocation": "2946:9:23",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6723,
                                    "src": "2918:37:23",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                        "typeString": "struct GsnTypes.RelayData"
                                    },
                                    "typeName": {
                                        "id": 6698,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 6697,
                                            "name": "GsnTypes.RelayData",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 8484,
                                            "src": "2918:18:23"
                                        },
                                        "referencedDeclaration": 8484,
                                        "src": "2918:18:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayData_$8484_storage_ptr",
                                            "typeString": "struct GsnTypes.RelayData"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2819:142:23"
                        },
                        "returnParameters": {
                            "id": 6702,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "2992:0:23"
                        },
                        "scope": 6866,
                        "src": "2794:454:23",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 6767,
                            "nodeType": "Block",
                            "src": "3359:231:23",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                "id": 6738,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "arguments": [
                                                        {
                                                            "id": 6732,
                                                            "name": "relayHub",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 23,
                                                            "src": "3385:8:23",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_contract$_IRelayHub_$5896",
                                                                "typeString": "contract IRelayHub"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_contract$_IRelayHub_$5896",
                                                                "typeString": "contract IRelayHub"
                                                            }
                                                        ],
                                                        "id": 6731,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "ElementaryTypeNameExpression",
                                                        "src": "3377:7:23",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_address_$",
                                                            "typeString": "type(address)"
                                                        },
                                                        "typeName": {
                                                            "id": 6730,
                                                            "name": "address",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "3377:7:23",
                                                            "typeDescriptions": {}
                                                        }
                                                    },
                                                    "id": 6733,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "typeConversion",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "3377:17:23",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "!=",
                                                "rightExpression": {
                                                    "arguments": [
                                                        {
                                                            "hexValue": "30",
                                                            "id": 6736,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "number",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "3406:1:23",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_rational_0_by_1",
                                                                "typeString": "int_const 0"
                                                            },
                                                            "value": "0"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_rational_0_by_1",
                                                                "typeString": "int_const 0"
                                                            }
                                                        ],
                                                        "id": 6735,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "ElementaryTypeNameExpression",
                                                        "src": "3398:7:23",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_address_$",
                                                            "typeString": "type(address)"
                                                        },
                                                        "typeName": {
                                                            "id": 6734,
                                                            "name": "address",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "3398:7:23",
                                                            "typeDescriptions": {}
                                                        }
                                                    },
                                                    "id": 6737,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "typeConversion",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "3398:10:23",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "src": "3377:31:23",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "72656c6179206875622061646472657373206e6f7420736574",
                                                "id": 6739,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "3410:27:23",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_2e4bcc216326d2d371e2433ec8e1af9c54827701515af7cd10f9acc79120d313",
                                                    "typeString": "literal_string \"relay hub address not set\""
                                                },
                                                "value": "relay hub address not set"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_2e4bcc216326d2d371e2433ec8e1af9c54827701515af7cd10f9acc79120d313",
                                                    "typeString": "literal_string \"relay hub address not set\""
                                                }
                                            ],
                                            "id": 6729,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "3369:7:23",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 6740,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3369:69:23",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 6741,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3369:69:23"
                                },
                                {
                                    "assignments": [
                                        6743
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 6743,
                                            "mutability": "mutable",
                                            "name": "balance",
                                            "nameLocation": "3456:7:23",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 6767,
                                            "src": "3448:15:23",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 6742,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "3448:7:23",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 6751,
                                    "initialValue": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "id": 6748,
                                                        "name": "this",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967268,
                                                        "src": "3493:4:23",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_contract$_TestPaymasterConfigurableMisbehavior_$6866",
                                                            "typeString": "contract TestPaymasterConfigurableMisbehavior"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_contract$_TestPaymasterConfigurableMisbehavior_$6866",
                                                            "typeString": "contract TestPaymasterConfigurableMisbehavior"
                                                        }
                                                    ],
                                                    "id": 6747,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "ElementaryTypeNameExpression",
                                                    "src": "3485:7:23",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_address_$",
                                                        "typeString": "type(address)"
                                                    },
                                                    "typeName": {
                                                        "id": 6746,
                                                        "name": "address",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "3485:7:23",
                                                        "typeDescriptions": {}
                                                    }
                                                },
                                                "id": 6749,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "typeConversion",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "3485:13:23",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "expression": {
                                                "id": 6744,
                                                "name": "relayHub",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 23,
                                                "src": "3466:8:23",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_IRelayHub_$5896",
                                                    "typeString": "contract IRelayHub"
                                                }
                                            },
                                            "id": 6745,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "balanceOf",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 5826,
                                            "src": "3466:18:23",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                                                "typeString": "function (address) view external returns (uint256)"
                                            }
                                        },
                                        "id": 6750,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3466:33:23",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "3448:51:23"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "arguments": [
                                                            {
                                                                "id": 6759,
                                                                "name": "this",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 4294967268,
                                                                "src": "3543:4:23",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_contract$_TestPaymasterConfigurableMisbehavior_$6866",
                                                                    "typeString": "contract TestPaymasterConfigurableMisbehavior"
                                                                }
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_contract$_TestPaymasterConfigurableMisbehavior_$6866",
                                                                    "typeString": "contract TestPaymasterConfigurableMisbehavior"
                                                                }
                                                            ],
                                                            "id": 6758,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "nodeType": "ElementaryTypeNameExpression",
                                                            "src": "3535:7:23",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_type$_t_address_$",
                                                                "typeString": "type(address)"
                                                            },
                                                            "typeName": {
                                                                "id": 6757,
                                                                "name": "address",
                                                                "nodeType": "ElementaryTypeName",
                                                                "src": "3535:7:23",
                                                                "typeDescriptions": {}
                                                            }
                                                        },
                                                        "id": 6760,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "typeConversion",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "3535:13:23",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    ],
                                                    "id": 6756,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "ElementaryTypeNameExpression",
                                                    "src": "3527:8:23",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_address_payable_$",
                                                        "typeString": "type(address payable)"
                                                    },
                                                    "typeName": {
                                                        "id": 6755,
                                                        "name": "address",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "3527:8:23",
                                                        "stateMutability": "payable",
                                                        "typeDescriptions": {}
                                                    }
                                                },
                                                "id": 6761,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "typeConversion",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "3527:22:23",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            },
                                            {
                                                "id": 6762,
                                                "name": "balance",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6743,
                                                "src": "3551:7:23",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "expression": {
                                                "id": 6752,
                                                "name": "relayHub",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 23,
                                                "src": "3509:8:23",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_IRelayHub_$5896",
                                                    "typeString": "contract IRelayHub"
                                                }
                                            },
                                            "id": 6754,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "withdraw",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 5695,
                                            "src": "3509:17:23",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_external_nonpayable$_t_address_payable_$_t_uint256_$returns$__$",
                                                "typeString": "function (address payable,uint256) external"
                                            }
                                        },
                                        "id": 6763,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3509:50:23",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 6764,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3509:50:23"
                                },
                                {
                                    "expression": {
                                        "id": 6765,
                                        "name": "balance",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6743,
                                        "src": "3576:7:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "functionReturnParameters": 6728,
                                    "id": 6766,
                                    "nodeType": "Return",
                                    "src": "3569:14:23"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 6724,
                            "nodeType": "StructuredDocumentation",
                            "src": "3254:45:23",
                            "text": "leaving withdrawal public and unprotected"
                        },
                        "functionSelector": "3b17eadc",
                        "id": 6768,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "withdrawAllBalance",
                        "nameLocation": "3313:18:23",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6725,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "3331:2:23"
                        },
                        "returnParameters": {
                            "id": 6728,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6727,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6768,
                                    "src": "3350:7:23",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 6726,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3350:7:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3349:9:23"
                        },
                        "scope": 6866,
                        "src": "3304:286:23",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "constant": false,
                        "id": 6774,
                        "mutability": "mutable",
                        "name": "limits",
                        "nameLocation": "3632:6:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 6866,
                        "src": "3596:72:23",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_storage",
                            "typeString": "struct IPaymaster.GasAndDataLimits"
                        },
                        "typeName": {
                            "id": 6770,
                            "nodeType": "UserDefinedTypeName",
                            "pathNode": {
                                "id": 6769,
                                "name": "IPaymaster.GasAndDataLimits",
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 5391,
                                "src": "3596:27:23"
                            },
                            "referencedDeclaration": 5391,
                            "src": "3596:27:23",
                            "typeDescriptions": {
                                "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_storage_ptr",
                                "typeString": "struct IPaymaster.GasAndDataLimits"
                            }
                        },
                        "value": {
                            "arguments": [],
                            "expression": {
                                "argumentTypes": [],
                                "expression": {
                                    "id": 6771,
                                    "name": "super",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4294967271,
                                    "src": "3641:5:23",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_super$_TestPaymasterConfigurableMisbehavior_$6866_$",
                                        "typeString": "type(contract super TestPaymasterConfigurableMisbehavior)"
                                    }
                                },
                                "id": 6772,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "getGasAndDataLimits",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 103,
                                "src": "3641:25:23",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$__$returns$_t_struct$_GasAndDataLimits_$5391_memory_ptr_$",
                                    "typeString": "function () view returns (struct IPaymaster.GasAndDataLimits memory)"
                                }
                            },
                            "id": 6773,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3641:27:23",
                            "tryCall": false,
                            "typeDescriptions": {
                                "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_memory_ptr",
                                "typeString": "struct IPaymaster.GasAndDataLimits memory"
                            }
                        },
                        "visibility": "private"
                    },
                    {
                        "baseFunctions": [
                            103
                        ],
                        "body": {
                            "id": 6826,
                            "nodeType": "Block",
                            "src": "3780:500:23",
                            "statements": [
                                {
                                    "condition": {
                                        "id": 6781,
                                        "name": "expensiveGasLimits",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6511,
                                        "src": "3795:18:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 6806,
                                    "nodeType": "IfStatement",
                                    "src": "3791:234:23",
                                    "trueBody": {
                                        "id": 6805,
                                        "nodeType": "Block",
                                        "src": "3815:210:23",
                                        "statements": [
                                            {
                                                "assignments": [
                                                    6783
                                                ],
                                                "declarations": [
                                                    {
                                                        "constant": false,
                                                        "id": 6783,
                                                        "mutability": "mutable",
                                                        "name": "sum",
                                                        "nameLocation": "3837:3:23",
                                                        "nodeType": "VariableDeclaration",
                                                        "scope": 6805,
                                                        "src": "3829:11:23",
                                                        "stateVariable": false,
                                                        "storageLocation": "default",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        },
                                                        "typeName": {
                                                            "id": 6782,
                                                            "name": "uint256",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "3829:7:23",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        },
                                                        "visibility": "internal"
                                                    }
                                                ],
                                                "id": 6784,
                                                "nodeType": "VariableDeclarationStatement",
                                                "src": "3829:11:23"
                                            },
                                            {
                                                "body": {
                                                    "id": 6803,
                                                    "nodeType": "Block",
                                                    "src": "3946:69:23",
                                                    "statements": [
                                                        {
                                                            "expression": {
                                                                "id": 6801,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "leftHandSide": {
                                                                    "id": 6796,
                                                                    "name": "sum",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 6783,
                                                                    "src": "3964:3:23",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_uint256",
                                                                        "typeString": "uint256"
                                                                    }
                                                                },
                                                                "nodeType": "Assignment",
                                                                "operator": "=",
                                                                "rightHandSide": {
                                                                    "commonType": {
                                                                        "typeIdentifier": "t_uint256",
                                                                        "typeString": "uint256"
                                                                    },
                                                                    "id": 6800,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "leftExpression": {
                                                                        "id": 6797,
                                                                        "name": "sum",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 6783,
                                                                        "src": "3971:3:23",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_uint256",
                                                                            "typeString": "uint256"
                                                                        }
                                                                    },
                                                                    "nodeType": "BinaryOperation",
                                                                    "operator": "+",
                                                                    "rightExpression": {
                                                                        "expression": {
                                                                            "id": 6798,
                                                                            "name": "limits",
                                                                            "nodeType": "Identifier",
                                                                            "overloadedDeclarations": [],
                                                                            "referencedDeclaration": 6774,
                                                                            "src": "3977:6:23",
                                                                            "typeDescriptions": {
                                                                                "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_storage",
                                                                                "typeString": "struct IPaymaster.GasAndDataLimits storage ref"
                                                                            }
                                                                        },
                                                                        "id": 6799,
                                                                        "isConstant": false,
                                                                        "isLValue": true,
                                                                        "isPure": false,
                                                                        "lValueRequested": false,
                                                                        "memberName": "acceptanceBudget",
                                                                        "nodeType": "MemberAccess",
                                                                        "referencedDeclaration": 5384,
                                                                        "src": "3977:23:23",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_uint256",
                                                                            "typeString": "uint256"
                                                                        }
                                                                    },
                                                                    "src": "3971:29:23",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_uint256",
                                                                        "typeString": "uint256"
                                                                    }
                                                                },
                                                                "src": "3964:36:23",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            },
                                                            "id": 6802,
                                                            "nodeType": "ExpressionStatement",
                                                            "src": "3964:36:23"
                                                        }
                                                    ]
                                                },
                                                "condition": {
                                                    "commonType": {
                                                        "typeIdentifier": "t_int256",
                                                        "typeString": "int256"
                                                    },
                                                    "id": 6791,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "id": 6789,
                                                        "name": "i",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 6786,
                                                        "src": "3927:1:23",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_int256",
                                                            "typeString": "int256"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "<",
                                                    "rightExpression": {
                                                        "hexValue": "313030303030",
                                                        "id": 6790,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "number",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "3929:6:23",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_rational_100000_by_1",
                                                            "typeString": "int_const 100000"
                                                        },
                                                        "value": "100000"
                                                    },
                                                    "src": "3927:8:23",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "id": 6804,
                                                "initializationExpression": {
                                                    "assignments": [
                                                        6786
                                                    ],
                                                    "declarations": [
                                                        {
                                                            "constant": false,
                                                            "id": 6786,
                                                            "mutability": "mutable",
                                                            "name": "i",
                                                            "nameLocation": "3922:1:23",
                                                            "nodeType": "VariableDeclaration",
                                                            "scope": 6804,
                                                            "src": "3918:5:23",
                                                            "stateVariable": false,
                                                            "storageLocation": "default",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_int256",
                                                                "typeString": "int256"
                                                            },
                                                            "typeName": {
                                                                "id": 6785,
                                                                "name": "int",
                                                                "nodeType": "ElementaryTypeName",
                                                                "src": "3918:3:23",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_int256",
                                                                    "typeString": "int256"
                                                                }
                                                            },
                                                            "visibility": "internal"
                                                        }
                                                    ],
                                                    "id": 6788,
                                                    "initialValue": {
                                                        "hexValue": "30",
                                                        "id": 6787,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "number",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "3924:1:23",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_rational_0_by_1",
                                                            "typeString": "int_const 0"
                                                        },
                                                        "value": "0"
                                                    },
                                                    "nodeType": "VariableDeclarationStatement",
                                                    "src": "3918:7:23"
                                                },
                                                "loopExpression": {
                                                    "expression": {
                                                        "id": 6794,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "leftHandSide": {
                                                            "id": 6792,
                                                            "name": "i",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 6786,
                                                            "src": "3937:1:23",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_int256",
                                                                "typeString": "int256"
                                                            }
                                                        },
                                                        "nodeType": "Assignment",
                                                        "operator": "+=",
                                                        "rightHandSide": {
                                                            "hexValue": "373030",
                                                            "id": 6793,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "number",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "3940:3:23",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_rational_700_by_1",
                                                                "typeString": "int_const 700"
                                                            },
                                                            "value": "700"
                                                        },
                                                        "src": "3937:6:23",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_int256",
                                                            "typeString": "int256"
                                                        }
                                                    },
                                                    "id": 6795,
                                                    "nodeType": "ExpressionStatement",
                                                    "src": "3937:6:23"
                                                },
                                                "nodeType": "ForStatement",
                                                "src": "3912:103:23"
                                            }
                                        ]
                                    }
                                },
                                {
                                    "condition": {
                                        "id": 6807,
                                        "name": "greedyAcceptanceBudget",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6509,
                                        "src": "4038:22:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 6823,
                                    "nodeType": "IfStatement",
                                    "src": "4034:217:23",
                                    "trueBody": {
                                        "id": 6822,
                                        "nodeType": "Block",
                                        "src": "4062:189:23",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "commonType": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            },
                                                            "id": 6813,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "leftExpression": {
                                                                "expression": {
                                                                    "id": 6810,
                                                                    "name": "limits",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 6774,
                                                                    "src": "4111:6:23",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_storage",
                                                                        "typeString": "struct IPaymaster.GasAndDataLimits storage ref"
                                                                    }
                                                                },
                                                                "id": 6811,
                                                                "isConstant": false,
                                                                "isLValue": true,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "acceptanceBudget",
                                                                "nodeType": "MemberAccess",
                                                                "referencedDeclaration": 5384,
                                                                "src": "4111:23:23",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            },
                                                            "nodeType": "BinaryOperation",
                                                            "operator": "*",
                                                            "rightExpression": {
                                                                "hexValue": "39",
                                                                "id": 6812,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "kind": "number",
                                                                "lValueRequested": false,
                                                                "nodeType": "Literal",
                                                                "src": "4137:1:23",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_rational_9_by_1",
                                                                    "typeString": "int_const 9"
                                                                },
                                                                "value": "9"
                                                            },
                                                            "src": "4111:27:23",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        },
                                                        {
                                                            "expression": {
                                                                "id": 6814,
                                                                "name": "limits",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 6774,
                                                                "src": "4140:6:23",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_storage",
                                                                    "typeString": "struct IPaymaster.GasAndDataLimits storage ref"
                                                                }
                                                            },
                                                            "id": 6815,
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "preRelayedCallGasLimit",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 5386,
                                                            "src": "4140:29:23",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        },
                                                        {
                                                            "expression": {
                                                                "id": 6816,
                                                                "name": "limits",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 6774,
                                                                "src": "4171:6:23",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_storage",
                                                                    "typeString": "struct IPaymaster.GasAndDataLimits storage ref"
                                                                }
                                                            },
                                                            "id": 6817,
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "postRelayedCallGasLimit",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 5388,
                                                            "src": "4171:30:23",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        },
                                                        {
                                                            "expression": {
                                                                "id": 6818,
                                                                "name": "limits",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 6774,
                                                                "src": "4215:6:23",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_storage",
                                                                    "typeString": "struct IPaymaster.GasAndDataLimits storage ref"
                                                                }
                                                            },
                                                            "id": 6819,
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "calldataSizeLimit",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 5390,
                                                            "src": "4215:24:23",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        ],
                                                        "expression": {
                                                            "id": 6808,
                                                            "name": "IPaymaster",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 5447,
                                                            "src": "4083:10:23",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_type$_t_contract$_IPaymaster_$5447_$",
                                                                "typeString": "type(contract IPaymaster)"
                                                            }
                                                        },
                                                        "id": 6809,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "GasAndDataLimits",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 5391,
                                                        "src": "4083:27:23",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_struct$_GasAndDataLimits_$5391_storage_ptr_$",
                                                            "typeString": "type(struct IPaymaster.GasAndDataLimits storage pointer)"
                                                        }
                                                    },
                                                    "id": 6820,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "structConstructorCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "4083:157:23",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_memory_ptr",
                                                        "typeString": "struct IPaymaster.GasAndDataLimits memory"
                                                    }
                                                },
                                                "functionReturnParameters": 6780,
                                                "id": 6821,
                                                "nodeType": "Return",
                                                "src": "4076:164:23"
                                            }
                                        ]
                                    }
                                },
                                {
                                    "expression": {
                                        "id": 6824,
                                        "name": "limits",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6774,
                                        "src": "4267:6:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_storage",
                                            "typeString": "struct IPaymaster.GasAndDataLimits storage ref"
                                        }
                                    },
                                    "functionReturnParameters": 6780,
                                    "id": 6825,
                                    "nodeType": "Return",
                                    "src": "4260:13:23"
                                }
                            ]
                        },
                        "functionSelector": "b039a88f",
                        "id": 6827,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getGasAndDataLimits",
                        "nameLocation": "3684:19:23",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 6776,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "3717:8:23"
                        },
                        "parameters": {
                            "id": 6775,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "3703:2:23"
                        },
                        "returnParameters": {
                            "id": 6780,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6779,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6827,
                                    "src": "3744:34:23",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_memory_ptr",
                                        "typeString": "struct IPaymaster.GasAndDataLimits"
                                    },
                                    "typeName": {
                                        "id": 6778,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 6777,
                                            "name": "IPaymaster.GasAndDataLimits",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 5391,
                                            "src": "3744:27:23"
                                        },
                                        "referencedDeclaration": 5391,
                                        "src": "3744:27:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_storage_ptr",
                                            "typeString": "struct IPaymaster.GasAndDataLimits"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3743:36:23"
                        },
                        "scope": 6866,
                        "src": "3675:605:23",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "constant": false,
                        "id": 6829,
                        "mutability": "mutable",
                        "name": "trustRecipientRevert",
                        "nameLocation": "4299:20:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 6866,
                        "src": "4286:33:23",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                        },
                        "typeName": {
                            "id": 6828,
                            "name": "bool",
                            "nodeType": "ElementaryTypeName",
                            "src": "4286:4:23",
                            "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                            }
                        },
                        "visibility": "private"
                    },
                    {
                        "body": {
                            "id": 6849,
                            "nodeType": "Block",
                            "src": "4446:204:23",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 6847,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 6838,
                                            "name": "limits",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6774,
                                            "src": "4456:6:23",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_storage",
                                                "typeString": "struct IPaymaster.GasAndDataLimits storage ref"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "arguments": [
                                                {
                                                    "id": 6841,
                                                    "name": "acceptanceBudget",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 6831,
                                                    "src": "4506:16:23",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                {
                                                    "id": 6842,
                                                    "name": "preRelayedCallGasLimit",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 6833,
                                                    "src": "4536:22:23",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                {
                                                    "id": 6843,
                                                    "name": "postRelayedCallGasLimit",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 6835,
                                                    "src": "4572:23:23",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                {
                                                    "expression": {
                                                        "id": 6844,
                                                        "name": "limits",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 6774,
                                                        "src": "4609:6:23",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_storage",
                                                            "typeString": "struct IPaymaster.GasAndDataLimits storage ref"
                                                        }
                                                    },
                                                    "id": 6845,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "calldataSizeLimit",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 5390,
                                                    "src": "4609:24:23",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                ],
                                                "expression": {
                                                    "id": 6839,
                                                    "name": "IPaymaster",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 5447,
                                                    "src": "4465:10:23",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_contract$_IPaymaster_$5447_$",
                                                        "typeString": "type(contract IPaymaster)"
                                                    }
                                                },
                                                "id": 6840,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "GasAndDataLimits",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 5391,
                                                "src": "4465:27:23",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_struct$_GasAndDataLimits_$5391_storage_ptr_$",
                                                    "typeString": "type(struct IPaymaster.GasAndDataLimits storage pointer)"
                                                }
                                            },
                                            "id": 6846,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "structConstructorCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "4465:178:23",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_memory_ptr",
                                                "typeString": "struct IPaymaster.GasAndDataLimits memory"
                                            }
                                        },
                                        "src": "4456:187:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_storage",
                                            "typeString": "struct IPaymaster.GasAndDataLimits storage ref"
                                        }
                                    },
                                    "id": 6848,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4456:187:23"
                                }
                            ]
                        },
                        "functionSelector": "d721baa5",
                        "id": 6850,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "setGasLimits",
                        "nameLocation": "4335:12:23",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6836,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6831,
                                    "mutability": "mutable",
                                    "name": "acceptanceBudget",
                                    "nameLocation": "4356:16:23",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6850,
                                    "src": "4348:24:23",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 6830,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4348:7:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6833,
                                    "mutability": "mutable",
                                    "name": "preRelayedCallGasLimit",
                                    "nameLocation": "4382:22:23",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6850,
                                    "src": "4374:30:23",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 6832,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4374:7:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6835,
                                    "mutability": "mutable",
                                    "name": "postRelayedCallGasLimit",
                                    "nameLocation": "4414:23:23",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6850,
                                    "src": "4406:31:23",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 6834,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4406:7:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4347:91:23"
                        },
                        "returnParameters": {
                            "id": 6837,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "4446:0:23"
                        },
                        "scope": 6866,
                        "src": "4326:324:23",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "body": {
                            "id": 6859,
                            "nodeType": "Block",
                            "src": "4705:42:23",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 6857,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 6855,
                                            "name": "trustRecipientRevert",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6829,
                                            "src": "4715:20:23",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 6856,
                                            "name": "on",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6852,
                                            "src": "4738:2:23",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "src": "4715:25:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 6858,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4715:25:23"
                                }
                            ]
                        },
                        "functionSelector": "c82e8ad4",
                        "id": 6860,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "setTrustRecipientRevert",
                        "nameLocation": "4665:23:23",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6853,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6852,
                                    "mutability": "mutable",
                                    "name": "on",
                                    "nameLocation": "4694:2:23",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6860,
                                    "src": "4689:7:23",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 6851,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4689:4:23",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4688:9:23"
                        },
                        "returnParameters": {
                            "id": 6854,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "4705:0:23"
                        },
                        "scope": 6866,
                        "src": "4656:91:23",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            278
                        ],
                        "body": {
                            "id": 6864,
                            "nodeType": "Block",
                            "src": "4838:2:23",
                            "statements": []
                        },
                        "id": 6865,
                        "implemented": true,
                        "kind": "receive",
                        "modifiers": [],
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 6862,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "4821:8:23"
                        },
                        "parameters": {
                            "id": 6861,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "4809:2:23"
                        },
                        "returnParameters": {
                            "id": 6863,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "4838:0:23"
                        },
                        "scope": 6866,
                        "src": "4802:38:23",
                        "stateMutability": "payable",
                        "virtual": false,
                        "visibility": "external"
                    }
                ],
                "scope": 6867,
                "src": "136:4706:23",
                "usedErrors": []
            }
        ],
        "src": "0:4842:23"
    },
    "compiler": {
        "name": "solc",
        "version": "0.8.7+commit.e28d00a7.Emscripten.clang"
    },
    "networks": {},
    "schemaVersion": "3.1.0",
    "updatedAt": "2023-03-16T16:54:15.217Z",
    "devdoc": {
        "kind": "dev",
        "methods": {
            "getGasAndDataLimits()": {
                "returns": {
                    "_0": "An instance of the `GasAndDataLimits` struct ##### `acceptanceBudget` If the transactions consumes more than `acceptanceBudget` this Paymaster will be charged for gas no matter what. Transaction that gets rejected after consuming more than `acceptanceBudget` gas is on this Paymaster's expense. Should be set to an amount gas this Paymaster expects to spend deciding whether to accept or reject a request. This includes gas consumed by calculations in the `preRelayedCall`, `Forwarder` and the recipient contract. :warning: **Warning** :warning: As long this value is above `preRelayedCallGasLimit` (see defaults in `BasePaymaster`), the Paymaster is guaranteed it will never pay for rejected transactions. If this value is below `preRelayedCallGasLimit`, it might might make Paymaster open to a \"griefing\" attack. The relayers should prefer lower `acceptanceBudget`, as it improves their chances of being compensated. From a Relay's point of view, this is the highest gas value a bad Paymaster may cost the relay, since the paymaster will pay anything above that value regardless of whether the transaction succeeds or reverts. Specifying value too high might make the call rejected by relayers (see `maxAcceptanceBudget` in server config). ##### `preRelayedCallGasLimit` The max gas usage of preRelayedCall. Any revert of the `preRelayedCall` is a request rejection by the paymaster. As long as `acceptanceBudget` is above `preRelayedCallGasLimit`, any such revert is not payed by the paymaster. ##### `postRelayedCallGasLimit` The max gas usage of postRelayedCall. The Paymaster is not charged for the maximum, only for actually used gas. Note that an OOG will revert the inner transaction, but the paymaster will be charged for it anyway."
                }
            },
            "getRelayHub()": {
                "returns": {
                    "_0": "The address of the `RelayHub` that is trusted by this Paymaster to execute the requests."
                }
            },
            "getTrustedForwarder()": {
                "returns": {
                    "_0": "The address of the `Forwarder` that is trusted by this Paymaster to execute the requests."
                }
            },
            "owner()": {
                "details": "Returns the address of the current owner."
            },
            "postRelayedCall(bytes,bool,uint256,(uint256,uint256,uint256,address,address,address,bytes,uint256))": {
                "params": {
                    "context": "The call context, as returned by the preRelayedCall",
                    "gasUseWithoutPost": "The actual amount of gas used by the entire transaction, EXCEPT        the gas used by the postRelayedCall itself.",
                    "relayData": "The relay params of the request. can be used by relayHub.calculateCharge()",
                    "success": "`true` if the relayed call succeeded, false if it reverted"
                }
            },
            "preRelayedCall(((address,address,uint256,uint256,uint256,bytes,uint256),(uint256,uint256,uint256,address,address,address,bytes,uint256)),bytes,bytes,uint256)": {
                "params": {
                    "approvalData": "- extra dapp-specific data (e.g. signature from trusted party)",
                    "maxPossibleGas": "- based on values returned from `getGasAndDataLimits` the RelayHub will calculate the maximum possible amount of gas the user may be charged for. In order to convert this value to wei, the Paymaster has to call \"relayHub.calculateCharge()\"",
                    "relayRequest": "- the full relay request structure",
                    "signature": "- user's EIP712-compatible signature of the `relayRequest`. Note that in most cases the paymaster shouldn't try use it at all. It is always checked by the forwarder immediately after preRelayedCall returns."
                },
                "returns": {
                    "_0": "A byte array to be passed to postRelayedCall. Can contain any data needed by this Paymaster in any form or be empty if no extra data is needed.",
                    "_1": "The flag that allows a Paymaster to \"delegate\" the rejection to the recipient code. It also means the Paymaster trust the recipient to reject fast: both preRelayedCall, forwarder check and recipient checks must fit into the GasLimits.acceptanceBudget, otherwise the TX is paid by the Paymaster. `true` if the Paymaster wants to reject the TX if the recipient reverts. `false` if the Paymaster wants rejects by the recipient to be completed on chain and paid by the Paymaster."
                }
            },
            "renounceOwnership()": {
                "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."
            },
            "supportsInterface(bytes4)": {
                "details": "Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas."
            },
            "transferOwnership(address)": {
                "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
            },
            "versionPaymaster()": {
                "returns": {
                    "_0": "version The SemVer string of this Paymaster's version."
                }
            },
            "withdrawRelayHubDepositTo(uint256,address)": {
                "params": {
                    "amount": "The amount to be subtracted from the sender.",
                    "target": "The target to which the amount will be transferred."
                }
            }
        },
        "version": 1
    },
    "userdoc": {
        "kind": "user",
        "methods": {
            "getGasAndDataLimits()": {
                "notice": "Return the Gas Limits for Paymaster's functions and maximum msg.data length values for this Paymaster. This function allows different paymasters to have different properties without changes to the RelayHub."
            },
            "getTrustedForwarder()": {
                "notice": ":warning: **Warning** :warning: using incorrect Forwarder may cause the Paymaster to agreeing to pay for invalid transactions."
            },
            "postRelayedCall(bytes,bool,uint256,(uint256,uint256,uint256,address,address,address,bytes,uint256))": {
                "notice": "This method is called after the actual relayed function call. It may be used to record the transaction (e.g. charge the caller by some contract logic) for this call. Revert in this functions causes a revert of the client's relayed call (and preRelayedCall(), but the Paymaster is still committed to pay the relay for the entire transaction."
            },
            "preRelayedCall(((address,address,uint256,uint256,uint256,bytes,uint256),(uint256,uint256,uint256,address,address,address,bytes,uint256)),bytes,bytes,uint256)": {
                "notice": "Called by the Relay in view mode and later by the `RelayHub` on-chain to validate that the Paymaster agrees to pay for this call. The request is considered to be rejected by the Paymaster in one of the following conditions:  - `preRelayedCall()` method reverts  - the `Forwarder` reverts because of nonce or signature error  - the `Paymaster` returned `rejectOnRecipientRevert: true` and the recipient contract reverted    (and all that did not consume more than `acceptanceBudget` gas). In any of the above cases, all Paymaster calls and the recipient call are reverted. In any other case the Paymaster will pay for the gas cost of the transaction. Note that even if `postRelayedCall` is reverted the Paymaster will be charged."
            },
            "setRelayHub(address)": {
                "notice": "The owner of the Paymaster can change the instance of the RelayHub this Paymaster works with. :warning: **Warning** :warning: The deposit on the previous RelayHub must be withdrawn first."
            },
            "setTrustedForwarder(address)": {
                "notice": "The owner of the Paymaster can change the instance of the Forwarder this Paymaster works with.the Recipients must trust this Forwarder as well in order for the configuration to remain functional."
            },
            "withdrawAllBalance()": {
                "notice": "leaving withdrawal public and unprotected"
            },
            "withdrawRelayHubDepositTo(uint256,address)": {
                "notice": "Withdraw deposit from the RelayHub."
            }
        },
        "version": 1
    }
}
