{
  "fileName": "IRelayRecipient.sol",
  "contractName": "IRelayRecipient",
  "source": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\n/**\n * @dev Base interface for a contract that will be called via the GSN from {IRelayHub}.\n *\n * TIP: You don't need to write an implementation yourself! Inherit from {GSNRecipient} instead.\n */\ninterface IRelayRecipient {\n    /**\n     * @dev Returns the address of the {IRelayHub} instance this recipient interacts with.\n     */\n    function getHubAddr() external view returns (address);\n\n    /**\n     * @dev Called by {IRelayHub} to validate if this recipient accepts being charged for a relayed call. Note that the\n     * recipient will be charged regardless of the execution result of the relayed call (i.e. if it reverts or not).\n     *\n     * The relay request was originated by `from` and will be served by `relay`. `encodedFunction` is the relayed call\n     * calldata, so its first four bytes are the function selector. The relayed call will be forwarded `gasLimit` gas,\n     * and the transaction executed with a gas price of at least `gasPrice`. ``relay``'s fee is `transactionFee`, and the\n     * recipient will be charged at most `maxPossibleCharge` (in wei). `nonce` is the sender's (`from`) nonce for\n     * replay attack protection in {IRelayHub}, and `approvalData` is a optional parameter that can be used to hold a signature\n     * over all or some of the previous values.\n     *\n     * Returns a tuple, where the first value is used to indicate approval (0) or rejection (custom non-zero error code,\n     * values 1 to 10 are reserved) and the second one is data to be passed to the other {IRelayRecipient} functions.\n     *\n     * {acceptRelayedCall} is called with 50k gas: if it runs out during execution, the request will be considered\n     * rejected. A regular revert will also trigger a rejection.\n     */\n    function acceptRelayedCall(\n        address relay,\n        address from,\n        bytes calldata encodedFunction,\n        uint256 transactionFee,\n        uint256 gasPrice,\n        uint256 gasLimit,\n        uint256 nonce,\n        bytes calldata approvalData,\n        uint256 maxPossibleCharge\n    )\n        external\n        view\n        returns (uint256, bytes memory);\n\n    /**\n     * @dev Called by {IRelayHub} on approved relay call requests, before the relayed call is executed. This allows to e.g.\n     * pre-charge the sender of the transaction.\n     *\n     * `context` is the second value returned in the tuple by {acceptRelayedCall}.\n     *\n     * Returns a value to be passed to {postRelayedCall}.\n     *\n     * {preRelayedCall} is called with 100k gas: if it runs out during exection or otherwise reverts, the relayed call\n     * will not be executed, but the recipient will still be charged for the transaction's cost.\n     */\n    function preRelayedCall(bytes calldata context) external returns (bytes32);\n\n    /**\n     * @dev Called by {IRelayHub} on approved relay call requests, after the relayed call is executed. This allows to e.g.\n     * charge the user for the relayed call costs, return any overcharges from {preRelayedCall}, or perform\n     * contract-specific bookkeeping.\n     *\n     * `context` is the second value returned in the tuple by {acceptRelayedCall}. `success` is the execution status of\n     * the relayed call. `actualCharge` is an estimate of how much the recipient will be charged for the transaction,\n     * not including any gas used by {postRelayedCall} itself. `preRetVal` is {preRelayedCall}'s return value.\n     *\n     *\n     * {postRelayedCall} is called with 100k gas: if it runs out during execution or otherwise reverts, the relayed call\n     * and the call to {preRelayedCall} will be reverted retroactively, but the recipient will still be charged for the\n     * transaction's cost.\n     */\n    function postRelayedCall(bytes calldata context, bool success, uint256 actualCharge, bytes32 preRetVal) external;\n}\n",
  "sourcePath": "contracts/GSN/IRelayRecipient.sol",
  "sourceMap": "",
  "deployedSourceMap": "",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "relay",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "encodedFunction",
          "type": "bytes"
        },
        {
          "internalType": "uint256",
          "name": "transactionFee",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "gasPrice",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "gasLimit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "nonce",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "approvalData",
          "type": "bytes"
        },
        {
          "internalType": "uint256",
          "name": "maxPossibleCharge",
          "type": "uint256"
        }
      ],
      "name": "acceptRelayedCall",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getHubAddr",
      "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": "actualCharge",
          "type": "uint256"
        },
        {
          "internalType": "bytes32",
          "name": "preRetVal",
          "type": "bytes32"
        }
      ],
      "name": "postRelayedCall",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "context",
          "type": "bytes"
        }
      ],
      "name": "preRelayedCall",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "ast": {
    "absolutePath": "contracts/GSN/IRelayRecipient.sol",
    "exportedSymbols": {
      "IRelayRecipient": [
        1184
      ]
    },
    "id": 1185,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1130,
        "literals": [
          "solidity",
          "^",
          "0.7",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "33:23:5"
      },
      {
        "abstract": false,
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "interface",
        "documentation": {
          "id": 1131,
          "nodeType": "StructuredDocumentation",
          "src": "58:195:5",
          "text": " @dev Base interface for a contract that will be called via the GSN from {IRelayHub}.\n TIP: You don't need to write an implementation yourself! Inherit from {GSNRecipient} instead."
        },
        "fullyImplemented": false,
        "id": 1184,
        "linearizedBaseContracts": [
          1184
        ],
        "name": "IRelayRecipient",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": null,
            "documentation": {
              "id": 1132,
              "nodeType": "StructuredDocumentation",
              "src": "286:102:5",
              "text": " @dev Returns the address of the {IRelayHub} instance this recipient interacts with."
            },
            "functionSelector": "74e861d6",
            "id": 1137,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getHubAddr",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 1133,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "412:2:5"
            },
            "returnParameters": {
              "id": 1136,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1135,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1137,
                  "src": "438:7:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1134,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "438:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "437:9:5"
            },
            "scope": 1184,
            "src": "393:54:5",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": {
              "id": 1138,
              "nodeType": "StructuredDocumentation",
              "src": "453:1338:5",
              "text": " @dev Called by {IRelayHub} to validate if this recipient accepts being charged for a relayed call. Note that the\n recipient will be charged regardless of the execution result of the relayed call (i.e. if it reverts or not).\n The relay request was originated by `from` and will be served by `relay`. `encodedFunction` is the relayed call\n calldata, so its first four bytes are the function selector. The relayed call will be forwarded `gasLimit` gas,\n and the transaction executed with a gas price of at least `gasPrice`. ``relay``'s fee is `transactionFee`, and the\n recipient will be charged at most `maxPossibleCharge` (in wei). `nonce` is the sender's (`from`) nonce for\n replay attack protection in {IRelayHub}, and `approvalData` is a optional parameter that can be used to hold a signature\n over all or some of the previous values.\n Returns a tuple, where the first value is used to indicate approval (0) or rejection (custom non-zero error code,\n values 1 to 10 are reserved) and the second one is data to be passed to the other {IRelayRecipient} functions.\n {acceptRelayedCall} is called with 50k gas: if it runs out during execution, the request will be considered\n rejected. A regular revert will also trigger a rejection."
            },
            "functionSelector": "83947ea0",
            "id": 1163,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "acceptRelayedCall",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 1157,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1140,
                  "mutability": "mutable",
                  "name": "relay",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1163,
                  "src": "1832:13:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1139,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1832:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1142,
                  "mutability": "mutable",
                  "name": "from",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1163,
                  "src": "1855:12:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1141,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1855:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1144,
                  "mutability": "mutable",
                  "name": "encodedFunction",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1163,
                  "src": "1877:30:5",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1143,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1877:5:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1146,
                  "mutability": "mutable",
                  "name": "transactionFee",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1163,
                  "src": "1917:22:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1145,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1917:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1148,
                  "mutability": "mutable",
                  "name": "gasPrice",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1163,
                  "src": "1949:16:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1147,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1949:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1150,
                  "mutability": "mutable",
                  "name": "gasLimit",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1163,
                  "src": "1975:16:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1149,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1975:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1152,
                  "mutability": "mutable",
                  "name": "nonce",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1163,
                  "src": "2001:13:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1151,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2001:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1154,
                  "mutability": "mutable",
                  "name": "approvalData",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1163,
                  "src": "2024:27:5",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1153,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2024:5:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1156,
                  "mutability": "mutable",
                  "name": "maxPossibleCharge",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1163,
                  "src": "2061:25:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1155,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2061:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1822:270:5"
            },
            "returnParameters": {
              "id": 1162,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1159,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1163,
                  "src": "2140:7:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1158,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2140:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1161,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1163,
                  "src": "2149:12:5",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1160,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2149:5:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2139:23:5"
            },
            "scope": 1184,
            "src": "1796:367:5",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": {
              "id": 1164,
              "nodeType": "StructuredDocumentation",
              "src": "2169:562:5",
              "text": " @dev Called by {IRelayHub} on approved relay call requests, before the relayed call is executed. This allows to e.g.\n pre-charge the sender of the transaction.\n `context` is the second value returned in the tuple by {acceptRelayedCall}.\n Returns a value to be passed to {postRelayedCall}.\n {preRelayedCall} is called with 100k gas: if it runs out during exection or otherwise reverts, the relayed call\n will not be executed, but the recipient will still be charged for the transaction's cost."
            },
            "functionSelector": "80274db7",
            "id": 1171,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "preRelayedCall",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 1167,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1166,
                  "mutability": "mutable",
                  "name": "context",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1171,
                  "src": "2760:22:5",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1165,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2760:5:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2759:24:5"
            },
            "returnParameters": {
              "id": 1170,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1169,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1171,
                  "src": "2802:7:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1168,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2802:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2801:9:5"
            },
            "scope": 1184,
            "src": "2736:75:5",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": {
              "id": 1172,
              "nodeType": "StructuredDocumentation",
              "src": "2817:918:5",
              "text": " @dev Called by {IRelayHub} on approved relay call requests, after the relayed call is executed. This allows to e.g.\n charge the user for the relayed call costs, return any overcharges from {preRelayedCall}, or perform\n contract-specific bookkeeping.\n `context` is the second value returned in the tuple by {acceptRelayedCall}. `success` is the execution status of\n the relayed call. `actualCharge` is an estimate of how much the recipient will be charged for the transaction,\n not including any gas used by {postRelayedCall} itself. `preRetVal` is {preRelayedCall}'s return value.\n {postRelayedCall} is called with 100k gas: if it runs out during execution or otherwise reverts, the relayed call\n and the call to {preRelayedCall} will be reverted retroactively, but the recipient will still be charged for the\n transaction's cost."
            },
            "functionSelector": "e06e0e22",
            "id": 1183,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "postRelayedCall",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 1181,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1174,
                  "mutability": "mutable",
                  "name": "context",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1183,
                  "src": "3765:22:5",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1173,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3765:5:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1176,
                  "mutability": "mutable",
                  "name": "success",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1183,
                  "src": "3789:12:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1175,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3789:4:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1178,
                  "mutability": "mutable",
                  "name": "actualCharge",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1183,
                  "src": "3803:20:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1177,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3803:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1180,
                  "mutability": "mutable",
                  "name": "preRetVal",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1183,
                  "src": "3825:17:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1179,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3825:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3764:79:5"
            },
            "returnParameters": {
              "id": 1182,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3852:0:5"
            },
            "scope": 1184,
            "src": "3740:113:5",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 1185,
        "src": "254:3601:5"
      }
    ],
    "src": "33:3823:5"
  },
  "bytecode": "0x",
  "deployedBytecode": "0x",
  "compiler": {
    "name": "solc",
    "version": "0.7.0+commit.9e61f92b.Emscripten.clang",
    "optimizer": {
      "enabled": false,
      "runs": 200
    },
    "evmVersion": "petersburg"
  }
}
