{
    "contractName": "Forwarder",
    "abi": [
        {
            "inputs": [],
            "stateMutability": "nonpayable",
            "type": "constructor"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "bytes32",
                    "name": "domainSeparator",
                    "type": "bytes32"
                },
                {
                    "indexed": false,
                    "internalType": "bytes",
                    "name": "domainValue",
                    "type": "bytes"
                }
            ],
            "name": "DomainRegistered",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "bytes32",
                    "name": "typeHash",
                    "type": "bytes32"
                },
                {
                    "indexed": false,
                    "internalType": "string",
                    "name": "typeStr",
                    "type": "string"
                }
            ],
            "name": "RequestTypeRegistered",
            "type": "event"
        },
        {
            "inputs": [],
            "name": "EIP712_DOMAIN_TYPE",
            "outputs": [
                {
                    "internalType": "string",
                    "name": "",
                    "type": "string"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "GENERIC_PARAMS",
            "outputs": [
                {
                    "internalType": "string",
                    "name": "",
                    "type": "string"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes32",
                    "name": "",
                    "type": "bytes32"
                }
            ],
            "name": "domains",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes32",
                    "name": "",
                    "type": "bytes32"
                }
            ],
            "name": "typeHashes",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "stateMutability": "payable",
            "type": "receive"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "from",
                    "type": "address"
                }
            ],
            "name": "getNonce",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "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": "struct IForwarder.ForwardRequest",
                    "name": "req",
                    "type": "tuple"
                },
                {
                    "internalType": "bytes32",
                    "name": "domainSeparator",
                    "type": "bytes32"
                },
                {
                    "internalType": "bytes32",
                    "name": "requestTypeHash",
                    "type": "bytes32"
                },
                {
                    "internalType": "bytes",
                    "name": "suffixData",
                    "type": "bytes"
                },
                {
                    "internalType": "bytes",
                    "name": "sig",
                    "type": "bytes"
                }
            ],
            "name": "verify",
            "outputs": [],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "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": "struct IForwarder.ForwardRequest",
                    "name": "req",
                    "type": "tuple"
                },
                {
                    "internalType": "bytes32",
                    "name": "domainSeparator",
                    "type": "bytes32"
                },
                {
                    "internalType": "bytes32",
                    "name": "requestTypeHash",
                    "type": "bytes32"
                },
                {
                    "internalType": "bytes",
                    "name": "suffixData",
                    "type": "bytes"
                },
                {
                    "internalType": "bytes",
                    "name": "sig",
                    "type": "bytes"
                }
            ],
            "name": "execute",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "success",
                    "type": "bool"
                },
                {
                    "internalType": "bytes",
                    "name": "ret",
                    "type": "bytes"
                }
            ],
            "stateMutability": "payable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "string",
                    "name": "typeName",
                    "type": "string"
                },
                {
                    "internalType": "string",
                    "name": "typeSuffix",
                    "type": "string"
                }
            ],
            "name": "registerRequestType",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "string",
                    "name": "name",
                    "type": "string"
                },
                {
                    "internalType": "string",
                    "name": "version",
                    "type": "string"
                }
            ],
            "name": "registerDomainSeparator",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "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": "struct IForwarder.ForwardRequest",
                    "name": "req",
                    "type": "tuple"
                },
                {
                    "internalType": "bytes32",
                    "name": "requestTypeHash",
                    "type": "bytes32"
                },
                {
                    "internalType": "bytes",
                    "name": "suffixData",
                    "type": "bytes"
                }
            ],
            "name": "_getEncoded",
            "outputs": [
                {
                    "internalType": "bytes",
                    "name": "",
                    "type": "bytes"
                }
            ],
            "stateMutability": "pure",
            "type": "function"
        }
    ],
    "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"domainSeparator\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"domainValue\",\"type\":\"bytes\"}],\"name\":\"DomainRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"typeHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"typeStr\",\"type\":\"string\"}],\"name\":\"RequestTypeRegistered\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"EIP712_DOMAIN_TYPE\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"GENERIC_PARAMS\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"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\":\"struct IForwarder.ForwardRequest\",\"name\":\"req\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"requestTypeHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"suffixData\",\"type\":\"bytes\"}],\"name\":\"_getEncoded\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"domains\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"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\":\"struct IForwarder.ForwardRequest\",\"name\":\"req\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"domainSeparator\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"requestTypeHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"suffixData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"sig\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"ret\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"}],\"name\":\"getNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"}],\"name\":\"registerDomainSeparator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"typeName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"typeSuffix\",\"type\":\"string\"}],\"name\":\"registerRequestType\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"typeHashes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"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\":\"struct IForwarder.ForwardRequest\",\"name\":\"req\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"domainSeparator\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"requestTypeHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"suffixData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"sig\",\"type\":\"bytes\"}],\"name\":\"verify\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/Users/dror/IdeaProjects/gsn/contracts/forwarder/Forwarder.sol\":\"Forwarder\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/dror/IdeaProjects/gsn/contracts/forwarder/Forwarder.sol\":{\"keccak256\":\"0x10b4cbeebab696613fa4123c50db43e8ccc2da031a88638e194777cda792a3cb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3872a73495ef634e8cedce8718da5e4b8b2faac9b6633cfefdc30c0f90069abc\",\"dweb:/ipfs/QmSmrciT8wkMXNeDh3dWHRe9JFULeEHNQ652WDPAZkwAVu\"]},\"/Users/dror/IdeaProjects/gsn/contracts/forwarder/IForwarder.sol\":{\"keccak256\":\"0x253fd0f17ff0a73a96d83570b9d6bdc027b64e3ff0aca19d6c0b621bd5156aee\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fd3169e07849f996eb281bf4700cea430e45eda54a80169f0a360362cc2a8e84\",\"dweb:/ipfs/QmXa1x3UpA9tAa26Fwf4b4MkVqeEfEFgDPhNfRMtwJuoms\"]},\"@openzeppelin/contracts/cryptography/ECDSA.sol\":{\"keccak256\":\"0x1efcb1ccef6b3bce65467c4b704cec8d0582e35ff48352269ba8cda4b54ae3da\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f40d4c72c7f8dfdfb9fd048de5d3ece0020dfcd057b29f0630fd703e7fbe7301\",\"dweb:/ipfs/QmSw7Q9JVVbVDWwVbaJjHhkPmTm8GF3nwVTZUfnmPqTdNm\"]}},\"version\":1}",
    "bytecode": "0x60806040523480156200001157600080fd5b5060606040518060800160405280604a81526020016200130b604a9139604051602001620000409190620000d1565b60408051601f19818403018152919052905062000066816001600160e01b036200006d16565b506200017d565b8051602080830191909120600081815291829052604091829020805460ff19166001179055905181907f64d6bce64323458c44643c51fe45113efc882082f7b7fd5f09f0d69d2eedb20290620000c590859062000115565b60405180910390a25050565b60006e08cdee4eec2e4c8a4cae2eacae6e85608b1b82528251620000fd81600f8501602087016200014a565b602960f81b600f939091019283015250601001919050565b6000602082528251806020840152620001368160408501602087016200014a565b601f01601f19169190910160400192915050565b60005b83811015620001675781810151838201526020016200014d565b8381111562000177576000848401525b50505050565b61117e806200018d6000396000f3fe6080604052600436106100955760003560e01c8063c3f28abd11610059578063c3f28abd14610168578063c45c26741461017d578063c722f1771461019d578063cdf5735a146101bd578063d9210be5146101de5761009c565b8063066a310c146100a157806321fe98df146100cc5780632d0335ab146100f9578063992d82c3146101265780639c7b4592146101485761009c565b3661009c57005b600080fd5b3480156100ad57600080fd5b506100b66101fe565b6040516100c39190610e46565b60405180910390f35b3480156100d857600080fd5b506100ec6100e7366004610ad8565b61021a565b6040516100c39190610dce565b34801561010557600080fd5b50610119610114366004610aaa565b61022f565b6040516100c39190611037565b34801561013257600080fd5b50610146610141366004610b59565b61024a565b005b34801561015457600080fd5b50610146610163366004610af0565b6102d2565b34801561017457600080fd5b506100b66103b4565b34801561018957600080fd5b506100b6610198366004610bfd565b6103d0565b3480156101a957600080fd5b506100ec6101b8366004610ad8565b610445565b6101d06101cb366004610b59565b61045a565b6040516100c3929190610dd9565b3480156101ea57600080fd5b506101466101f9366004610af0565b6105c8565b6040518060800160405280604a81526020016110ad604a913981565b60006020819052908152604090205460ff1681565b6001600160a01b031660009081526002602052604090205490565b61025387610697565b6102c987878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8b0181900481028201810190925289815292508991508890819084018382808284376000920191909152506106d692505050565b50505050505050565b600046905060606040518060800160405280605281526020016110f760529139805190602001208686604051610309929190610cce565b60405180910390208585604051610321929190610cce565b60405190819003812061033c93929186903090602001610dfc565b60408051601f198184030181528282528051602080830191909120600081815260019283905293909320805460ff1916909117905592509081907f4bc68689cbe89a4a6333a3ab0a70093874da3e5bfb71e93102027f3f073687d8906103a3908590610e46565b60405180910390a250505050505050565b6040518060800160405280605281526020016110f76052913981565b606082846000015185602001518660400151876060015188608001518960a001518051906020012060405160200161040d96959493929190610d98565b60408051601f198184030181529082905261042d92918590602001610c93565b60405160208183030381529060405290509392505050565b60016020526000908152604090205460ff1681565b6000606061046789610697565b6104dd89898989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8d018190048102820181019092528b815292508b91508a90819084018382808284376000920191909152506106d692505050565b6104e6896107ba565b88602001516001600160a01b031689606001518a604001518b60a001518c60000151604051602001610519929190610cfa565b60408051601f198184030181529082905261053391610cde565b600060405180830381858888f193505050503d8060008114610571576040519150601f19603f3d011682016040523d82523d6000602084013e610576565b606091505b50909250905047156105bc5788516040516001600160a01b03909116904780156108fc02916000818181858888f193505050501580156105ba573d6000803e3d6000fd5b505b97509795505050505050565b60005b838110156106425760008585838181106105e157fe5b909101356001600160f81b031916915050600560fb1b81148015906106145750602960f81b6001600160f81b0319821614155b6106395760405162461bcd60e51b815260040161063090610ec7565b60405180910390fd5b506001016105cb565b50606084846040518060800160405280604a81526020016110ad604a91398585604051602001610676959493929190610d31565b6040516020818303038152906040529050610690816107db565b5050505050565b608081015181516001600160a01b0316600090815260026020526040902054146106d35760405162461bcd60e51b815260040161063090610ef1565b50565b60008481526001602052604090205460ff166107045760405162461bcd60e51b815260040161063090610f92565b60008381526020819052604090205460ff166107325760405162461bcd60e51b815260040161063090610f5b565b6000846107408786866103d0565b8051602091820120604051610756939201610d7d565b60408051601f19818403018152919052805160209091012086519091506001600160a01b031661078c828463ffffffff61083d16565b6001600160a01b0316146107b25760405162461bcd60e51b81526004016106309061100b565b505050505050565b516001600160a01b0316600090815260026020526040902080546001019055565b8051602080830191909120600081815291829052604091829020805460ff19166001179055905181907f64d6bce64323458c44643c51fe45113efc882082f7b7fd5f09f0d69d2eedb20290610831908590610e46565b60405180910390a25050565b600081516041146108605760405162461bcd60e51b815260040161063090610e90565b60208201516040830151606084015160001a7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156108b25760405162461bcd60e51b815260040161063090610f19565b8060ff16601b141580156108ca57508060ff16601c14155b156108e75760405162461bcd60e51b815260040161063090610fc9565b60006001878386866040516000815260200160405260405161090c9493929190610e28565b6020604051602081039080840390855afa15801561092e573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166109615760405162461bcd60e51b815260040161063090610e59565b9695505050505050565b60008083601f84011261097c578182fd5b50813567ffffffffffffffff811115610993578182fd5b6020830191508360208285010111156109ab57600080fd5b9250929050565b600082601f8301126109c2578081fd5b813567ffffffffffffffff8111156109d8578182fd5b6109eb601f8201601f1916602001611040565b9150808252836020828501011115610a0257600080fd5b8060208401602084013760009082016020015292915050565b600060c08284031215610a2c578081fd5b610a3660c0611040565b90508135610a4381611097565b81526020820135610a5381611097565b8060208301525060408201356040820152606082013560608201526080820135608082015260a082013567ffffffffffffffff811115610a9257600080fd5b610a9e848285016109b2565b60a08301525092915050565b600060208284031215610abb578081fd5b81356001600160a01b0381168114610ad1578182fd5b9392505050565b600060208284031215610ae9578081fd5b5035919050565b60008060008060408587031215610b05578283fd5b843567ffffffffffffffff80821115610b1c578485fd5b610b288883890161096b565b90965094506020870135915080821115610b40578384fd5b50610b4d8782880161096b565b95989497509550505050565b600080600080600080600060a0888a031215610b73578283fd5b873567ffffffffffffffff80821115610b8a578485fd5b610b968b838c01610a1b565b985060208a0135975060408a0135965060608a0135915080821115610bb9578485fd5b610bc58b838c0161096b565b909650945060808a0135915080821115610bdd578384fd5b50610bea8a828b0161096b565b989b979a50959850939692959293505050565b600080600060608486031215610c11578283fd5b833567ffffffffffffffff80821115610c28578485fd5b610c3487838801610a1b565b9450602086013593506040860135915080821115610c50578283fd5b50610c5d868287016109b2565b9150509250925092565b60008151808452610c7f816020860160208601611067565b601f01601f19169290920160200192915050565b60008482528351610cab816020850160208801611067565b8351908301610cc1826020808401908801611067565b0160200195945050505050565b6000828483379101908152919050565b60008251610cf0818460208701611067565b9190910192915050565b60008351610d0c818460208801611067565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b600085878337600560fb1b8287019081528551610d55816001840160208a01611067565b808201600b60fa1b600182015285876002830137909401600201918252509695505050505050565b61190160f01b81526002810192909252602282015260420190565b6001600160a01b03968716815294909516602085015260408401929092526060830152608082015260a081019190915260c00190565b901515815260200190565b6000831515825260406020830152610df46040830184610c67565b949350505050565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b93845260ff9290921660208401526040830152606082015260800190565b600060208252610ad16020830184610c67565b60208082526018908201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604082015260600190565b6020808252601f908201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604082015260600190565b60208082526010908201526f696e76616c696420747970656e616d6560801b604082015260600190565b6020808252600e908201526d0dcdedcc6ca40dad2e6dac2e8c6d60931b604082015260600190565b60208082526022908201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604082015261756560f01b606082015260800190565b6020808252601d908201527f756e726567697374657265642072657175657374207479706568617368000000604082015260600190565b6020808252601d908201527f756e7265676973746572656420646f6d61696e20736570617261746f72000000604082015260600190565b60208082526022908201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604082015261756560f01b606082015260800190565b6020808252601290820152710e6d2cedcc2e8eae4ca40dad2e6dac2e8c6d60731b604082015260600190565b90815260200190565b60405181810167ffffffffffffffff8111828210171561105f57600080fd5b604052919050565b60005b8381101561108257818101518382015260200161106a565b83811115611091576000848401525b50505050565b6001600160a01b03811681146106d357600080fdfe616464726573732066726f6d2c6164647265737320746f2c75696e743235362076616c75652c75696e74323536206761732c75696e74323536206e6f6e63652c62797465732064617461454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429a2646970667358221220f5095741a9a2228fca447f0b2ce702f1a66bc73f926f0a7047a0947ba7cb121c64736f6c634300060a0033616464726573732066726f6d2c6164647265737320746f2c75696e743235362076616c75652c75696e74323536206761732c75696e74323536206e6f6e63652c62797465732064617461",
    "deployedBytecode": "0x6080604052600436106100955760003560e01c8063c3f28abd11610059578063c3f28abd14610168578063c45c26741461017d578063c722f1771461019d578063cdf5735a146101bd578063d9210be5146101de5761009c565b8063066a310c146100a157806321fe98df146100cc5780632d0335ab146100f9578063992d82c3146101265780639c7b4592146101485761009c565b3661009c57005b600080fd5b3480156100ad57600080fd5b506100b66101fe565b6040516100c39190610e46565b60405180910390f35b3480156100d857600080fd5b506100ec6100e7366004610ad8565b61021a565b6040516100c39190610dce565b34801561010557600080fd5b50610119610114366004610aaa565b61022f565b6040516100c39190611037565b34801561013257600080fd5b50610146610141366004610b59565b61024a565b005b34801561015457600080fd5b50610146610163366004610af0565b6102d2565b34801561017457600080fd5b506100b66103b4565b34801561018957600080fd5b506100b6610198366004610bfd565b6103d0565b3480156101a957600080fd5b506100ec6101b8366004610ad8565b610445565b6101d06101cb366004610b59565b61045a565b6040516100c3929190610dd9565b3480156101ea57600080fd5b506101466101f9366004610af0565b6105c8565b6040518060800160405280604a81526020016110ad604a913981565b60006020819052908152604090205460ff1681565b6001600160a01b031660009081526002602052604090205490565b61025387610697565b6102c987878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8b0181900481028201810190925289815292508991508890819084018382808284376000920191909152506106d692505050565b50505050505050565b600046905060606040518060800160405280605281526020016110f760529139805190602001208686604051610309929190610cce565b60405180910390208585604051610321929190610cce565b60405190819003812061033c93929186903090602001610dfc565b60408051601f198184030181528282528051602080830191909120600081815260019283905293909320805460ff1916909117905592509081907f4bc68689cbe89a4a6333a3ab0a70093874da3e5bfb71e93102027f3f073687d8906103a3908590610e46565b60405180910390a250505050505050565b6040518060800160405280605281526020016110f76052913981565b606082846000015185602001518660400151876060015188608001518960a001518051906020012060405160200161040d96959493929190610d98565b60408051601f198184030181529082905261042d92918590602001610c93565b60405160208183030381529060405290509392505050565b60016020526000908152604090205460ff1681565b6000606061046789610697565b6104dd89898989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8d018190048102820181019092528b815292508b91508a90819084018382808284376000920191909152506106d692505050565b6104e6896107ba565b88602001516001600160a01b031689606001518a604001518b60a001518c60000151604051602001610519929190610cfa565b60408051601f198184030181529082905261053391610cde565b600060405180830381858888f193505050503d8060008114610571576040519150601f19603f3d011682016040523d82523d6000602084013e610576565b606091505b50909250905047156105bc5788516040516001600160a01b03909116904780156108fc02916000818181858888f193505050501580156105ba573d6000803e3d6000fd5b505b97509795505050505050565b60005b838110156106425760008585838181106105e157fe5b909101356001600160f81b031916915050600560fb1b81148015906106145750602960f81b6001600160f81b0319821614155b6106395760405162461bcd60e51b815260040161063090610ec7565b60405180910390fd5b506001016105cb565b50606084846040518060800160405280604a81526020016110ad604a91398585604051602001610676959493929190610d31565b6040516020818303038152906040529050610690816107db565b5050505050565b608081015181516001600160a01b0316600090815260026020526040902054146106d35760405162461bcd60e51b815260040161063090610ef1565b50565b60008481526001602052604090205460ff166107045760405162461bcd60e51b815260040161063090610f92565b60008381526020819052604090205460ff166107325760405162461bcd60e51b815260040161063090610f5b565b6000846107408786866103d0565b8051602091820120604051610756939201610d7d565b60408051601f19818403018152919052805160209091012086519091506001600160a01b031661078c828463ffffffff61083d16565b6001600160a01b0316146107b25760405162461bcd60e51b81526004016106309061100b565b505050505050565b516001600160a01b0316600090815260026020526040902080546001019055565b8051602080830191909120600081815291829052604091829020805460ff19166001179055905181907f64d6bce64323458c44643c51fe45113efc882082f7b7fd5f09f0d69d2eedb20290610831908590610e46565b60405180910390a25050565b600081516041146108605760405162461bcd60e51b815260040161063090610e90565b60208201516040830151606084015160001a7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156108b25760405162461bcd60e51b815260040161063090610f19565b8060ff16601b141580156108ca57508060ff16601c14155b156108e75760405162461bcd60e51b815260040161063090610fc9565b60006001878386866040516000815260200160405260405161090c9493929190610e28565b6020604051602081039080840390855afa15801561092e573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166109615760405162461bcd60e51b815260040161063090610e59565b9695505050505050565b60008083601f84011261097c578182fd5b50813567ffffffffffffffff811115610993578182fd5b6020830191508360208285010111156109ab57600080fd5b9250929050565b600082601f8301126109c2578081fd5b813567ffffffffffffffff8111156109d8578182fd5b6109eb601f8201601f1916602001611040565b9150808252836020828501011115610a0257600080fd5b8060208401602084013760009082016020015292915050565b600060c08284031215610a2c578081fd5b610a3660c0611040565b90508135610a4381611097565b81526020820135610a5381611097565b8060208301525060408201356040820152606082013560608201526080820135608082015260a082013567ffffffffffffffff811115610a9257600080fd5b610a9e848285016109b2565b60a08301525092915050565b600060208284031215610abb578081fd5b81356001600160a01b0381168114610ad1578182fd5b9392505050565b600060208284031215610ae9578081fd5b5035919050565b60008060008060408587031215610b05578283fd5b843567ffffffffffffffff80821115610b1c578485fd5b610b288883890161096b565b90965094506020870135915080821115610b40578384fd5b50610b4d8782880161096b565b95989497509550505050565b600080600080600080600060a0888a031215610b73578283fd5b873567ffffffffffffffff80821115610b8a578485fd5b610b968b838c01610a1b565b985060208a0135975060408a0135965060608a0135915080821115610bb9578485fd5b610bc58b838c0161096b565b909650945060808a0135915080821115610bdd578384fd5b50610bea8a828b0161096b565b989b979a50959850939692959293505050565b600080600060608486031215610c11578283fd5b833567ffffffffffffffff80821115610c28578485fd5b610c3487838801610a1b565b9450602086013593506040860135915080821115610c50578283fd5b50610c5d868287016109b2565b9150509250925092565b60008151808452610c7f816020860160208601611067565b601f01601f19169290920160200192915050565b60008482528351610cab816020850160208801611067565b8351908301610cc1826020808401908801611067565b0160200195945050505050565b6000828483379101908152919050565b60008251610cf0818460208701611067565b9190910192915050565b60008351610d0c818460208801611067565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b600085878337600560fb1b8287019081528551610d55816001840160208a01611067565b808201600b60fa1b600182015285876002830137909401600201918252509695505050505050565b61190160f01b81526002810192909252602282015260420190565b6001600160a01b03968716815294909516602085015260408401929092526060830152608082015260a081019190915260c00190565b901515815260200190565b6000831515825260406020830152610df46040830184610c67565b949350505050565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b93845260ff9290921660208401526040830152606082015260800190565b600060208252610ad16020830184610c67565b60208082526018908201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604082015260600190565b6020808252601f908201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604082015260600190565b60208082526010908201526f696e76616c696420747970656e616d6560801b604082015260600190565b6020808252600e908201526d0dcdedcc6ca40dad2e6dac2e8c6d60931b604082015260600190565b60208082526022908201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604082015261756560f01b606082015260800190565b6020808252601d908201527f756e726567697374657265642072657175657374207479706568617368000000604082015260600190565b6020808252601d908201527f756e7265676973746572656420646f6d61696e20736570617261746f72000000604082015260600190565b60208082526022908201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604082015261756560f01b606082015260800190565b6020808252601290820152710e6d2cedcc2e8eae4ca40dad2e6dac2e8c6d60731b604082015260600190565b90815260200190565b60405181810167ffffffffffffffff8111828210171561105f57600080fd5b604052919050565b60005b8381101561108257818101518382015260200161106a565b83811115611091576000848401525b50505050565b6001600160a01b03811681146106d357600080fdfe616464726573732066726f6d2c6164647265737320746f2c75696e743235362076616c75652c75696e74323536206761732c75696e74323536206e6f6e63652c62797465732064617461454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429a2646970667358221220f5095741a9a2228fca447f0b2ce702f1a66bc73f926f0a7047a0947ba7cb121c64736f6c634300060a0033",
    "immutableReferences": {},
    "sourceMap": "175:4909:7:-:0;;;907:181;;;;;;;;;;939:25;1010:14;;;;;;;;;;;;;;;;;974:56;;;;;;;;;;;;;-1:-1:-1;;974:56:7;;;;;;;;;;-1:-1:-1;1041:40:7;974:56;-1:-1:-1;;;;;1041:27:7;:40;:::i;:::-;907:181;175:4909;;3532:256;3642:29;;;;;;;;;;3616:23;3681:27;;;;;;;;;;;;:34;;-1:-1:-1;;3681:34:7;3711:4;3681:34;;;3730:51;;3642:29;;3730:51;;;;3658:11;;3730:51;;;;;;;;;;3532:256;;:::o;1430:809:-1:-;;-1:-1;;;1010:11;1003:38;522:5;2651:12;634:52;679:6;987:2;1064:3;1060:12;667:4;660:5;656:16;634:52;;;-1:-1;;;987:2;698:16;;;;;;;1362:24;-1:-1;1405:11;;;1768:471;-1:-1;1768:471;2246:310;;2393:2;2414:17;2407:47;150:5;2651:12;2808:6;2393:2;2382:9;2378:18;2796:19;244:52;289:6;2836:14;2382:9;2836:14;2393:2;270:5;266:16;244:52;;;3379:7;3363:14;-1:-1;;3359:28;308:39;;;;2836:14;308:39;;2364:192;-1:-1;;2364:192;3019:268;3084:1;3091:101;3105:6;3102:1;3099:13;3091:101;;;3172:11;;;3166:18;3153:11;;;3146:39;3127:2;3120:10;3091:101;;;3207:6;3204:1;3201:13;3198:2;;;3084:1;3263:6;3258:3;3254:16;3247:27;3198:2;;3068:219;;;;;175:4909:7;;;;;;",
    "deployedSourceMap": "175:4909:7:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;244:116;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;502:42;;;;;;;;;;-1:-1:-1;502:42:7;;;;;;;;:::i;:::-;;;;;;;;786:115;;;;;;;;;;-1:-1:-1;786:115:7;;;;;;;;:::i;:::-;;;;;;;;1094:319;;;;;;;;;;-1:-1:-1;1094:319:7;;;;;;;;:::i;:::-;;2926:600;;;;;;;;;;-1:-1:-1;2926:600:7;;;;;;;;:::i;367:128::-;;;;;;;;;;;;;:::i;4586:496::-;;;;;;;;;;-1:-1:-1;4586:496:7;;;;;;;;:::i;550:39::-;;;;;;;;;;-1:-1:-1;550:39:7;;;;;;;;:::i;1419:807::-;;;;;;;;;:::i;:::-;;;;;;;;;2474:446;;;;;;;;;;-1:-1:-1;2474:446:7;;;;;;;;:::i;244:116::-;;;;;;;;;;;;;;;;;;;:::o;502:42::-;;;;;;;;;;;;;;;;:::o;786:115::-;-1:-1:-1;;;;;882:12:7;856:7;882:12;;;:6;:12;;;;;;;786:115::o;1094:319::-;1313:17;1326:3;1313:12;:17::i;:::-;1340:66;1351:3;1356:15;1373;1390:10;;1340:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1340:66:7;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1402:3:7;;-1:-1:-1;1402:3:7;;;;1340:66;;1402:3;;;;1340:66;;;;;;;;;-1:-1:-1;1340:10:7;;-1:-1:-1;;;1340:66:7:i;:::-;1094:319;;;;;;;:::o;2926:600::-;3034:15;3140:9;3129:20;;3161:24;3228:18;;;;;;;;;;;;;;;;;3212:36;;;;;;3278:4;;3262:22;;;;;;;;;;;;;;;;3314:7;;3298:25;;;;;;;;;;;;;;;;;3188:184;;;;3337:7;;3366:4;;3188:184;;;;;;;;-1:-1:-1;;3188:184:7;;;;;;;;;3404:22;;3188:184;3404:22;;;;;;;3383:18;3437:19;;;3459:4;3437:19;;;;;;;;:26;;-1:-1:-1;;3437:26:7;;;;;;3188:184;-1:-1:-1;3404:22:7;;;3478:41;;;;3188:184;;3478:41;;;;;;;;;;2926:600;;;;;;;:::o;367:128::-;;;;;;;;;;;;;;;;;;;:::o;4586:496::-;4756:12;4822:15;4879:3;:8;;;4905:3;:6;;;4929:3;:9;;;4956:3;:7;;;4981:3;:9;;;5018:3;:8;;;5008:19;;;;;;4851:190;;;;;;;;;;;;;;;;;;-1:-1:-1;;4851:190:7;;;;;;;;;;4792:283;;;5055:10;;4851:190;4792:283;;;;;;;;;;;;;;;;4785:290;;4586:496;;;;;:::o;550:39::-;;;;;;;;;;;;;;;:::o;1419:807::-;1653:12;1667:16;1695:17;1708:3;1695:12;:17::i;:::-;1722:66;1733:3;1738:15;1755;1772:10;;1722:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1722:66:7;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1784:3:7;;-1:-1:-1;1784:3:7;;;;1722:66;;1784:3;;;;1722:66;;;;;;;;;-1:-1:-1;1722:10:7;;-1:-1:-1;;;1722:66:7:i;:::-;1798:17;1811:3;1798:12;:17::i;:::-;1901:3;:6;;;-1:-1:-1;;;;;1901:11:7;1919:3;:7;;;1936:3;:9;;;1964:3;:8;;;1974:3;:8;;;1947:36;;;;;;;;;;;;;;-1:-1:-1;;1947:36:7;;;;;;;;;;1901:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1885:99:7;;-1:-1:-1;1885:99:7;-1:-1:-1;1999:21:7;:23;1994:196;;2138:8;;2130:49;;-1:-1:-1;;;;;2130:26:7;;;;2157:21;2130:49;;;;;2138:8;2130:49;2138:8;2130:49;2157:21;2130:26;:49;;;;;;;;;;;;;;;;;;;;;1994:196;1419:807;;;;;;;;;;:::o;2474:446::-;2591:6;2586:167;2603:26;;;2586:167;;;2650:8;2667;;2677:1;2661:18;;;;;;;;;;;-1:-1:-1;;;;;;2661:18:7;;-1:-1:-1;;;;;2701:8:7;;;;;:20;;-1:-1:-1;;;;;;;;;;2713:8:7;;;;2701:20;2693:49;;;;-1:-1:-1;;;2693:49:7;;;;;;;;;;;;;;;;;-1:-1:-1;2631:3:7;;2586:167;;;;2763:25;2815:8;;2830:14;;;;;;;;;;;;;;;;;2851:10;;2798:64;;;;;;;;;;;;;;;;;;;;;;;;;;2763:100;;2873:40;2901:11;2873:27;:40::i;:::-;2474:446;;;;;:::o;2233:136::-;2334:9;;;;2321:8;;-1:-1:-1;;;;;2314:16:7;;;;;:6;:16;;;;;;:29;2306:56;;;;-1:-1:-1;;;2306:56:7;;;;;;;;;2233:136;:::o;3952:628::-;4177:24;;;;:7;:24;;;;;;;;4169:66;;;;-1:-1:-1;;;4169:66:7;;;;;;;;;4253:10;:27;;;;;;;;;;;;;4245:69;;;;-1:-1:-1;;;4245:69:7;;;;;;;;;4324:14;4397:15;4440:45;4452:3;4457:15;4474:10;4440:11;:45::i;:::-;4430:56;;;;;;;4351:149;;;;;;;;;;;;-1:-1:-1;;4351:149:7;;;;;;;;;4341:160;;4351:149;4341:160;;;;4542:8;;4341:160;;-1:-1:-1;;;;;;4519:31:7;:19;4341:160;4534:3;4519:19;:14;:19;:::i;:::-;-1:-1:-1;;;;;4519:31:7;;4511:62;;;;-1:-1:-1;;;4511:62:7;;;;;;;;;3952:628;;;;;;:::o;2375:93::-;2450:8;-1:-1:-1;;;;;2443:16:7;;;;;:6;:16;;;;;:18;;;;;;2375:93::o;3532:256::-;3642:29;;;;;;;;;;3616:23;3681:27;;;;;;;;;;;;:34;;-1:-1:-1;;3681:34:7;3711:4;3681:34;;;3730:51;;3642:29;;3730:51;;;;3658:11;;3730:51;;;;;;;;;;3532:256;;:::o;1064:2068:36:-;1142:7;1203:9;:16;1223:2;1203:22;1199:94;;1241:41;;-1:-1:-1;;;1241:41:36;;;;;;;;1199:94;1643:4;1628:20;;1622:27;1688:4;1673:20;;1667:27;1741:4;1726:20;;1720:27;1359:9;1712:36;2659:66;2646:79;;2642:154;;;2741:44;;-1:-1:-1;;;2741:44:36;;;;;;;;2642:154;2810:1;:7;;2815:2;2810:7;;:18;;;;;2821:1;:7;;2826:2;2821:7;;2810:18;2806:93;;;2844:44;;-1:-1:-1;;;2844:44:36;;;;;;;;2806:93;2993:14;3010:24;3020:4;3026:1;3029;3032;3010:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3010:24:36;;-1:-1:-1;;3010:24:36;;;-1:-1:-1;;;;;;;3052:20:36;;3044:57;;;;-1:-1:-1;;;3044:57:36;;;;;;;;;3119:6;1064:2068;-1:-1:-1;;;;;;1064:2068:36:o;293:336:-1:-;;;407:3;400:4;392:6;388:17;384:27;374:2;;-1:-1;;415:12;374:2;-1:-1;445:20;;485:18;474:30;;471:2;;;-1:-1;;507:12;471:2;551:4;543:6;539:17;527:29;;602:3;551:4;582:17;543:6;568:32;;565:41;562:2;;;619:1;;609:12;562:2;367:262;;;;;;638:440;;739:3;732:4;724:6;720:17;716:27;706:2;;-1:-1;;747:12;706:2;794:6;781:20;24304:18;24296:6;24293:30;24290:2;;;-1:-1;;24326:12;24290:2;816:64;24399:9;24380:17;;-1:-1;;24376:33;24467:4;24457:15;816:64;;;807:73;;900:6;893:5;886:21;1004:3;24467:4;995:6;928;986:16;;983:25;980:2;;;1021:1;;1011:12;980:2;26148:6;24467:4;928:6;924:17;24467:4;962:5;958:16;26125:30;26204:1;26186:16;;;24467:4;26186:16;26179:27;962:5;699:379;-1:-1;;699:379;1485:1146;;1606:4;1594:9;1589:3;1585:19;1581:30;1578:2;;;-1:-1;;1614:12;1578:2;1642:20;1606:4;1642:20;;;1633:29;;85:6;72:20;97:33;124:5;97:33;;;1719:75;;1853:2;1907:22;;72:20;97:33;72:20;97:33;;;1886:49;1853:2;1872:5;1868:16;1861:75;;1998:2;2056:9;2052:22;2705:20;1998:2;2017:5;2013:16;2006:75;2141:2;2199:9;2195:22;2705:20;2141:2;2160:5;2156:16;2149:75;2286:3;2345:9;2341:22;2705:20;2286:3;2306:5;2302:16;2295:75;2459:3;2448:9;2444:19;2431:33;2484:18;2476:6;2473:30;2470:2;;;-1:-1;;2506:12;2470:2;2551:58;2605:3;2596:6;2585:9;2581:22;2551:58;;;2459:3;2537:5;2533:16;2526:84;;1572:1059;;;;;2775:241;;2879:2;2867:9;2858:7;2854:23;2850:32;2847:2;;;-1:-1;;2885:12;2847:2;72:20;;-1:-1;;;;;25833:54;;27042:35;;27032:2;;-1:-1;;27081:12;27032:2;2937:63;2841:175;-1:-1;;;2841:175;3023:241;;3127:2;3115:9;3106:7;3102:23;3098:32;3095:2;;;-1:-1;;3133:12;3095:2;-1:-1;209:20;;3089:175;-1:-1;3089:175;3271:618;;;;;3432:2;3420:9;3411:7;3407:23;3403:32;3400:2;;;-1:-1;;3438:12;3400:2;3496:17;3483:31;3534:18;;3526:6;3523:30;3520:2;;;-1:-1;;3556:12;3520:2;3594:65;3651:7;3642:6;3631:9;3627:22;3594:65;;;3584:75;;-1:-1;3584:75;-1:-1;3724:2;3709:18;;3696:32;;-1:-1;3737:30;;;3734:2;;;-1:-1;;3770:12;3734:2;;3808:65;3865:7;3856:6;3845:9;3841:22;3808:65;;;3394:495;;;;-1:-1;3798:75;-1:-1;;;;3394:495;3896:1141;;;;;;;;4138:3;4126:9;4117:7;4113:23;4109:33;4106:2;;;-1:-1;;4145:12;4106:2;4203:17;4190:31;4241:18;;4233:6;4230:30;4227:2;;;-1:-1;;4263:12;4227:2;4293:85;4370:7;4361:6;4350:9;4346:22;4293:85;;;4283:95;;4415:2;4458:9;4454:22;209:20;4423:63;;4523:2;4566:9;4562:22;209:20;4531:63;;4659:2;4648:9;4644:18;4631:32;4617:46;;4241:18;4675:6;4672:30;4669:2;;;-1:-1;;4705:12;4669:2;4743:64;4799:7;4790:6;4779:9;4775:22;4743:64;;;4733:74;;-1:-1;4733:74;-1:-1;4872:3;4857:19;;4844:33;;-1:-1;4886:30;;;4883:2;;;-1:-1;;4919:12;4883:2;;4957:64;5013:7;5004:6;4993:9;4989:22;4957:64;;;4100:937;;;;-1:-1;4100:937;;-1:-1;4100:937;;;;4947:74;;-1:-1;;;4100:937;5044:745;;;;5223:2;5211:9;5202:7;5198:23;5194:32;5191:2;;;-1:-1;;5229:12;5191:2;5287:17;5274:31;5325:18;;5317:6;5314:30;5311:2;;;-1:-1;;5347:12;5311:2;5377:85;5454:7;5445:6;5434:9;5430:22;5377:85;;;5367:95;;5499:2;5542:9;5538:22;209:20;5507:63;;5635:2;5624:9;5620:18;5607:32;5593:46;;5325:18;5651:6;5648:30;5645:2;;;-1:-1;;5681:12;5645:2;;5711:62;5765:7;5756:6;5745:9;5741:22;5711:62;;;5701:72;;;5185:604;;;;;;6950:343;;7092:5;24576:12;24861:6;24856:3;24849:19;7185:52;7230:6;24898:4;24893:3;24889:14;24898:4;7211:5;7207:16;7185:52;;;24399:9;26844:14;-1:-1;;26840:28;7249:39;;;;24898:4;7249:39;;7040:253;-1:-1;;7040:253;13143:567;;6431:5;6408:3;6401:37;7460:5;24576:12;7571:52;7616:6;13460:2;13455:3;13451:12;13460:2;7597:5;7593:16;7571:52;;;24576:12;;;7635:16;;7571:52;24576:12;13460:2;7635:16;;;;7593;;7571:52;;;7635:16;13460:2;7635:16;;13351:359;-1:-1;;;;;13351:359;13717:291;;26148:6;26143:3;26138;26125:30;26186:16;;26179:27;;;26186:16;13861:147;-1:-1;13861:147;14015:271;;7460:5;24576:12;7571:52;7616:6;7611:3;7604:4;7597:5;7593:16;7571:52;;;7635:16;;;;;14149:137;-1:-1;;14149:137;14293:410;;7460:5;24576:12;7571:52;7616:6;7611:3;7604:4;7597:5;7593:16;7571:52;;;26955:2;26951:14;;;;-1:-1;;26951:14;7635:16;;;;6149:58;;;14675:2;14666:12;;14455:248;-1:-1;;14455:248;14710:1171;;26148:6;26143:3;26138;26125:30;-1:-1;;;26186:16;;;11078:24;;;24576:12;;7571:52;24576:12;11063:1;11121:11;;7604:4;7593:16;;7571:52;;;7644:6;11125:3;7635:16;-1:-1;;;11063:1;7635:16;;10734:24;26148:6;26143:3;10777:11;7635:16;10777:11;26125:30;26186:16;;;10777:11;26186:16;26179:27;;;-1:-1;26186:16;15164:717;-1:-1;;;;;;15164:717;15888:659;-1:-1;;;10327:87;;10312:1;10433:11;;6401:37;;;;16399:12;;;6401:37;16510:12;;;16133:414;16554:780;-1:-1;;;;;25833:54;;;5883:45;;25833:54;;;;16986:2;16971:18;;5883:45;17069:2;17054:18;;6401:37;;;;17152:2;17137:18;;6401:37;17235:3;17220:19;;6401:37;25844:42;17304:19;;6401:37;;;;16821:3;16806:19;;16792:542;17341:210;25666:13;;25659:21;6284:34;;17462:2;17447:18;;17433:118;17558:405;;6311:5;25666:13;25659:21;6291:3;6284:34;17725:2;17837;17826:9;17822:18;17815:48;17877:76;17725:2;17714:9;17710:18;17939:6;17877:76;;;17869:84;17696:267;-1:-1;;;;17696:267;17970:700;6401:37;;;18390:2;18375:18;;6401:37;;;;18473:2;18458:18;;6401:37;;;;18556:2;18541:18;;6401:37;-1:-1;;;;;25833:54;18655:3;18640:19;;5883:45;18225:3;18210:19;;18196:474;18677:548;6401:37;;;26049:4;26038:16;;;;19045:2;19030:18;;13096:35;19128:2;19113:18;;6401:37;19211:2;19196:18;;6401:37;18884:3;18869:19;;18855:370;19232:306;;19377:2;19398:17;19391:47;19452:76;19377:2;19366:9;19362:18;19514:6;19452:76;;19862:416;20062:2;20076:47;;;8955:2;20047:18;;;24849:19;8991:26;24889:14;;;8971:47;9037:12;;;20033:245;20285:416;20485:2;20499:47;;;9288:2;20470:18;;;24849:19;9324:33;24889:14;;;9304:54;9377:12;;;20456:245;20708:416;20908:2;20922:47;;;9628:2;20893:18;;;24849:19;-1:-1;;;24889:14;;;9644:39;9702:12;;;20879:245;21131:416;21331:2;21345:47;;;9953:2;21316:18;;;24849:19;-1:-1;;;24889:14;;;9969:37;10025:12;;;21302:245;21554:416;21754:2;21768:47;;;11371:2;21739:18;;;24849:19;11407:34;24889:14;;;11387:55;-1:-1;;;11462:12;;;11455:26;11500:12;;;21725:245;21977:416;22177:2;22191:47;;;11751:2;22162:18;;;24849:19;11787:31;24889:14;;;11767:52;11838:12;;;22148:245;22400:416;22600:2;22614:47;;;12089:2;22585:18;;;24849:19;12125:31;24889:14;;;12105:52;12176:12;;;22571:245;22823:416;23023:2;23037:47;;;12427:2;23008:18;;;24849:19;12463:34;24889:14;;;12443:55;-1:-1;;;12518:12;;;12511:26;12556:12;;;22994:245;23246:416;23446:2;23460:47;;;12807:2;23431:18;;;24849:19;-1:-1;;;24889:14;;;12823:41;12883:12;;;23417:245;23669:222;6401:37;;;23796:2;23781:18;;23767:124;23898:256;23960:2;23954:9;23986:17;;;24061:18;24046:34;;24082:22;;;24043:62;24040:2;;;24118:1;;24108:12;24040:2;23960;24127:22;23938:216;;-1:-1;23938:216;26221:268;26286:1;26293:101;26307:6;26304:1;26301:13;26293:101;;;26374:11;;;26368:18;26355:11;;;26348:39;26329:2;26322:10;26293:101;;;26409:6;26406:1;26403:13;26400:2;;;26286:1;26465:6;26460:3;26456:16;26449:27;26400:2;;26270:219;;;;26983:117;-1:-1;;;;;25833:54;;27042:35;;27032:2;;27091:1;;27081:12",
    "source": "// SPDX-License-Identifier:MIT\npragma solidity ^0.6.2;\npragma experimental ABIEncoderV2;\n\nimport \"@openzeppelin/contracts/cryptography/ECDSA.sol\";\nimport \"./IForwarder.sol\";\n\ncontract Forwarder is IForwarder {\n    using ECDSA for bytes32;\n\n    string public constant GENERIC_PARAMS = \"address from,address to,uint256 value,uint256 gas,uint256 nonce,bytes data\";\n\n    string public constant EIP712_DOMAIN_TYPE = \"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\";\n\n    mapping(bytes32 => bool) public typeHashes;\n    mapping(bytes32 => bool) public domains;\n\n    // Nonces of senders, used to prevent replay attacks\n    mapping(address => uint256) private nonces;\n\n    // solhint-disable-next-line no-empty-blocks\n    receive() external payable {}\n\n    function getNonce(address from)\n    public view override\n    returns (uint256) {\n        return nonces[from];\n    }\n\n    constructor() public {\n\n        string memory requestType = string(abi.encodePacked(\"ForwardRequest(\", GENERIC_PARAMS, \")\"));\n        registerRequestTypeInternal(requestType);\n    }\n\n    function verify(\n        ForwardRequest memory req,\n        bytes32 domainSeparator,\n        bytes32 requestTypeHash,\n        bytes calldata suffixData,\n        bytes calldata sig)\n    external override view {\n\n        _verifyNonce(req);\n        _verifySig(req, domainSeparator, requestTypeHash, suffixData, sig);\n    }\n\n    function execute(\n        ForwardRequest memory req,\n        bytes32 domainSeparator,\n        bytes32 requestTypeHash,\n        bytes calldata suffixData,\n        bytes calldata sig\n    )\n    external payable\n    override\n    returns (bool success, bytes memory ret) {\n        _verifyNonce(req);\n        _verifySig(req, domainSeparator, requestTypeHash, suffixData, sig);\n        _updateNonce(req);\n\n        // solhint-disable-next-line avoid-low-level-calls\n        (success,ret) = req.to.call{gas : req.gas, value : req.value}(abi.encodePacked(req.data, req.from));\n        if ( address(this).balance>0 ) {\n            //can't fail: req.from signed (off-chain) the request, so it must be an EOA...\n            payable(req.from).transfer(address(this).balance);\n        }\n        return (success,ret);\n    }\n\n\n    function _verifyNonce(ForwardRequest memory req) internal view {\n        require(nonces[req.from] == req.nonce, \"nonce mismatch\");\n    }\n\n    function _updateNonce(ForwardRequest memory req) internal {\n        nonces[req.from]++;\n    }\n\n    function registerRequestType(string calldata typeName, string calldata typeSuffix) external override {\n\n        for (uint i = 0; i < bytes(typeName).length; i++) {\n            bytes1 c = bytes(typeName)[i];\n            require(c != \"(\" && c != \")\", \"invalid typename\");\n        }\n\n        string memory requestType = string(abi.encodePacked(typeName, \"(\", GENERIC_PARAMS, \",\", typeSuffix));\n        registerRequestTypeInternal(requestType);\n    }\n\n    function registerDomainSeparator(string calldata name, string calldata version) external override {\n        uint256 chainId;\n        /* solhint-disable-next-line no-inline-assembly */\n        assembly { chainId := chainid() }\n\n        bytes memory domainValue = abi.encode(\n            keccak256(bytes(EIP712_DOMAIN_TYPE)),\n            keccak256(bytes(name)),\n            keccak256(bytes(version)),\n            chainId,\n            address(this));\n\n        bytes32 domainHash = keccak256(domainValue);\n\n        domains[domainHash] = true;\n        emit DomainRegistered(domainHash, domainValue);\n    }\n\n    function registerRequestTypeInternal(string memory requestType) internal {\n\n        bytes32 requestTypehash = keccak256(bytes(requestType));\n        typeHashes[requestTypehash] = true;\n        emit RequestTypeRegistered(requestTypehash, requestType);\n    }\n\n    event DomainRegistered(bytes32 indexed domainSeparator, bytes domainValue);\n\n    event RequestTypeRegistered(bytes32 indexed typeHash, string typeStr);\n\n\n    function _verifySig(\n        ForwardRequest memory req,\n        bytes32 domainSeparator,\n        bytes32 requestTypeHash,\n        bytes memory suffixData,\n        bytes memory sig)\n    internal\n    view\n    {\n        require(domains[domainSeparator], \"unregistered domain separator\");\n        require(typeHashes[requestTypeHash], \"unregistered request typehash\");\n        bytes32 digest = keccak256(abi.encodePacked(\n                \"\\x19\\x01\", domainSeparator,\n                keccak256(_getEncoded(req, requestTypeHash, suffixData))\n            ));\n        require(digest.recover(sig) == req.from, \"signature mismatch\");\n    }\n\n    function _getEncoded(\n        ForwardRequest memory req,\n        bytes32 requestTypeHash,\n        bytes memory suffixData\n    )\n    public\n    pure\n    returns (\n        bytes memory\n    ) {\n        return abi.encodePacked(\n            requestTypeHash,\n            abi.encode(\n                req.from,\n                req.to,\n                req.value,\n                req.gas,\n                req.nonce,\n                keccak256(req.data)\n            ),\n            suffixData\n        );\n    }\n}\n",
    "sourcePath": "/Users/dror/IdeaProjects/gsn/contracts/forwarder/Forwarder.sol",
    "ast": {
        "absolutePath": "/Users/dror/IdeaProjects/gsn/contracts/forwarder/Forwarder.sol",
        "exportedSymbols": {
            "Forwarder": [
                2934
            ]
        },
        "id": 2935,
        "license": "MIT",
        "nodeType": "SourceUnit",
        "nodes": [
            {
                "id": 2481,
                "literals": [
                    "solidity",
                    "^",
                    "0.6",
                    ".2"
                ],
                "nodeType": "PragmaDirective",
                "src": "31:23:7"
            },
            {
                "id": 2482,
                "literals": [
                    "experimental",
                    "ABIEncoderV2"
                ],
                "nodeType": "PragmaDirective",
                "src": "55:33:7"
            },
            {
                "absolutePath": "@openzeppelin/contracts/cryptography/ECDSA.sol",
                "file": "@openzeppelin/contracts/cryptography/ECDSA.sol",
                "id": 2483,
                "nodeType": "ImportDirective",
                "scope": 2935,
                "sourceUnit": 6566,
                "src": "90:56:7",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/dror/IdeaProjects/gsn/contracts/forwarder/IForwarder.sol",
                "file": "./IForwarder.sol",
                "id": 2484,
                "nodeType": "ImportDirective",
                "scope": 2935,
                "sourceUnit": 3007,
                "src": "147:26:7",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "abstract": false,
                "baseContracts": [
                    {
                        "arguments": null,
                        "baseName": {
                            "contractScope": null,
                            "id": 2485,
                            "name": "IForwarder",
                            "nodeType": "UserDefinedTypeName",
                            "referencedDeclaration": 3006,
                            "src": "197:10:7",
                            "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IForwarder_$3006",
                                "typeString": "contract IForwarder"
                            }
                        },
                        "id": 2486,
                        "nodeType": "InheritanceSpecifier",
                        "src": "197:10:7"
                    }
                ],
                "contractDependencies": [
                    3006
                ],
                "contractKind": "contract",
                "documentation": null,
                "fullyImplemented": true,
                "id": 2934,
                "linearizedBaseContracts": [
                    2934,
                    3006
                ],
                "name": "Forwarder",
                "nodeType": "ContractDefinition",
                "nodes": [
                    {
                        "id": 2489,
                        "libraryName": {
                            "contractScope": null,
                            "id": 2487,
                            "name": "ECDSA",
                            "nodeType": "UserDefinedTypeName",
                            "referencedDeclaration": 6565,
                            "src": "220:5:7",
                            "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ECDSA_$6565",
                                "typeString": "library ECDSA"
                            }
                        },
                        "nodeType": "UsingForDirective",
                        "src": "214:24:7",
                        "typeName": {
                            "id": 2488,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "230:7:7",
                            "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                            }
                        }
                    },
                    {
                        "constant": true,
                        "functionSelector": "066a310c",
                        "id": 2492,
                        "mutability": "constant",
                        "name": "GENERIC_PARAMS",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2934,
                        "src": "244:116:7",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string"
                        },
                        "typeName": {
                            "id": 2490,
                            "name": "string",
                            "nodeType": "ElementaryTypeName",
                            "src": "244:6:7",
                            "typeDescriptions": {
                                "typeIdentifier": "t_string_storage_ptr",
                                "typeString": "string"
                            }
                        },
                        "value": {
                            "argumentTypes": null,
                            "hexValue": "616464726573732066726f6d2c6164647265737320746f2c75696e743235362076616c75652c75696e74323536206761732c75696e74323536206e6f6e63652c62797465732064617461",
                            "id": 2491,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "284:76:7",
                            "subdenomination": null,
                            "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_89bcdd0fee8c360248ddfd07733b7210c5d14e63c935f3a66aa03f096b973097",
                                "typeString": "literal_string \"address from,address to,uint256 value,uint256 gas,uint256 nonce,bytes data\""
                            },
                            "value": "address from,address to,uint256 value,uint256 gas,uint256 nonce,bytes data"
                        },
                        "visibility": "public"
                    },
                    {
                        "constant": true,
                        "functionSelector": "c3f28abd",
                        "id": 2495,
                        "mutability": "constant",
                        "name": "EIP712_DOMAIN_TYPE",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2934,
                        "src": "367:128:7",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string"
                        },
                        "typeName": {
                            "id": 2493,
                            "name": "string",
                            "nodeType": "ElementaryTypeName",
                            "src": "367:6:7",
                            "typeDescriptions": {
                                "typeIdentifier": "t_string_storage_ptr",
                                "typeString": "string"
                            }
                        },
                        "value": {
                            "argumentTypes": null,
                            "hexValue": "454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429",
                            "id": 2494,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "411:84:7",
                            "subdenomination": null,
                            "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f",
                                "typeString": "literal_string \"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\""
                            },
                            "value": "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"
                        },
                        "visibility": "public"
                    },
                    {
                        "constant": false,
                        "functionSelector": "21fe98df",
                        "id": 2499,
                        "mutability": "mutable",
                        "name": "typeHashes",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2934,
                        "src": "502:42:7",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                            "typeString": "mapping(bytes32 => bool)"
                        },
                        "typeName": {
                            "id": 2498,
                            "keyType": {
                                "id": 2496,
                                "name": "bytes32",
                                "nodeType": "ElementaryTypeName",
                                "src": "510:7:7",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                }
                            },
                            "nodeType": "Mapping",
                            "src": "502:24:7",
                            "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                                "typeString": "mapping(bytes32 => bool)"
                            },
                            "valueType": {
                                "id": 2497,
                                "name": "bool",
                                "nodeType": "ElementaryTypeName",
                                "src": "521:4:7",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                }
                            }
                        },
                        "value": null,
                        "visibility": "public"
                    },
                    {
                        "constant": false,
                        "functionSelector": "c722f177",
                        "id": 2503,
                        "mutability": "mutable",
                        "name": "domains",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2934,
                        "src": "550:39:7",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                            "typeString": "mapping(bytes32 => bool)"
                        },
                        "typeName": {
                            "id": 2502,
                            "keyType": {
                                "id": 2500,
                                "name": "bytes32",
                                "nodeType": "ElementaryTypeName",
                                "src": "558:7:7",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                }
                            },
                            "nodeType": "Mapping",
                            "src": "550:24:7",
                            "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                                "typeString": "mapping(bytes32 => bool)"
                            },
                            "valueType": {
                                "id": 2501,
                                "name": "bool",
                                "nodeType": "ElementaryTypeName",
                                "src": "569:4:7",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                }
                            }
                        },
                        "value": null,
                        "visibility": "public"
                    },
                    {
                        "constant": false,
                        "id": 2507,
                        "mutability": "mutable",
                        "name": "nonces",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2934,
                        "src": "653:42:7",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                            "typeString": "mapping(address => uint256)"
                        },
                        "typeName": {
                            "id": 2506,
                            "keyType": {
                                "id": 2504,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "661:7:7",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                }
                            },
                            "nodeType": "Mapping",
                            "src": "653:27:7",
                            "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                            },
                            "valueType": {
                                "id": 2505,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "672:7:7",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                }
                            }
                        },
                        "value": null,
                        "visibility": "private"
                    },
                    {
                        "body": {
                            "id": 2510,
                            "nodeType": "Block",
                            "src": "778:2:7",
                            "statements": []
                        },
                        "documentation": null,
                        "id": 2511,
                        "implemented": true,
                        "kind": "receive",
                        "modifiers": [],
                        "name": "",
                        "nodeType": "FunctionDefinition",
                        "overrides": null,
                        "parameters": {
                            "id": 2508,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "758:2:7"
                        },
                        "returnParameters": {
                            "id": 2509,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "778:0:7"
                        },
                        "scope": 2934,
                        "src": "751:29:7",
                        "stateMutability": "payable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            2957
                        ],
                        "body": {
                            "id": 2523,
                            "nodeType": "Block",
                            "src": "865:36:7",
                            "statements": [
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                            "argumentTypes": null,
                                            "id": 2519,
                                            "name": "nonces",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2507,
                                            "src": "882:6:7",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                "typeString": "mapping(address => uint256)"
                                            }
                                        },
                                        "id": 2521,
                                        "indexExpression": {
                                            "argumentTypes": null,
                                            "id": 2520,
                                            "name": "from",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2513,
                                            "src": "889:4:7",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "882:12:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "functionReturnParameters": 2518,
                                    "id": 2522,
                                    "nodeType": "Return",
                                    "src": "875:19:7"
                                }
                            ]
                        },
                        "documentation": null,
                        "functionSelector": "2d0335ab",
                        "id": 2524,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getNonce",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 2515,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "834:8:7"
                        },
                        "parameters": {
                            "id": 2514,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2513,
                                    "mutability": "mutable",
                                    "name": "from",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2524,
                                    "src": "804:12:7",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 2512,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "804:7:7",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "803:14:7"
                        },
                        "returnParameters": {
                            "id": 2518,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2517,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2524,
                                    "src": "856:7:7",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 2516,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "856:7:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "855:9:7"
                        },
                        "scope": 2934,
                        "src": "786:115:7",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "body": {
                            "id": 2543,
                            "nodeType": "Block",
                            "src": "928:160:7",
                            "statements": [
                                {
                                    "assignments": [
                                        2528
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 2528,
                                            "mutability": "mutable",
                                            "name": "requestType",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 2543,
                                            "src": "939:25:7",
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_string_memory_ptr",
                                                "typeString": "string"
                                            },
                                            "typeName": {
                                                "id": 2527,
                                                "name": "string",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "939:6:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_string_storage_ptr",
                                                    "typeString": "string"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 2538,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "arguments": [
                                                    {
                                                        "argumentTypes": null,
                                                        "hexValue": "466f72776172645265717565737428",
                                                        "id": 2533,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "string",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "991:17:7",
                                                        "subdenomination": null,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_stringliteral_02400580691f62fd612767b414e7b88f024d8265e514f15245995a20cf0d8379",
                                                            "typeString": "literal_string \"ForwardRequest(\""
                                                        },
                                                        "value": "ForwardRequest("
                                                    },
                                                    {
                                                        "argumentTypes": null,
                                                        "id": 2534,
                                                        "name": "GENERIC_PARAMS",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2492,
                                                        "src": "1010:14:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_string_memory_ptr",
                                                            "typeString": "string memory"
                                                        }
                                                    },
                                                    {
                                                        "argumentTypes": null,
                                                        "hexValue": "29",
                                                        "id": 2535,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "string",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "1026:3:7",
                                                        "subdenomination": null,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_stringliteral_59d76dc3b33357eda30db1508968fbb18f21b9cd2442f1559b20154ddaa4d7ed",
                                                            "typeString": "literal_string \")\""
                                                        },
                                                        "value": ")"
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_stringliteral_02400580691f62fd612767b414e7b88f024d8265e514f15245995a20cf0d8379",
                                                            "typeString": "literal_string \"ForwardRequest(\""
                                                        },
                                                        {
                                                            "typeIdentifier": "t_string_memory_ptr",
                                                            "typeString": "string memory"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_stringliteral_59d76dc3b33357eda30db1508968fbb18f21b9cd2442f1559b20154ddaa4d7ed",
                                                            "typeString": "literal_string \")\""
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 2531,
                                                        "name": "abi",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": -1,
                                                        "src": "974:3:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_abi",
                                                            "typeString": "abi"
                                                        }
                                                    },
                                                    "id": 2532,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "memberName": "encodePacked",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": null,
                                                    "src": "974:16:7",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                                        "typeString": "function () pure returns (bytes memory)"
                                                    }
                                                },
                                                "id": 2536,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "974:56:7",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "id": 2530,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "nodeType": "ElementaryTypeNameExpression",
                                            "src": "967:6:7",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                                                "typeString": "type(string storage pointer)"
                                            },
                                            "typeName": {
                                                "id": 2529,
                                                "name": "string",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "967:6:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": null,
                                                    "typeString": null
                                                }
                                            }
                                        },
                                        "id": 2537,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "967:64:7",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_memory_ptr",
                                            "typeString": "string memory"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "939:92:7"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 2540,
                                                "name": "requestType",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2528,
                                                "src": "1069:11:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_string_memory_ptr",
                                                    "typeString": "string memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_string_memory_ptr",
                                                    "typeString": "string memory"
                                                }
                                            ],
                                            "id": 2539,
                                            "name": "registerRequestTypeInternal",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2830,
                                            "src": "1041:27:7",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (string memory)"
                                            }
                                        },
                                        "id": 2541,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1041:40:7",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2542,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1041:40:7"
                                }
                            ]
                        },
                        "documentation": null,
                        "id": 2544,
                        "implemented": true,
                        "kind": "constructor",
                        "modifiers": [],
                        "name": "",
                        "nodeType": "FunctionDefinition",
                        "overrides": null,
                        "parameters": {
                            "id": 2525,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "918:2:7"
                        },
                        "returnParameters": {
                            "id": 2526,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "928:0:7"
                        },
                        "scope": 2934,
                        "src": "907:181:7",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            2971
                        ],
                        "body": {
                            "id": 2570,
                            "nodeType": "Block",
                            "src": "1302:111:7",
                            "statements": [
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 2559,
                                                "name": "req",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2546,
                                                "src": "1326:3:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                                    "typeString": "struct IForwarder.ForwardRequest memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                                    "typeString": "struct IForwarder.ForwardRequest memory"
                                                }
                                            ],
                                            "id": 2558,
                                            "name": "_verifyNonce",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2670,
                                            "src": "1313:12:7",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_struct$_ForwardRequest_$2950_memory_ptr_$returns$__$",
                                                "typeString": "function (struct IForwarder.ForwardRequest memory) view"
                                            }
                                        },
                                        "id": 2560,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1313:17:7",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2561,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1313:17:7"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 2563,
                                                "name": "req",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2546,
                                                "src": "1351:3:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                                    "typeString": "struct IForwarder.ForwardRequest memory"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 2564,
                                                "name": "domainSeparator",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2548,
                                                "src": "1356:15:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 2565,
                                                "name": "requestTypeHash",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2550,
                                                "src": "1373:15:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 2566,
                                                "name": "suffixData",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2552,
                                                "src": "1390:10:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 2567,
                                                "name": "sig",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2554,
                                                "src": "1402:3:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                                    "typeString": "struct IForwarder.ForwardRequest memory"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            ],
                                            "id": 2562,
                                            "name": "_verifySig",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2898,
                                            "src": "1340:10:7",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_struct$_ForwardRequest_$2950_memory_ptr_$_t_bytes32_$_t_bytes32_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$__$",
                                                "typeString": "function (struct IForwarder.ForwardRequest memory,bytes32,bytes32,bytes memory,bytes memory) view"
                                            }
                                        },
                                        "id": 2568,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1340:66:7",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2569,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1340:66:7"
                                }
                            ]
                        },
                        "documentation": null,
                        "functionSelector": "992d82c3",
                        "id": 2571,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "verify",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 2556,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "1288:8:7"
                        },
                        "parameters": {
                            "id": 2555,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2546,
                                    "mutability": "mutable",
                                    "name": "req",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2571,
                                    "src": "1119:25:7",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                        "typeString": "struct IForwarder.ForwardRequest"
                                    },
                                    "typeName": {
                                        "contractScope": null,
                                        "id": 2545,
                                        "name": "ForwardRequest",
                                        "nodeType": "UserDefinedTypeName",
                                        "referencedDeclaration": 2950,
                                        "src": "1119:14:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_ForwardRequest_$2950_storage_ptr",
                                            "typeString": "struct IForwarder.ForwardRequest"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2548,
                                    "mutability": "mutable",
                                    "name": "domainSeparator",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2571,
                                    "src": "1154:23:7",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 2547,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1154:7:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2550,
                                    "mutability": "mutable",
                                    "name": "requestTypeHash",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2571,
                                    "src": "1187:23:7",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 2549,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1187:7:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2552,
                                    "mutability": "mutable",
                                    "name": "suffixData",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2571,
                                    "src": "1220:25:7",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 2551,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1220:5:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2554,
                                    "mutability": "mutable",
                                    "name": "sig",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2571,
                                    "src": "1255:18:7",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 2553,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1255:5:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1109:165:7"
                        },
                        "returnParameters": {
                            "id": 2557,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1302:0:7"
                        },
                        "scope": 2934,
                        "src": "1094:319:7",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            2989
                        ],
                        "body": {
                            "id": 2652,
                            "nodeType": "Block",
                            "src": "1685:541:7",
                            "statements": [
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 2590,
                                                "name": "req",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2573,
                                                "src": "1708:3:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                                    "typeString": "struct IForwarder.ForwardRequest memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                                    "typeString": "struct IForwarder.ForwardRequest memory"
                                                }
                                            ],
                                            "id": 2589,
                                            "name": "_verifyNonce",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2670,
                                            "src": "1695:12:7",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_struct$_ForwardRequest_$2950_memory_ptr_$returns$__$",
                                                "typeString": "function (struct IForwarder.ForwardRequest memory) view"
                                            }
                                        },
                                        "id": 2591,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1695:17:7",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2592,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1695:17:7"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 2594,
                                                "name": "req",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2573,
                                                "src": "1733:3:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                                    "typeString": "struct IForwarder.ForwardRequest memory"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 2595,
                                                "name": "domainSeparator",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2575,
                                                "src": "1738:15:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 2596,
                                                "name": "requestTypeHash",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2577,
                                                "src": "1755:15:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 2597,
                                                "name": "suffixData",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2579,
                                                "src": "1772:10:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 2598,
                                                "name": "sig",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2581,
                                                "src": "1784:3:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                                    "typeString": "struct IForwarder.ForwardRequest memory"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            ],
                                            "id": 2593,
                                            "name": "_verifySig",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2898,
                                            "src": "1722:10:7",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_struct$_ForwardRequest_$2950_memory_ptr_$_t_bytes32_$_t_bytes32_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$__$",
                                                "typeString": "function (struct IForwarder.ForwardRequest memory,bytes32,bytes32,bytes memory,bytes memory) view"
                                            }
                                        },
                                        "id": 2599,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1722:66:7",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2600,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1722:66:7"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 2602,
                                                "name": "req",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2573,
                                                "src": "1811:3:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                                    "typeString": "struct IForwarder.ForwardRequest memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                                    "typeString": "struct IForwarder.ForwardRequest memory"
                                                }
                                            ],
                                            "id": 2601,
                                            "name": "_updateNonce",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2682,
                                            "src": "1798:12:7",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_ForwardRequest_$2950_memory_ptr_$returns$__$",
                                                "typeString": "function (struct IForwarder.ForwardRequest memory)"
                                            }
                                        },
                                        "id": 2603,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1798:17:7",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2604,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1798:17:7"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 2624,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "argumentTypes": null,
                                            "components": [
                                                {
                                                    "argumentTypes": null,
                                                    "id": 2605,
                                                    "name": "success",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 2585,
                                                    "src": "1886:7:7",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                {
                                                    "argumentTypes": null,
                                                    "id": 2606,
                                                    "name": "ret",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 2587,
                                                    "src": "1894:3:7",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                        "typeString": "bytes memory"
                                                    }
                                                }
                                            ],
                                            "id": 2607,
                                            "isConstant": false,
                                            "isInlineArray": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "TupleExpression",
                                            "src": "1885:13:7",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                                                "typeString": "tuple(bool,bytes memory)"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "argumentTypes": null,
                                            "arguments": [
                                                {
                                                    "argumentTypes": null,
                                                    "arguments": [
                                                        {
                                                            "argumentTypes": null,
                                                            "expression": {
                                                                "argumentTypes": null,
                                                                "id": 2618,
                                                                "name": "req",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 2573,
                                                                "src": "1964:3:7",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                                                    "typeString": "struct IForwarder.ForwardRequest memory"
                                                                }
                                                            },
                                                            "id": 2619,
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "data",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 2949,
                                                            "src": "1964:8:7",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            }
                                                        },
                                                        {
                                                            "argumentTypes": null,
                                                            "expression": {
                                                                "argumentTypes": null,
                                                                "id": 2620,
                                                                "name": "req",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 2573,
                                                                "src": "1974:3:7",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                                                    "typeString": "struct IForwarder.ForwardRequest memory"
                                                                }
                                                            },
                                                            "id": 2621,
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "from",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 2939,
                                                            "src": "1974:8:7",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 2616,
                                                            "name": "abi",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": -1,
                                                            "src": "1947:3:7",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_magic_abi",
                                                                "typeString": "abi"
                                                            }
                                                        },
                                                        "id": 2617,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "memberName": "encodePacked",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": null,
                                                        "src": "1947:16:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                                            "typeString": "function () pure returns (bytes memory)"
                                                        }
                                                    },
                                                    "id": 2622,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "1947:36:7",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                        "typeString": "bytes memory"
                                                    }
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                        "typeString": "bytes memory"
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 2608,
                                                            "name": "req",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 2573,
                                                            "src": "1901:3:7",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                                                "typeString": "struct IForwarder.ForwardRequest memory"
                                                            }
                                                        },
                                                        "id": 2609,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "to",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 2941,
                                                        "src": "1901:6:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "id": 2610,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "call",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": null,
                                                    "src": "1901:11:7",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                                                        "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                                                    }
                                                },
                                                "id": 2615,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "names": [
                                                    "gas",
                                                    "value"
                                                ],
                                                "nodeType": "FunctionCallOptions",
                                                "options": [
                                                    {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 2611,
                                                            "name": "req",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 2573,
                                                            "src": "1919:3:7",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                                                "typeString": "struct IForwarder.ForwardRequest memory"
                                                            }
                                                        },
                                                        "id": 2612,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "gas",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 2945,
                                                        "src": "1919:7:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 2613,
                                                            "name": "req",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 2573,
                                                            "src": "1936:3:7",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                                                "typeString": "struct IForwarder.ForwardRequest memory"
                                                            }
                                                        },
                                                        "id": 2614,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "value",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 2943,
                                                        "src": "1936:9:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    }
                                                ],
                                                "src": "1901:45:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$gasvalue",
                                                    "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                                                }
                                            },
                                            "id": 2623,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "1901:83:7",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                                                "typeString": "tuple(bool,bytes memory)"
                                            }
                                        },
                                        "src": "1885:99:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2625,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1885:99:7"
                                },
                                {
                                    "condition": {
                                        "argumentTypes": null,
                                        "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        },
                                        "id": 2632,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "argumentTypes": null,
                                            "expression": {
                                                "argumentTypes": null,
                                                "arguments": [
                                                    {
                                                        "argumentTypes": null,
                                                        "id": 2628,
                                                        "name": "this",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": -28,
                                                        "src": "2007:4:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_contract$_Forwarder_$2934",
                                                            "typeString": "contract Forwarder"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_contract$_Forwarder_$2934",
                                                            "typeString": "contract Forwarder"
                                                        }
                                                    ],
                                                    "id": 2627,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "ElementaryTypeNameExpression",
                                                    "src": "1999:7:7",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_address_$",
                                                        "typeString": "type(address)"
                                                    },
                                                    "typeName": {
                                                        "id": 2626,
                                                        "name": "address",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "1999:7:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": null,
                                                            "typeString": null
                                                        }
                                                    }
                                                },
                                                "id": 2629,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "typeConversion",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "1999:13:7",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            },
                                            "id": 2630,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "balance",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": null,
                                            "src": "1999:21:7",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": ">",
                                        "rightExpression": {
                                            "argumentTypes": null,
                                            "hexValue": "30",
                                            "id": 2631,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "2021:1:7",
                                            "subdenomination": null,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_rational_0_by_1",
                                                "typeString": "int_const 0"
                                            },
                                            "value": "0"
                                        },
                                        "src": "1999:23:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "falseBody": null,
                                    "id": 2647,
                                    "nodeType": "IfStatement",
                                    "src": "1994:196:7",
                                    "trueBody": {
                                        "id": 2646,
                                        "nodeType": "Block",
                                        "src": "2025:165:7",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "arguments": [
                                                        {
                                                            "argumentTypes": null,
                                                            "expression": {
                                                                "argumentTypes": null,
                                                                "arguments": [
                                                                    {
                                                                        "argumentTypes": null,
                                                                        "id": 2641,
                                                                        "name": "this",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": -28,
                                                                        "src": "2165:4:7",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_contract$_Forwarder_$2934",
                                                                            "typeString": "contract Forwarder"
                                                                        }
                                                                    }
                                                                ],
                                                                "expression": {
                                                                    "argumentTypes": [
                                                                        {
                                                                            "typeIdentifier": "t_contract$_Forwarder_$2934",
                                                                            "typeString": "contract Forwarder"
                                                                        }
                                                                    ],
                                                                    "id": 2640,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "nodeType": "ElementaryTypeNameExpression",
                                                                    "src": "2157:7:7",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_type$_t_address_$",
                                                                        "typeString": "type(address)"
                                                                    },
                                                                    "typeName": {
                                                                        "id": 2639,
                                                                        "name": "address",
                                                                        "nodeType": "ElementaryTypeName",
                                                                        "src": "2157:7:7",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": null,
                                                                            "typeString": null
                                                                        }
                                                                    }
                                                                },
                                                                "id": 2642,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "kind": "typeConversion",
                                                                "lValueRequested": false,
                                                                "names": [],
                                                                "nodeType": "FunctionCall",
                                                                "src": "2157:13:7",
                                                                "tryCall": false,
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address_payable",
                                                                    "typeString": "address payable"
                                                                }
                                                            },
                                                            "id": 2643,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "balance",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": null,
                                                            "src": "2157:21:7",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "arguments": [
                                                                {
                                                                    "argumentTypes": null,
                                                                    "expression": {
                                                                        "argumentTypes": null,
                                                                        "id": 2635,
                                                                        "name": "req",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 2573,
                                                                        "src": "2138:3:7",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                                                            "typeString": "struct IForwarder.ForwardRequest memory"
                                                                        }
                                                                    },
                                                                    "id": 2636,
                                                                    "isConstant": false,
                                                                    "isLValue": true,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "memberName": "from",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 2939,
                                                                    "src": "2138:8:7",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_address",
                                                                        "typeString": "address"
                                                                    }
                                                                }
                                                            ],
                                                            "expression": {
                                                                "argumentTypes": [
                                                                    {
                                                                        "typeIdentifier": "t_address",
                                                                        "typeString": "address"
                                                                    }
                                                                ],
                                                                "id": 2634,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "lValueRequested": false,
                                                                "nodeType": "ElementaryTypeNameExpression",
                                                                "src": "2130:8:7",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_type$_t_address_payable_$",
                                                                    "typeString": "type(address payable)"
                                                                },
                                                                "typeName": {
                                                                    "id": 2633,
                                                                    "name": "address",
                                                                    "nodeType": "ElementaryTypeName",
                                                                    "src": "2130:8:7",
                                                                    "stateMutability": "payable",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": null,
                                                                        "typeString": null
                                                                    }
                                                                }
                                                            },
                                                            "id": 2637,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "kind": "typeConversion",
                                                            "lValueRequested": false,
                                                            "names": [],
                                                            "nodeType": "FunctionCall",
                                                            "src": "2130:17:7",
                                                            "tryCall": false,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address_payable",
                                                                "typeString": "address payable"
                                                            }
                                                        },
                                                        "id": 2638,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "transfer",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": null,
                                                        "src": "2130:26:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$",
                                                            "typeString": "function (uint256)"
                                                        }
                                                    },
                                                    "id": 2644,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "2130:49:7",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$__$",
                                                        "typeString": "tuple()"
                                                    }
                                                },
                                                "id": 2645,
                                                "nodeType": "ExpressionStatement",
                                                "src": "2130:49:7"
                                            }
                                        ]
                                    }
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "components": [
                                            {
                                                "argumentTypes": null,
                                                "id": 2648,
                                                "name": "success",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2585,
                                                "src": "2207:7:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 2649,
                                                "name": "ret",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2587,
                                                "src": "2215:3:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "id": 2650,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "2206:13:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                                            "typeString": "tuple(bool,bytes memory)"
                                        }
                                    },
                                    "functionReturnParameters": 2588,
                                    "id": 2651,
                                    "nodeType": "Return",
                                    "src": "2199:20:7"
                                }
                            ]
                        },
                        "documentation": null,
                        "functionSelector": "cdf5735a",
                        "id": 2653,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "execute",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 2583,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "1631:8:7"
                        },
                        "parameters": {
                            "id": 2582,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2573,
                                    "mutability": "mutable",
                                    "name": "req",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2653,
                                    "src": "1445:25:7",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                        "typeString": "struct IForwarder.ForwardRequest"
                                    },
                                    "typeName": {
                                        "contractScope": null,
                                        "id": 2572,
                                        "name": "ForwardRequest",
                                        "nodeType": "UserDefinedTypeName",
                                        "referencedDeclaration": 2950,
                                        "src": "1445:14:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_ForwardRequest_$2950_storage_ptr",
                                            "typeString": "struct IForwarder.ForwardRequest"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2575,
                                    "mutability": "mutable",
                                    "name": "domainSeparator",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2653,
                                    "src": "1480:23:7",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 2574,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1480:7:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2577,
                                    "mutability": "mutable",
                                    "name": "requestTypeHash",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2653,
                                    "src": "1513:23:7",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 2576,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1513:7:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2579,
                                    "mutability": "mutable",
                                    "name": "suffixData",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2653,
                                    "src": "1546:25:7",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 2578,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1546:5:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2581,
                                    "mutability": "mutable",
                                    "name": "sig",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2653,
                                    "src": "1581:18:7",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 2580,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1581:5:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1435:170:7"
                        },
                        "returnParameters": {
                            "id": 2588,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2585,
                                    "mutability": "mutable",
                                    "name": "success",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2653,
                                    "src": "1653:12:7",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 2584,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1653:4:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2587,
                                    "mutability": "mutable",
                                    "name": "ret",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2653,
                                    "src": "1667:16:7",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 2586,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1667:5:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1652:32:7"
                        },
                        "scope": 2934,
                        "src": "1419:807:7",
                        "stateMutability": "payable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "body": {
                            "id": 2669,
                            "nodeType": "Block",
                            "src": "2296:73:7",
                            "statements": [
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 2665,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "baseExpression": {
                                                        "argumentTypes": null,
                                                        "id": 2659,
                                                        "name": "nonces",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2507,
                                                        "src": "2314:6:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                            "typeString": "mapping(address => uint256)"
                                                        }
                                                    },
                                                    "id": 2662,
                                                    "indexExpression": {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 2660,
                                                            "name": "req",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 2655,
                                                            "src": "2321:3:7",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                                                "typeString": "struct IForwarder.ForwardRequest memory"
                                                            }
                                                        },
                                                        "id": 2661,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "from",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 2939,
                                                        "src": "2321:8:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "2314:16:7",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "==",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 2663,
                                                        "name": "req",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2655,
                                                        "src": "2334:3:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                                            "typeString": "struct IForwarder.ForwardRequest memory"
                                                        }
                                                    },
                                                    "id": 2664,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "nonce",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 2947,
                                                    "src": "2334:9:7",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "2314:29:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "6e6f6e6365206d69736d61746368",
                                                "id": 2666,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "2345:16:7",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_19fa454ecd3cf263dcaa6dc55dff88ba7714cec09f60c18060943ba1b9329259",
                                                    "typeString": "literal_string \"nonce mismatch\""
                                                },
                                                "value": "nonce mismatch"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_19fa454ecd3cf263dcaa6dc55dff88ba7714cec09f60c18060943ba1b9329259",
                                                    "typeString": "literal_string \"nonce mismatch\""
                                                }
                                            ],
                                            "id": 2658,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "2306:7:7",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 2667,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2306:56:7",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2668,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2306:56:7"
                                }
                            ]
                        },
                        "documentation": null,
                        "id": 2670,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "_verifyNonce",
                        "nodeType": "FunctionDefinition",
                        "overrides": null,
                        "parameters": {
                            "id": 2656,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2655,
                                    "mutability": "mutable",
                                    "name": "req",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2670,
                                    "src": "2255:25:7",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                        "typeString": "struct IForwarder.ForwardRequest"
                                    },
                                    "typeName": {
                                        "contractScope": null,
                                        "id": 2654,
                                        "name": "ForwardRequest",
                                        "nodeType": "UserDefinedTypeName",
                                        "referencedDeclaration": 2950,
                                        "src": "2255:14:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_ForwardRequest_$2950_storage_ptr",
                                            "typeString": "struct IForwarder.ForwardRequest"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2254:27:7"
                        },
                        "returnParameters": {
                            "id": 2657,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "2296:0:7"
                        },
                        "scope": 2934,
                        "src": "2233:136:7",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 2681,
                            "nodeType": "Block",
                            "src": "2433:35:7",
                            "statements": [
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 2679,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "UnaryOperation",
                                        "operator": "++",
                                        "prefix": false,
                                        "src": "2443:18:7",
                                        "subExpression": {
                                            "argumentTypes": null,
                                            "baseExpression": {
                                                "argumentTypes": null,
                                                "id": 2675,
                                                "name": "nonces",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2507,
                                                "src": "2443:6:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                    "typeString": "mapping(address => uint256)"
                                                }
                                            },
                                            "id": 2678,
                                            "indexExpression": {
                                                "argumentTypes": null,
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "id": 2676,
                                                    "name": "req",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 2672,
                                                    "src": "2450:3:7",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                                        "typeString": "struct IForwarder.ForwardRequest memory"
                                                    }
                                                },
                                                "id": 2677,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "from",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 2939,
                                                "src": "2450:8:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "IndexAccess",
                                            "src": "2443:16:7",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 2680,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2443:18:7"
                                }
                            ]
                        },
                        "documentation": null,
                        "id": 2682,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "_updateNonce",
                        "nodeType": "FunctionDefinition",
                        "overrides": null,
                        "parameters": {
                            "id": 2673,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2672,
                                    "mutability": "mutable",
                                    "name": "req",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2682,
                                    "src": "2397:25:7",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                        "typeString": "struct IForwarder.ForwardRequest"
                                    },
                                    "typeName": {
                                        "contractScope": null,
                                        "id": 2671,
                                        "name": "ForwardRequest",
                                        "nodeType": "UserDefinedTypeName",
                                        "referencedDeclaration": 2950,
                                        "src": "2397:14:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_ForwardRequest_$2950_storage_ptr",
                                            "typeString": "struct IForwarder.ForwardRequest"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2396:27:7"
                        },
                        "returnParameters": {
                            "id": 2674,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "2433:0:7"
                        },
                        "scope": 2934,
                        "src": "2375:93:7",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "baseFunctions": [
                            2997
                        ],
                        "body": {
                            "id": 2744,
                            "nodeType": "Block",
                            "src": "2575:345:7",
                            "statements": [
                                {
                                    "body": {
                                        "id": 2724,
                                        "nodeType": "Block",
                                        "src": "2636:117:7",
                                        "statements": [
                                            {
                                                "assignments": [
                                                    2705
                                                ],
                                                "declarations": [
                                                    {
                                                        "constant": false,
                                                        "id": 2705,
                                                        "mutability": "mutable",
                                                        "name": "c",
                                                        "nodeType": "VariableDeclaration",
                                                        "overrides": null,
                                                        "scope": 2724,
                                                        "src": "2650:8:7",
                                                        "stateVariable": false,
                                                        "storageLocation": "default",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes1",
                                                            "typeString": "bytes1"
                                                        },
                                                        "typeName": {
                                                            "id": 2704,
                                                            "name": "bytes1",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "2650:6:7",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes1",
                                                                "typeString": "bytes1"
                                                            }
                                                        },
                                                        "value": null,
                                                        "visibility": "internal"
                                                    }
                                                ],
                                                "id": 2712,
                                                "initialValue": {
                                                    "argumentTypes": null,
                                                    "baseExpression": {
                                                        "argumentTypes": null,
                                                        "arguments": [
                                                            {
                                                                "argumentTypes": null,
                                                                "id": 2708,
                                                                "name": "typeName",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 2684,
                                                                "src": "2667:8:7",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_string_calldata_ptr",
                                                                    "typeString": "string calldata"
                                                                }
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_string_calldata_ptr",
                                                                    "typeString": "string calldata"
                                                                }
                                                            ],
                                                            "id": 2707,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "nodeType": "ElementaryTypeNameExpression",
                                                            "src": "2661:5:7",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                                                "typeString": "type(bytes storage pointer)"
                                                            },
                                                            "typeName": {
                                                                "id": 2706,
                                                                "name": "bytes",
                                                                "nodeType": "ElementaryTypeName",
                                                                "src": "2661:5:7",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": null,
                                                                    "typeString": null
                                                                }
                                                            }
                                                        },
                                                        "id": 2709,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "typeConversion",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "2661:15:7",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_calldata_ptr",
                                                            "typeString": "bytes calldata"
                                                        }
                                                    },
                                                    "id": 2711,
                                                    "indexExpression": {
                                                        "argumentTypes": null,
                                                        "id": 2710,
                                                        "name": "i",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2691,
                                                        "src": "2677:1:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "2661:18:7",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes1",
                                                        "typeString": "bytes1"
                                                    }
                                                },
                                                "nodeType": "VariableDeclarationStatement",
                                                "src": "2650:29:7"
                                            },
                                            {
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "arguments": [
                                                        {
                                                            "argumentTypes": null,
                                                            "commonType": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            },
                                                            "id": 2720,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "leftExpression": {
                                                                "argumentTypes": null,
                                                                "commonType": {
                                                                    "typeIdentifier": "t_bytes1",
                                                                    "typeString": "bytes1"
                                                                },
                                                                "id": 2716,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "leftExpression": {
                                                                    "argumentTypes": null,
                                                                    "id": 2714,
                                                                    "name": "c",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 2705,
                                                                    "src": "2701:1:7",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_bytes1",
                                                                        "typeString": "bytes1"
                                                                    }
                                                                },
                                                                "nodeType": "BinaryOperation",
                                                                "operator": "!=",
                                                                "rightExpression": {
                                                                    "argumentTypes": null,
                                                                    "hexValue": "28",
                                                                    "id": 2715,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "kind": "string",
                                                                    "lValueRequested": false,
                                                                    "nodeType": "Literal",
                                                                    "src": "2706:3:7",
                                                                    "subdenomination": null,
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_stringliteral_484bf06f3118ce360605f902ef526c45207bc469c2b056352f14b8408f9f6f9a",
                                                                        "typeString": "literal_string \"(\""
                                                                    },
                                                                    "value": "("
                                                                },
                                                                "src": "2701:8:7",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_bool",
                                                                    "typeString": "bool"
                                                                }
                                                            },
                                                            "nodeType": "BinaryOperation",
                                                            "operator": "&&",
                                                            "rightExpression": {
                                                                "argumentTypes": null,
                                                                "commonType": {
                                                                    "typeIdentifier": "t_bytes1",
                                                                    "typeString": "bytes1"
                                                                },
                                                                "id": 2719,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "leftExpression": {
                                                                    "argumentTypes": null,
                                                                    "id": 2717,
                                                                    "name": "c",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 2705,
                                                                    "src": "2713:1:7",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_bytes1",
                                                                        "typeString": "bytes1"
                                                                    }
                                                                },
                                                                "nodeType": "BinaryOperation",
                                                                "operator": "!=",
                                                                "rightExpression": {
                                                                    "argumentTypes": null,
                                                                    "hexValue": "29",
                                                                    "id": 2718,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "kind": "string",
                                                                    "lValueRequested": false,
                                                                    "nodeType": "Literal",
                                                                    "src": "2718:3:7",
                                                                    "subdenomination": null,
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_stringliteral_59d76dc3b33357eda30db1508968fbb18f21b9cd2442f1559b20154ddaa4d7ed",
                                                                        "typeString": "literal_string \")\""
                                                                    },
                                                                    "value": ")"
                                                                },
                                                                "src": "2713:8:7",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_bool",
                                                                    "typeString": "bool"
                                                                }
                                                            },
                                                            "src": "2701:20:7",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            }
                                                        },
                                                        {
                                                            "argumentTypes": null,
                                                            "hexValue": "696e76616c696420747970656e616d65",
                                                            "id": 2721,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "string",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "2723:18:7",
                                                            "subdenomination": null,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_stringliteral_1685321d334670e98977cbf6cb24501d967ce2ec16834dbe3af4eae1a4d34266",
                                                                "typeString": "literal_string \"invalid typename\""
                                                            },
                                                            "value": "invalid typename"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_stringliteral_1685321d334670e98977cbf6cb24501d967ce2ec16834dbe3af4eae1a4d34266",
                                                                "typeString": "literal_string \"invalid typename\""
                                                            }
                                                        ],
                                                        "id": 2713,
                                                        "name": "require",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [
                                                            -18,
                                                            -18
                                                        ],
                                                        "referencedDeclaration": -18,
                                                        "src": "2693:7:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                            "typeString": "function (bool,string memory) pure"
                                                        }
                                                    },
                                                    "id": 2722,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "2693:49:7",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$__$",
                                                        "typeString": "tuple()"
                                                    }
                                                },
                                                "id": 2723,
                                                "nodeType": "ExpressionStatement",
                                                "src": "2693:49:7"
                                            }
                                        ]
                                    },
                                    "condition": {
                                        "argumentTypes": null,
                                        "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        },
                                        "id": 2700,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "argumentTypes": null,
                                            "id": 2694,
                                            "name": "i",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2691,
                                            "src": "2603:1:7",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "<",
                                        "rightExpression": {
                                            "argumentTypes": null,
                                            "expression": {
                                                "argumentTypes": null,
                                                "arguments": [
                                                    {
                                                        "argumentTypes": null,
                                                        "id": 2697,
                                                        "name": "typeName",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2684,
                                                        "src": "2613:8:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_string_calldata_ptr",
                                                            "typeString": "string calldata"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_string_calldata_ptr",
                                                            "typeString": "string calldata"
                                                        }
                                                    ],
                                                    "id": 2696,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "ElementaryTypeNameExpression",
                                                    "src": "2607:5:7",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                                        "typeString": "type(bytes storage pointer)"
                                                    },
                                                    "typeName": {
                                                        "id": 2695,
                                                        "name": "bytes",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "2607:5:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": null,
                                                            "typeString": null
                                                        }
                                                    }
                                                },
                                                "id": 2698,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "typeConversion",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "2607:15:7",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            },
                                            "id": 2699,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "length",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": null,
                                            "src": "2607:22:7",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "2603:26:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 2725,
                                    "initializationExpression": {
                                        "assignments": [
                                            2691
                                        ],
                                        "declarations": [
                                            {
                                                "constant": false,
                                                "id": 2691,
                                                "mutability": "mutable",
                                                "name": "i",
                                                "nodeType": "VariableDeclaration",
                                                "overrides": null,
                                                "scope": 2725,
                                                "src": "2591:6:7",
                                                "stateVariable": false,
                                                "storageLocation": "default",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "typeName": {
                                                    "id": 2690,
                                                    "name": "uint",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "2591:4:7",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "value": null,
                                                "visibility": "internal"
                                            }
                                        ],
                                        "id": 2693,
                                        "initialValue": {
                                            "argumentTypes": null,
                                            "hexValue": "30",
                                            "id": 2692,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "2600:1:7",
                                            "subdenomination": null,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_rational_0_by_1",
                                                "typeString": "int_const 0"
                                            },
                                            "value": "0"
                                        },
                                        "nodeType": "VariableDeclarationStatement",
                                        "src": "2591:10:7"
                                    },
                                    "loopExpression": {
                                        "expression": {
                                            "argumentTypes": null,
                                            "id": 2702,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "UnaryOperation",
                                            "operator": "++",
                                            "prefix": false,
                                            "src": "2631:3:7",
                                            "subExpression": {
                                                "argumentTypes": null,
                                                "id": 2701,
                                                "name": "i",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2691,
                                                "src": "2631:1:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "id": 2703,
                                        "nodeType": "ExpressionStatement",
                                        "src": "2631:3:7"
                                    },
                                    "nodeType": "ForStatement",
                                    "src": "2586:167:7"
                                },
                                {
                                    "assignments": [
                                        2727
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 2727,
                                            "mutability": "mutable",
                                            "name": "requestType",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 2744,
                                            "src": "2763:25:7",
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_string_memory_ptr",
                                                "typeString": "string"
                                            },
                                            "typeName": {
                                                "id": 2726,
                                                "name": "string",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "2763:6:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_string_storage_ptr",
                                                    "typeString": "string"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 2739,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "arguments": [
                                                    {
                                                        "argumentTypes": null,
                                                        "id": 2732,
                                                        "name": "typeName",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2684,
                                                        "src": "2815:8:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_string_calldata_ptr",
                                                            "typeString": "string calldata"
                                                        }
                                                    },
                                                    {
                                                        "argumentTypes": null,
                                                        "hexValue": "28",
                                                        "id": 2733,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "string",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "2825:3:7",
                                                        "subdenomination": null,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_stringliteral_484bf06f3118ce360605f902ef526c45207bc469c2b056352f14b8408f9f6f9a",
                                                            "typeString": "literal_string \"(\""
                                                        },
                                                        "value": "("
                                                    },
                                                    {
                                                        "argumentTypes": null,
                                                        "id": 2734,
                                                        "name": "GENERIC_PARAMS",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2492,
                                                        "src": "2830:14:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_string_memory_ptr",
                                                            "typeString": "string memory"
                                                        }
                                                    },
                                                    {
                                                        "argumentTypes": null,
                                                        "hexValue": "2c",
                                                        "id": 2735,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "string",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "2846:3:7",
                                                        "subdenomination": null,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_stringliteral_3e7a35b97029f9e0cf6effd71c1a7958822e9a217d3a3aec886668a7dd8231cb",
                                                            "typeString": "literal_string \",\""
                                                        },
                                                        "value": ","
                                                    },
                                                    {
                                                        "argumentTypes": null,
                                                        "id": 2736,
                                                        "name": "typeSuffix",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2686,
                                                        "src": "2851:10:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_string_calldata_ptr",
                                                            "typeString": "string calldata"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_string_calldata_ptr",
                                                            "typeString": "string calldata"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_stringliteral_484bf06f3118ce360605f902ef526c45207bc469c2b056352f14b8408f9f6f9a",
                                                            "typeString": "literal_string \"(\""
                                                        },
                                                        {
                                                            "typeIdentifier": "t_string_memory_ptr",
                                                            "typeString": "string memory"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_stringliteral_3e7a35b97029f9e0cf6effd71c1a7958822e9a217d3a3aec886668a7dd8231cb",
                                                            "typeString": "literal_string \",\""
                                                        },
                                                        {
                                                            "typeIdentifier": "t_string_calldata_ptr",
                                                            "typeString": "string calldata"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 2730,
                                                        "name": "abi",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": -1,
                                                        "src": "2798:3:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_abi",
                                                            "typeString": "abi"
                                                        }
                                                    },
                                                    "id": 2731,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "memberName": "encodePacked",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": null,
                                                    "src": "2798:16:7",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                                        "typeString": "function () pure returns (bytes memory)"
                                                    }
                                                },
                                                "id": 2737,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "2798:64:7",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "id": 2729,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "nodeType": "ElementaryTypeNameExpression",
                                            "src": "2791:6:7",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                                                "typeString": "type(string storage pointer)"
                                            },
                                            "typeName": {
                                                "id": 2728,
                                                "name": "string",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "2791:6:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": null,
                                                    "typeString": null
                                                }
                                            }
                                        },
                                        "id": 2738,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2791:72:7",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_memory_ptr",
                                            "typeString": "string memory"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "2763:100:7"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 2741,
                                                "name": "requestType",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2727,
                                                "src": "2901:11:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_string_memory_ptr",
                                                    "typeString": "string memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_string_memory_ptr",
                                                    "typeString": "string memory"
                                                }
                                            ],
                                            "id": 2740,
                                            "name": "registerRequestTypeInternal",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2830,
                                            "src": "2873:27:7",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (string memory)"
                                            }
                                        },
                                        "id": 2742,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2873:40:7",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2743,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2873:40:7"
                                }
                            ]
                        },
                        "documentation": null,
                        "functionSelector": "d9210be5",
                        "id": 2745,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "registerRequestType",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 2688,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "2566:8:7"
                        },
                        "parameters": {
                            "id": 2687,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2684,
                                    "mutability": "mutable",
                                    "name": "typeName",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2745,
                                    "src": "2503:24:7",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_calldata_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 2683,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2503:6:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2686,
                                    "mutability": "mutable",
                                    "name": "typeSuffix",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2745,
                                    "src": "2529:26:7",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_calldata_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 2685,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2529:6:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2502:54:7"
                        },
                        "returnParameters": {
                            "id": 2689,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "2575:0:7"
                        },
                        "scope": 2934,
                        "src": "2474:446:7",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            3005
                        ],
                        "body": {
                            "id": 2803,
                            "nodeType": "Block",
                            "src": "3024:502:7",
                            "statements": [
                                {
                                    "assignments": [
                                        2754
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 2754,
                                            "mutability": "mutable",
                                            "name": "chainId",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 2803,
                                            "src": "3034:15:7",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 2753,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "3034:7:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 2755,
                                    "initialValue": null,
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "3034:15:7"
                                },
                                {
                                    "AST": {
                                        "nodeType": "YulBlock",
                                        "src": "3127:24:7",
                                        "statements": [
                                            {
                                                "nodeType": "YulAssignment",
                                                "src": "3129:20:7",
                                                "value": {
                                                    "arguments": [],
                                                    "functionName": {
                                                        "name": "chainid",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "3140:7:7"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "3140:9:7"
                                                },
                                                "variableNames": [
                                                    {
                                                        "name": "chainId",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "3129:7:7"
                                                    }
                                                ]
                                            }
                                        ]
                                    },
                                    "evmVersion": "istanbul",
                                    "externalReferences": [
                                        {
                                            "declaration": 2754,
                                            "isOffset": false,
                                            "isSlot": false,
                                            "src": "3129:7:7",
                                            "valueSize": 1
                                        }
                                    ],
                                    "id": 2756,
                                    "nodeType": "InlineAssembly",
                                    "src": "3118:33:7"
                                },
                                {
                                    "assignments": [
                                        2758
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 2758,
                                            "mutability": "mutable",
                                            "name": "domainValue",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 2803,
                                            "src": "3161:24:7",
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                "typeString": "bytes"
                                            },
                                            "typeName": {
                                                "id": 2757,
                                                "name": "bytes",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "3161:5:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_storage_ptr",
                                                    "typeString": "bytes"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 2785,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "arguments": [
                                                    {
                                                        "argumentTypes": null,
                                                        "arguments": [
                                                            {
                                                                "argumentTypes": null,
                                                                "id": 2764,
                                                                "name": "EIP712_DOMAIN_TYPE",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 2495,
                                                                "src": "3228:18:7",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_string_memory_ptr",
                                                                    "typeString": "string memory"
                                                                }
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_string_memory_ptr",
                                                                    "typeString": "string memory"
                                                                }
                                                            ],
                                                            "id": 2763,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "nodeType": "ElementaryTypeNameExpression",
                                                            "src": "3222:5:7",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                                                "typeString": "type(bytes storage pointer)"
                                                            },
                                                            "typeName": {
                                                                "id": 2762,
                                                                "name": "bytes",
                                                                "nodeType": "ElementaryTypeName",
                                                                "src": "3222:5:7",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": null,
                                                                    "typeString": null
                                                                }
                                                            }
                                                        },
                                                        "id": 2765,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "typeConversion",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "3222:25:7",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_memory_ptr",
                                                            "typeString": "bytes memory"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_bytes_memory_ptr",
                                                            "typeString": "bytes memory"
                                                        }
                                                    ],
                                                    "id": 2761,
                                                    "name": "keccak256",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": -8,
                                                    "src": "3212:9:7",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                                        "typeString": "function (bytes memory) pure returns (bytes32)"
                                                    }
                                                },
                                                "id": 2766,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "3212:36:7",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "arguments": [
                                                    {
                                                        "argumentTypes": null,
                                                        "arguments": [
                                                            {
                                                                "argumentTypes": null,
                                                                "id": 2770,
                                                                "name": "name",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 2747,
                                                                "src": "3278:4:7",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_string_calldata_ptr",
                                                                    "typeString": "string calldata"
                                                                }
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_string_calldata_ptr",
                                                                    "typeString": "string calldata"
                                                                }
                                                            ],
                                                            "id": 2769,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "nodeType": "ElementaryTypeNameExpression",
                                                            "src": "3272:5:7",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                                                "typeString": "type(bytes storage pointer)"
                                                            },
                                                            "typeName": {
                                                                "id": 2768,
                                                                "name": "bytes",
                                                                "nodeType": "ElementaryTypeName",
                                                                "src": "3272:5:7",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": null,
                                                                    "typeString": null
                                                                }
                                                            }
                                                        },
                                                        "id": 2771,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "typeConversion",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "3272:11:7",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_calldata_ptr",
                                                            "typeString": "bytes calldata"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_bytes_calldata_ptr",
                                                            "typeString": "bytes calldata"
                                                        }
                                                    ],
                                                    "id": 2767,
                                                    "name": "keccak256",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": -8,
                                                    "src": "3262:9:7",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                                        "typeString": "function (bytes memory) pure returns (bytes32)"
                                                    }
                                                },
                                                "id": 2772,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "3262:22:7",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "arguments": [
                                                    {
                                                        "argumentTypes": null,
                                                        "arguments": [
                                                            {
                                                                "argumentTypes": null,
                                                                "id": 2776,
                                                                "name": "version",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 2749,
                                                                "src": "3314:7:7",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_string_calldata_ptr",
                                                                    "typeString": "string calldata"
                                                                }
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_string_calldata_ptr",
                                                                    "typeString": "string calldata"
                                                                }
                                                            ],
                                                            "id": 2775,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "nodeType": "ElementaryTypeNameExpression",
                                                            "src": "3308:5:7",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                                                "typeString": "type(bytes storage pointer)"
                                                            },
                                                            "typeName": {
                                                                "id": 2774,
                                                                "name": "bytes",
                                                                "nodeType": "ElementaryTypeName",
                                                                "src": "3308:5:7",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": null,
                                                                    "typeString": null
                                                                }
                                                            }
                                                        },
                                                        "id": 2777,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "typeConversion",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "3308:14:7",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_calldata_ptr",
                                                            "typeString": "bytes calldata"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_bytes_calldata_ptr",
                                                            "typeString": "bytes calldata"
                                                        }
                                                    ],
                                                    "id": 2773,
                                                    "name": "keccak256",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": -8,
                                                    "src": "3298:9:7",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                                        "typeString": "function (bytes memory) pure returns (bytes32)"
                                                    }
                                                },
                                                "id": 2778,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "3298:25:7",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 2779,
                                                "name": "chainId",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2754,
                                                "src": "3337:7:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "arguments": [
                                                    {
                                                        "argumentTypes": null,
                                                        "id": 2782,
                                                        "name": "this",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": -28,
                                                        "src": "3366:4:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_contract$_Forwarder_$2934",
                                                            "typeString": "contract Forwarder"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_contract$_Forwarder_$2934",
                                                            "typeString": "contract Forwarder"
                                                        }
                                                    ],
                                                    "id": 2781,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "ElementaryTypeNameExpression",
                                                    "src": "3358:7:7",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_address_$",
                                                        "typeString": "type(address)"
                                                    },
                                                    "typeName": {
                                                        "id": 2780,
                                                        "name": "address",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "3358:7:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": null,
                                                            "typeString": null
                                                        }
                                                    }
                                                },
                                                "id": 2783,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "typeConversion",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "3358:13:7",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 2759,
                                                "name": "abi",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": -1,
                                                "src": "3188:3:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_magic_abi",
                                                    "typeString": "abi"
                                                }
                                            },
                                            "id": 2760,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "memberName": "encode",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": null,
                                            "src": "3188:10:7",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                                "typeString": "function () pure returns (bytes memory)"
                                            }
                                        },
                                        "id": 2784,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3188:184:7",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "3161:211:7"
                                },
                                {
                                    "assignments": [
                                        2787
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 2787,
                                            "mutability": "mutable",
                                            "name": "domainHash",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 2803,
                                            "src": "3383:18:7",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes32",
                                                "typeString": "bytes32"
                                            },
                                            "typeName": {
                                                "id": 2786,
                                                "name": "bytes32",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "3383:7:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 2791,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 2789,
                                                "name": "domainValue",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2758,
                                                "src": "3414:11:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "id": 2788,
                                            "name": "keccak256",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": -8,
                                            "src": "3404:9:7",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                                "typeString": "function (bytes memory) pure returns (bytes32)"
                                            }
                                        },
                                        "id": 2790,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3404:22:7",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "3383:43:7"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 2796,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "argumentTypes": null,
                                            "baseExpression": {
                                                "argumentTypes": null,
                                                "id": 2792,
                                                "name": "domains",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2503,
                                                "src": "3437:7:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                                                    "typeString": "mapping(bytes32 => bool)"
                                                }
                                            },
                                            "id": 2794,
                                            "indexExpression": {
                                                "argumentTypes": null,
                                                "id": 2793,
                                                "name": "domainHash",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2787,
                                                "src": "3445:10:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "IndexAccess",
                                            "src": "3437:19:7",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "argumentTypes": null,
                                            "hexValue": "74727565",
                                            "id": 2795,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "bool",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "3459:4:7",
                                            "subdenomination": null,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            },
                                            "value": "true"
                                        },
                                        "src": "3437:26:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 2797,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3437:26:7"
                                },
                                {
                                    "eventCall": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 2799,
                                                "name": "domainHash",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2787,
                                                "src": "3495:10:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 2800,
                                                "name": "domainValue",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2758,
                                                "src": "3507:11:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "id": 2798,
                                            "name": "DomainRegistered",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2836,
                                            "src": "3478:16:7",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_bytes_memory_ptr_$returns$__$",
                                                "typeString": "function (bytes32,bytes memory)"
                                            }
                                        },
                                        "id": 2801,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3478:41:7",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2802,
                                    "nodeType": "EmitStatement",
                                    "src": "3473:46:7"
                                }
                            ]
                        },
                        "documentation": null,
                        "functionSelector": "9c7b4592",
                        "id": 2804,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "registerDomainSeparator",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 2751,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "3015:8:7"
                        },
                        "parameters": {
                            "id": 2750,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2747,
                                    "mutability": "mutable",
                                    "name": "name",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2804,
                                    "src": "2959:20:7",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_calldata_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 2746,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2959:6:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2749,
                                    "mutability": "mutable",
                                    "name": "version",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2804,
                                    "src": "2981:23:7",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_calldata_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 2748,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2981:6:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2958:47:7"
                        },
                        "returnParameters": {
                            "id": 2752,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "3024:0:7"
                        },
                        "scope": 2934,
                        "src": "2926:600:7",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "body": {
                            "id": 2829,
                            "nodeType": "Block",
                            "src": "3605:183:7",
                            "statements": [
                                {
                                    "assignments": [
                                        2810
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 2810,
                                            "mutability": "mutable",
                                            "name": "requestTypehash",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 2829,
                                            "src": "3616:23:7",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes32",
                                                "typeString": "bytes32"
                                            },
                                            "typeName": {
                                                "id": 2809,
                                                "name": "bytes32",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "3616:7:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 2817,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "arguments": [
                                                    {
                                                        "argumentTypes": null,
                                                        "id": 2814,
                                                        "name": "requestType",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2806,
                                                        "src": "3658:11:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_string_memory_ptr",
                                                            "typeString": "string memory"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_string_memory_ptr",
                                                            "typeString": "string memory"
                                                        }
                                                    ],
                                                    "id": 2813,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "ElementaryTypeNameExpression",
                                                    "src": "3652:5:7",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                                        "typeString": "type(bytes storage pointer)"
                                                    },
                                                    "typeName": {
                                                        "id": 2812,
                                                        "name": "bytes",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "3652:5:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": null,
                                                            "typeString": null
                                                        }
                                                    }
                                                },
                                                "id": 2815,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "typeConversion",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "3652:18:7",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "id": 2811,
                                            "name": "keccak256",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": -8,
                                            "src": "3642:9:7",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                                "typeString": "function (bytes memory) pure returns (bytes32)"
                                            }
                                        },
                                        "id": 2816,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3642:29:7",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "3616:55:7"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 2822,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "argumentTypes": null,
                                            "baseExpression": {
                                                "argumentTypes": null,
                                                "id": 2818,
                                                "name": "typeHashes",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2499,
                                                "src": "3681:10:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                                                    "typeString": "mapping(bytes32 => bool)"
                                                }
                                            },
                                            "id": 2820,
                                            "indexExpression": {
                                                "argumentTypes": null,
                                                "id": 2819,
                                                "name": "requestTypehash",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2810,
                                                "src": "3692:15:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "IndexAccess",
                                            "src": "3681:27:7",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "argumentTypes": null,
                                            "hexValue": "74727565",
                                            "id": 2821,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "bool",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "3711:4:7",
                                            "subdenomination": null,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            },
                                            "value": "true"
                                        },
                                        "src": "3681:34:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 2823,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3681:34:7"
                                },
                                {
                                    "eventCall": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 2825,
                                                "name": "requestTypehash",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2810,
                                                "src": "3752:15:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 2826,
                                                "name": "requestType",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2806,
                                                "src": "3769:11:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_string_memory_ptr",
                                                    "typeString": "string memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                {
                                                    "typeIdentifier": "t_string_memory_ptr",
                                                    "typeString": "string memory"
                                                }
                                            ],
                                            "id": 2824,
                                            "name": "RequestTypeRegistered",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2842,
                                            "src": "3730:21:7",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bytes32,string memory)"
                                            }
                                        },
                                        "id": 2827,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3730:51:7",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2828,
                                    "nodeType": "EmitStatement",
                                    "src": "3725:56:7"
                                }
                            ]
                        },
                        "documentation": null,
                        "id": 2830,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "registerRequestTypeInternal",
                        "nodeType": "FunctionDefinition",
                        "overrides": null,
                        "parameters": {
                            "id": 2807,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2806,
                                    "mutability": "mutable",
                                    "name": "requestType",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2830,
                                    "src": "3569:25:7",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_memory_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 2805,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3569:6:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3568:27:7"
                        },
                        "returnParameters": {
                            "id": 2808,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "3605:0:7"
                        },
                        "scope": 2934,
                        "src": "3532:256:7",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "anonymous": false,
                        "documentation": null,
                        "id": 2836,
                        "name": "DomainRegistered",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 2835,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2832,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "domainSeparator",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2836,
                                    "src": "3817:31:7",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 2831,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3817:7:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2834,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "domainValue",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2836,
                                    "src": "3850:17:7",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 2833,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3850:5:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3816:52:7"
                        },
                        "src": "3794:75:7"
                    },
                    {
                        "anonymous": false,
                        "documentation": null,
                        "id": 2842,
                        "name": "RequestTypeRegistered",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 2841,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2838,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "typeHash",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2842,
                                    "src": "3903:24:7",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 2837,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3903:7:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2840,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "typeStr",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2842,
                                    "src": "3929:14:7",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_memory_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 2839,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3929:6:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3902:42:7"
                        },
                        "src": "3875:70:7"
                    },
                    {
                        "body": {
                            "id": 2897,
                            "nodeType": "Block",
                            "src": "4159:421:7",
                            "statements": [
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "baseExpression": {
                                                    "argumentTypes": null,
                                                    "id": 2856,
                                                    "name": "domains",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 2503,
                                                    "src": "4177:7:7",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                                                        "typeString": "mapping(bytes32 => bool)"
                                                    }
                                                },
                                                "id": 2858,
                                                "indexExpression": {
                                                    "argumentTypes": null,
                                                    "id": 2857,
                                                    "name": "domainSeparator",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 2846,
                                                    "src": "4185:15:7",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes32",
                                                        "typeString": "bytes32"
                                                    }
                                                },
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "IndexAccess",
                                                "src": "4177:24:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "756e7265676973746572656420646f6d61696e20736570617261746f72",
                                                "id": 2859,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "4203:31:7",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_580d1fcba66bd788b2c8ac4969fc6f192f2944a211583f2b57567880615b1b8b",
                                                    "typeString": "literal_string \"unregistered domain separator\""
                                                },
                                                "value": "unregistered domain separator"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_580d1fcba66bd788b2c8ac4969fc6f192f2944a211583f2b57567880615b1b8b",
                                                    "typeString": "literal_string \"unregistered domain separator\""
                                                }
                                            ],
                                            "id": 2855,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "4169:7:7",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 2860,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4169:66:7",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2861,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4169:66:7"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "baseExpression": {
                                                    "argumentTypes": null,
                                                    "id": 2863,
                                                    "name": "typeHashes",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 2499,
                                                    "src": "4253:10:7",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                                                        "typeString": "mapping(bytes32 => bool)"
                                                    }
                                                },
                                                "id": 2865,
                                                "indexExpression": {
                                                    "argumentTypes": null,
                                                    "id": 2864,
                                                    "name": "requestTypeHash",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 2848,
                                                    "src": "4264:15:7",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes32",
                                                        "typeString": "bytes32"
                                                    }
                                                },
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "IndexAccess",
                                                "src": "4253:27:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "756e726567697374657265642072657175657374207479706568617368",
                                                "id": 2866,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "4282:31:7",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_56dbda2c77ceb41f416ea9332fa84fe1c648499bfe7bbf007d694db0d30a0f19",
                                                    "typeString": "literal_string \"unregistered request typehash\""
                                                },
                                                "value": "unregistered request typehash"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_56dbda2c77ceb41f416ea9332fa84fe1c648499bfe7bbf007d694db0d30a0f19",
                                                    "typeString": "literal_string \"unregistered request typehash\""
                                                }
                                            ],
                                            "id": 2862,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "4245:7:7",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 2867,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4245:69:7",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2868,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4245:69:7"
                                },
                                {
                                    "assignments": [
                                        2870
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 2870,
                                            "mutability": "mutable",
                                            "name": "digest",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 2897,
                                            "src": "4324:14:7",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes32",
                                                "typeString": "bytes32"
                                            },
                                            "typeName": {
                                                "id": 2869,
                                                "name": "bytes32",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "4324:7:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 2885,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "arguments": [
                                                    {
                                                        "argumentTypes": null,
                                                        "hexValue": "1901",
                                                        "id": 2874,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "string",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "4385:10:7",
                                                        "subdenomination": null,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541",
                                                            "typeString": "literal_string \"\u0019\u0001\""
                                                        },
                                                        "value": "\u0019\u0001"
                                                    },
                                                    {
                                                        "argumentTypes": null,
                                                        "id": 2875,
                                                        "name": "domainSeparator",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2846,
                                                        "src": "4397:15:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes32",
                                                            "typeString": "bytes32"
                                                        }
                                                    },
                                                    {
                                                        "argumentTypes": null,
                                                        "arguments": [
                                                            {
                                                                "argumentTypes": null,
                                                                "arguments": [
                                                                    {
                                                                        "argumentTypes": null,
                                                                        "id": 2878,
                                                                        "name": "req",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 2844,
                                                                        "src": "4452:3:7",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                                                            "typeString": "struct IForwarder.ForwardRequest memory"
                                                                        }
                                                                    },
                                                                    {
                                                                        "argumentTypes": null,
                                                                        "id": 2879,
                                                                        "name": "requestTypeHash",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 2848,
                                                                        "src": "4457:15:7",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_bytes32",
                                                                            "typeString": "bytes32"
                                                                        }
                                                                    },
                                                                    {
                                                                        "argumentTypes": null,
                                                                        "id": 2880,
                                                                        "name": "suffixData",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 2850,
                                                                        "src": "4474:10:7",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_bytes_memory_ptr",
                                                                            "typeString": "bytes memory"
                                                                        }
                                                                    }
                                                                ],
                                                                "expression": {
                                                                    "argumentTypes": [
                                                                        {
                                                                            "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                                                            "typeString": "struct IForwarder.ForwardRequest memory"
                                                                        },
                                                                        {
                                                                            "typeIdentifier": "t_bytes32",
                                                                            "typeString": "bytes32"
                                                                        },
                                                                        {
                                                                            "typeIdentifier": "t_bytes_memory_ptr",
                                                                            "typeString": "bytes memory"
                                                                        }
                                                                    ],
                                                                    "id": 2877,
                                                                    "name": "_getEncoded",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 2933,
                                                                    "src": "4440:11:7",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_function_internal_pure$_t_struct$_ForwardRequest_$2950_memory_ptr_$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                                                                        "typeString": "function (struct IForwarder.ForwardRequest memory,bytes32,bytes memory) pure returns (bytes memory)"
                                                                    }
                                                                },
                                                                "id": 2881,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "kind": "functionCall",
                                                                "lValueRequested": false,
                                                                "names": [],
                                                                "nodeType": "FunctionCall",
                                                                "src": "4440:45:7",
                                                                "tryCall": false,
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                                    "typeString": "bytes memory"
                                                                }
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                                    "typeString": "bytes memory"
                                                                }
                                                            ],
                                                            "id": 2876,
                                                            "name": "keccak256",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": -8,
                                                            "src": "4430:9:7",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                                                "typeString": "function (bytes memory) pure returns (bytes32)"
                                                            }
                                                        },
                                                        "id": 2882,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "functionCall",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "4430:56:7",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes32",
                                                            "typeString": "bytes32"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541",
                                                            "typeString": "literal_string \"\u0019\u0001\""
                                                        },
                                                        {
                                                            "typeIdentifier": "t_bytes32",
                                                            "typeString": "bytes32"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_bytes32",
                                                            "typeString": "bytes32"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 2872,
                                                        "name": "abi",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": -1,
                                                        "src": "4351:3:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_abi",
                                                            "typeString": "abi"
                                                        }
                                                    },
                                                    "id": 2873,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "memberName": "encodePacked",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": null,
                                                    "src": "4351:16:7",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                                        "typeString": "function () pure returns (bytes memory)"
                                                    }
                                                },
                                                "id": 2883,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "4351:149:7",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "id": 2871,
                                            "name": "keccak256",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": -8,
                                            "src": "4341:9:7",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                                "typeString": "function (bytes memory) pure returns (bytes32)"
                                            }
                                        },
                                        "id": 2884,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4341:160:7",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "4324:177:7"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                "id": 2893,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "arguments": [
                                                        {
                                                            "argumentTypes": null,
                                                            "id": 2889,
                                                            "name": "sig",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 2852,
                                                            "src": "4534:3:7",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 2887,
                                                            "name": "digest",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 2870,
                                                            "src": "4519:6:7",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes32",
                                                                "typeString": "bytes32"
                                                            }
                                                        },
                                                        "id": 2888,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "recover",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 6547,
                                                        "src": "4519:14:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$bound_to$_t_bytes32_$",
                                                            "typeString": "function (bytes32,bytes memory) pure returns (address)"
                                                        }
                                                    },
                                                    "id": 2890,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "4519:19:7",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "==",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 2891,
                                                        "name": "req",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2844,
                                                        "src": "4542:3:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                                            "typeString": "struct IForwarder.ForwardRequest memory"
                                                        }
                                                    },
                                                    "id": 2892,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "from",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 2939,
                                                    "src": "4542:8:7",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "src": "4519:31:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "7369676e6174757265206d69736d61746368",
                                                "id": 2894,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "4552:20:7",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_f3d26a3c6a3f6d4086217afc5e73c8eb7caeb9c89076cb74d15918edc5b67386",
                                                    "typeString": "literal_string \"signature mismatch\""
                                                },
                                                "value": "signature mismatch"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_f3d26a3c6a3f6d4086217afc5e73c8eb7caeb9c89076cb74d15918edc5b67386",
                                                    "typeString": "literal_string \"signature mismatch\""
                                                }
                                            ],
                                            "id": 2886,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "4511:7:7",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 2895,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4511:62:7",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2896,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4511:62:7"
                                }
                            ]
                        },
                        "documentation": null,
                        "id": 2898,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "_verifySig",
                        "nodeType": "FunctionDefinition",
                        "overrides": null,
                        "parameters": {
                            "id": 2853,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2844,
                                    "mutability": "mutable",
                                    "name": "req",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2898,
                                    "src": "3981:25:7",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                        "typeString": "struct IForwarder.ForwardRequest"
                                    },
                                    "typeName": {
                                        "contractScope": null,
                                        "id": 2843,
                                        "name": "ForwardRequest",
                                        "nodeType": "UserDefinedTypeName",
                                        "referencedDeclaration": 2950,
                                        "src": "3981:14:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_ForwardRequest_$2950_storage_ptr",
                                            "typeString": "struct IForwarder.ForwardRequest"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2846,
                                    "mutability": "mutable",
                                    "name": "domainSeparator",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2898,
                                    "src": "4016:23:7",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 2845,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4016:7:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2848,
                                    "mutability": "mutable",
                                    "name": "requestTypeHash",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2898,
                                    "src": "4049:23:7",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 2847,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4049:7:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2850,
                                    "mutability": "mutable",
                                    "name": "suffixData",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2898,
                                    "src": "4082:23:7",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 2849,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4082:5:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2852,
                                    "mutability": "mutable",
                                    "name": "sig",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2898,
                                    "src": "4115:16:7",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 2851,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4115:5:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3971:161:7"
                        },
                        "returnParameters": {
                            "id": 2854,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "4159:0:7"
                        },
                        "scope": 2934,
                        "src": "3952:628:7",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 2932,
                            "nodeType": "Block",
                            "src": "4775:307:7",
                            "statements": [
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 2911,
                                                "name": "requestTypeHash",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2902,
                                                "src": "4822:15:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "arguments": [
                                                    {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 2914,
                                                            "name": "req",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 2900,
                                                            "src": "4879:3:7",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                                                "typeString": "struct IForwarder.ForwardRequest memory"
                                                            }
                                                        },
                                                        "id": 2915,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "from",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 2939,
                                                        "src": "4879:8:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 2916,
                                                            "name": "req",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 2900,
                                                            "src": "4905:3:7",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                                                "typeString": "struct IForwarder.ForwardRequest memory"
                                                            }
                                                        },
                                                        "id": 2917,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "to",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 2941,
                                                        "src": "4905:6:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 2918,
                                                            "name": "req",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 2900,
                                                            "src": "4929:3:7",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                                                "typeString": "struct IForwarder.ForwardRequest memory"
                                                            }
                                                        },
                                                        "id": 2919,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "value",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 2943,
                                                        "src": "4929:9:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 2920,
                                                            "name": "req",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 2900,
                                                            "src": "4956:3:7",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                                                "typeString": "struct IForwarder.ForwardRequest memory"
                                                            }
                                                        },
                                                        "id": 2921,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "gas",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 2945,
                                                        "src": "4956:7:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 2922,
                                                            "name": "req",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 2900,
                                                            "src": "4981:3:7",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                                                "typeString": "struct IForwarder.ForwardRequest memory"
                                                            }
                                                        },
                                                        "id": 2923,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "nonce",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 2947,
                                                        "src": "4981:9:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    {
                                                        "argumentTypes": null,
                                                        "arguments": [
                                                            {
                                                                "argumentTypes": null,
                                                                "expression": {
                                                                    "argumentTypes": null,
                                                                    "id": 2925,
                                                                    "name": "req",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 2900,
                                                                    "src": "5018:3:7",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                                                        "typeString": "struct IForwarder.ForwardRequest memory"
                                                                    }
                                                                },
                                                                "id": 2926,
                                                                "isConstant": false,
                                                                "isLValue": true,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "data",
                                                                "nodeType": "MemberAccess",
                                                                "referencedDeclaration": 2949,
                                                                "src": "5018:8:7",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                                    "typeString": "bytes memory"
                                                                }
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                                    "typeString": "bytes memory"
                                                                }
                                                            ],
                                                            "id": 2924,
                                                            "name": "keccak256",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": -8,
                                                            "src": "5008:9:7",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                                                "typeString": "function (bytes memory) pure returns (bytes32)"
                                                            }
                                                        },
                                                        "id": 2927,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "functionCall",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "5008:19:7",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes32",
                                                            "typeString": "bytes32"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_bytes32",
                                                            "typeString": "bytes32"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 2912,
                                                        "name": "abi",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": -1,
                                                        "src": "4851:3:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_abi",
                                                            "typeString": "abi"
                                                        }
                                                    },
                                                    "id": 2913,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "memberName": "encode",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": null,
                                                    "src": "4851:10:7",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                                        "typeString": "function () pure returns (bytes memory)"
                                                    }
                                                },
                                                "id": 2928,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "4851:190:7",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 2929,
                                                "name": "suffixData",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2904,
                                                "src": "5055:10:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 2909,
                                                "name": "abi",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": -1,
                                                "src": "4792:3:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_magic_abi",
                                                    "typeString": "abi"
                                                }
                                            },
                                            "id": 2910,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "memberName": "encodePacked",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": null,
                                            "src": "4792:16:7",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                                "typeString": "function () pure returns (bytes memory)"
                                            }
                                        },
                                        "id": 2930,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4792:283:7",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                        }
                                    },
                                    "functionReturnParameters": 2908,
                                    "id": 2931,
                                    "nodeType": "Return",
                                    "src": "4785:290:7"
                                }
                            ]
                        },
                        "documentation": null,
                        "functionSelector": "c45c2674",
                        "id": 2933,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "_getEncoded",
                        "nodeType": "FunctionDefinition",
                        "overrides": null,
                        "parameters": {
                            "id": 2905,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2900,
                                    "mutability": "mutable",
                                    "name": "req",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2933,
                                    "src": "4616:25:7",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                        "typeString": "struct IForwarder.ForwardRequest"
                                    },
                                    "typeName": {
                                        "contractScope": null,
                                        "id": 2899,
                                        "name": "ForwardRequest",
                                        "nodeType": "UserDefinedTypeName",
                                        "referencedDeclaration": 2950,
                                        "src": "4616:14:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_ForwardRequest_$2950_storage_ptr",
                                            "typeString": "struct IForwarder.ForwardRequest"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2902,
                                    "mutability": "mutable",
                                    "name": "requestTypeHash",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2933,
                                    "src": "4651:23:7",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 2901,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4651:7:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2904,
                                    "mutability": "mutable",
                                    "name": "suffixData",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2933,
                                    "src": "4684:23:7",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 2903,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4684:5:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4606:107:7"
                        },
                        "returnParameters": {
                            "id": 2908,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2907,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2933,
                                    "src": "4756:12:7",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 2906,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4756:5:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4746:28:7"
                        },
                        "scope": 2934,
                        "src": "4586:496:7",
                        "stateMutability": "pure",
                        "virtual": false,
                        "visibility": "public"
                    }
                ],
                "scope": 2935,
                "src": "175:4909:7"
            }
        ],
        "src": "31:5054:7"
    },
    "legacyAST": {
        "absolutePath": "/Users/dror/IdeaProjects/gsn/contracts/forwarder/Forwarder.sol",
        "exportedSymbols": {
            "Forwarder": [
                2934
            ]
        },
        "id": 2935,
        "license": "MIT",
        "nodeType": "SourceUnit",
        "nodes": [
            {
                "id": 2481,
                "literals": [
                    "solidity",
                    "^",
                    "0.6",
                    ".2"
                ],
                "nodeType": "PragmaDirective",
                "src": "31:23:7"
            },
            {
                "id": 2482,
                "literals": [
                    "experimental",
                    "ABIEncoderV2"
                ],
                "nodeType": "PragmaDirective",
                "src": "55:33:7"
            },
            {
                "absolutePath": "@openzeppelin/contracts/cryptography/ECDSA.sol",
                "file": "@openzeppelin/contracts/cryptography/ECDSA.sol",
                "id": 2483,
                "nodeType": "ImportDirective",
                "scope": 2935,
                "sourceUnit": 6566,
                "src": "90:56:7",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/dror/IdeaProjects/gsn/contracts/forwarder/IForwarder.sol",
                "file": "./IForwarder.sol",
                "id": 2484,
                "nodeType": "ImportDirective",
                "scope": 2935,
                "sourceUnit": 3007,
                "src": "147:26:7",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "abstract": false,
                "baseContracts": [
                    {
                        "arguments": null,
                        "baseName": {
                            "contractScope": null,
                            "id": 2485,
                            "name": "IForwarder",
                            "nodeType": "UserDefinedTypeName",
                            "referencedDeclaration": 3006,
                            "src": "197:10:7",
                            "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IForwarder_$3006",
                                "typeString": "contract IForwarder"
                            }
                        },
                        "id": 2486,
                        "nodeType": "InheritanceSpecifier",
                        "src": "197:10:7"
                    }
                ],
                "contractDependencies": [
                    3006
                ],
                "contractKind": "contract",
                "documentation": null,
                "fullyImplemented": true,
                "id": 2934,
                "linearizedBaseContracts": [
                    2934,
                    3006
                ],
                "name": "Forwarder",
                "nodeType": "ContractDefinition",
                "nodes": [
                    {
                        "id": 2489,
                        "libraryName": {
                            "contractScope": null,
                            "id": 2487,
                            "name": "ECDSA",
                            "nodeType": "UserDefinedTypeName",
                            "referencedDeclaration": 6565,
                            "src": "220:5:7",
                            "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ECDSA_$6565",
                                "typeString": "library ECDSA"
                            }
                        },
                        "nodeType": "UsingForDirective",
                        "src": "214:24:7",
                        "typeName": {
                            "id": 2488,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "230:7:7",
                            "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                            }
                        }
                    },
                    {
                        "constant": true,
                        "functionSelector": "066a310c",
                        "id": 2492,
                        "mutability": "constant",
                        "name": "GENERIC_PARAMS",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2934,
                        "src": "244:116:7",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string"
                        },
                        "typeName": {
                            "id": 2490,
                            "name": "string",
                            "nodeType": "ElementaryTypeName",
                            "src": "244:6:7",
                            "typeDescriptions": {
                                "typeIdentifier": "t_string_storage_ptr",
                                "typeString": "string"
                            }
                        },
                        "value": {
                            "argumentTypes": null,
                            "hexValue": "616464726573732066726f6d2c6164647265737320746f2c75696e743235362076616c75652c75696e74323536206761732c75696e74323536206e6f6e63652c62797465732064617461",
                            "id": 2491,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "284:76:7",
                            "subdenomination": null,
                            "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_89bcdd0fee8c360248ddfd07733b7210c5d14e63c935f3a66aa03f096b973097",
                                "typeString": "literal_string \"address from,address to,uint256 value,uint256 gas,uint256 nonce,bytes data\""
                            },
                            "value": "address from,address to,uint256 value,uint256 gas,uint256 nonce,bytes data"
                        },
                        "visibility": "public"
                    },
                    {
                        "constant": true,
                        "functionSelector": "c3f28abd",
                        "id": 2495,
                        "mutability": "constant",
                        "name": "EIP712_DOMAIN_TYPE",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2934,
                        "src": "367:128:7",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string"
                        },
                        "typeName": {
                            "id": 2493,
                            "name": "string",
                            "nodeType": "ElementaryTypeName",
                            "src": "367:6:7",
                            "typeDescriptions": {
                                "typeIdentifier": "t_string_storage_ptr",
                                "typeString": "string"
                            }
                        },
                        "value": {
                            "argumentTypes": null,
                            "hexValue": "454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429",
                            "id": 2494,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "411:84:7",
                            "subdenomination": null,
                            "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f",
                                "typeString": "literal_string \"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\""
                            },
                            "value": "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"
                        },
                        "visibility": "public"
                    },
                    {
                        "constant": false,
                        "functionSelector": "21fe98df",
                        "id": 2499,
                        "mutability": "mutable",
                        "name": "typeHashes",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2934,
                        "src": "502:42:7",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                            "typeString": "mapping(bytes32 => bool)"
                        },
                        "typeName": {
                            "id": 2498,
                            "keyType": {
                                "id": 2496,
                                "name": "bytes32",
                                "nodeType": "ElementaryTypeName",
                                "src": "510:7:7",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                }
                            },
                            "nodeType": "Mapping",
                            "src": "502:24:7",
                            "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                                "typeString": "mapping(bytes32 => bool)"
                            },
                            "valueType": {
                                "id": 2497,
                                "name": "bool",
                                "nodeType": "ElementaryTypeName",
                                "src": "521:4:7",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                }
                            }
                        },
                        "value": null,
                        "visibility": "public"
                    },
                    {
                        "constant": false,
                        "functionSelector": "c722f177",
                        "id": 2503,
                        "mutability": "mutable",
                        "name": "domains",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2934,
                        "src": "550:39:7",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                            "typeString": "mapping(bytes32 => bool)"
                        },
                        "typeName": {
                            "id": 2502,
                            "keyType": {
                                "id": 2500,
                                "name": "bytes32",
                                "nodeType": "ElementaryTypeName",
                                "src": "558:7:7",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                }
                            },
                            "nodeType": "Mapping",
                            "src": "550:24:7",
                            "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                                "typeString": "mapping(bytes32 => bool)"
                            },
                            "valueType": {
                                "id": 2501,
                                "name": "bool",
                                "nodeType": "ElementaryTypeName",
                                "src": "569:4:7",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                }
                            }
                        },
                        "value": null,
                        "visibility": "public"
                    },
                    {
                        "constant": false,
                        "id": 2507,
                        "mutability": "mutable",
                        "name": "nonces",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2934,
                        "src": "653:42:7",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                            "typeString": "mapping(address => uint256)"
                        },
                        "typeName": {
                            "id": 2506,
                            "keyType": {
                                "id": 2504,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "661:7:7",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                }
                            },
                            "nodeType": "Mapping",
                            "src": "653:27:7",
                            "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                            },
                            "valueType": {
                                "id": 2505,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "672:7:7",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                }
                            }
                        },
                        "value": null,
                        "visibility": "private"
                    },
                    {
                        "body": {
                            "id": 2510,
                            "nodeType": "Block",
                            "src": "778:2:7",
                            "statements": []
                        },
                        "documentation": null,
                        "id": 2511,
                        "implemented": true,
                        "kind": "receive",
                        "modifiers": [],
                        "name": "",
                        "nodeType": "FunctionDefinition",
                        "overrides": null,
                        "parameters": {
                            "id": 2508,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "758:2:7"
                        },
                        "returnParameters": {
                            "id": 2509,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "778:0:7"
                        },
                        "scope": 2934,
                        "src": "751:29:7",
                        "stateMutability": "payable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            2957
                        ],
                        "body": {
                            "id": 2523,
                            "nodeType": "Block",
                            "src": "865:36:7",
                            "statements": [
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                            "argumentTypes": null,
                                            "id": 2519,
                                            "name": "nonces",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2507,
                                            "src": "882:6:7",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                "typeString": "mapping(address => uint256)"
                                            }
                                        },
                                        "id": 2521,
                                        "indexExpression": {
                                            "argumentTypes": null,
                                            "id": 2520,
                                            "name": "from",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2513,
                                            "src": "889:4:7",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "882:12:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "functionReturnParameters": 2518,
                                    "id": 2522,
                                    "nodeType": "Return",
                                    "src": "875:19:7"
                                }
                            ]
                        },
                        "documentation": null,
                        "functionSelector": "2d0335ab",
                        "id": 2524,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getNonce",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 2515,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "834:8:7"
                        },
                        "parameters": {
                            "id": 2514,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2513,
                                    "mutability": "mutable",
                                    "name": "from",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2524,
                                    "src": "804:12:7",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 2512,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "804:7:7",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "803:14:7"
                        },
                        "returnParameters": {
                            "id": 2518,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2517,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2524,
                                    "src": "856:7:7",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 2516,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "856:7:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "855:9:7"
                        },
                        "scope": 2934,
                        "src": "786:115:7",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "body": {
                            "id": 2543,
                            "nodeType": "Block",
                            "src": "928:160:7",
                            "statements": [
                                {
                                    "assignments": [
                                        2528
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 2528,
                                            "mutability": "mutable",
                                            "name": "requestType",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 2543,
                                            "src": "939:25:7",
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_string_memory_ptr",
                                                "typeString": "string"
                                            },
                                            "typeName": {
                                                "id": 2527,
                                                "name": "string",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "939:6:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_string_storage_ptr",
                                                    "typeString": "string"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 2538,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "arguments": [
                                                    {
                                                        "argumentTypes": null,
                                                        "hexValue": "466f72776172645265717565737428",
                                                        "id": 2533,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "string",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "991:17:7",
                                                        "subdenomination": null,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_stringliteral_02400580691f62fd612767b414e7b88f024d8265e514f15245995a20cf0d8379",
                                                            "typeString": "literal_string \"ForwardRequest(\""
                                                        },
                                                        "value": "ForwardRequest("
                                                    },
                                                    {
                                                        "argumentTypes": null,
                                                        "id": 2534,
                                                        "name": "GENERIC_PARAMS",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2492,
                                                        "src": "1010:14:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_string_memory_ptr",
                                                            "typeString": "string memory"
                                                        }
                                                    },
                                                    {
                                                        "argumentTypes": null,
                                                        "hexValue": "29",
                                                        "id": 2535,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "string",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "1026:3:7",
                                                        "subdenomination": null,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_stringliteral_59d76dc3b33357eda30db1508968fbb18f21b9cd2442f1559b20154ddaa4d7ed",
                                                            "typeString": "literal_string \")\""
                                                        },
                                                        "value": ")"
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_stringliteral_02400580691f62fd612767b414e7b88f024d8265e514f15245995a20cf0d8379",
                                                            "typeString": "literal_string \"ForwardRequest(\""
                                                        },
                                                        {
                                                            "typeIdentifier": "t_string_memory_ptr",
                                                            "typeString": "string memory"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_stringliteral_59d76dc3b33357eda30db1508968fbb18f21b9cd2442f1559b20154ddaa4d7ed",
                                                            "typeString": "literal_string \")\""
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 2531,
                                                        "name": "abi",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": -1,
                                                        "src": "974:3:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_abi",
                                                            "typeString": "abi"
                                                        }
                                                    },
                                                    "id": 2532,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "memberName": "encodePacked",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": null,
                                                    "src": "974:16:7",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                                        "typeString": "function () pure returns (bytes memory)"
                                                    }
                                                },
                                                "id": 2536,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "974:56:7",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "id": 2530,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "nodeType": "ElementaryTypeNameExpression",
                                            "src": "967:6:7",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                                                "typeString": "type(string storage pointer)"
                                            },
                                            "typeName": {
                                                "id": 2529,
                                                "name": "string",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "967:6:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": null,
                                                    "typeString": null
                                                }
                                            }
                                        },
                                        "id": 2537,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "967:64:7",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_memory_ptr",
                                            "typeString": "string memory"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "939:92:7"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 2540,
                                                "name": "requestType",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2528,
                                                "src": "1069:11:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_string_memory_ptr",
                                                    "typeString": "string memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_string_memory_ptr",
                                                    "typeString": "string memory"
                                                }
                                            ],
                                            "id": 2539,
                                            "name": "registerRequestTypeInternal",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2830,
                                            "src": "1041:27:7",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (string memory)"
                                            }
                                        },
                                        "id": 2541,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1041:40:7",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2542,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1041:40:7"
                                }
                            ]
                        },
                        "documentation": null,
                        "id": 2544,
                        "implemented": true,
                        "kind": "constructor",
                        "modifiers": [],
                        "name": "",
                        "nodeType": "FunctionDefinition",
                        "overrides": null,
                        "parameters": {
                            "id": 2525,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "918:2:7"
                        },
                        "returnParameters": {
                            "id": 2526,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "928:0:7"
                        },
                        "scope": 2934,
                        "src": "907:181:7",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            2971
                        ],
                        "body": {
                            "id": 2570,
                            "nodeType": "Block",
                            "src": "1302:111:7",
                            "statements": [
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 2559,
                                                "name": "req",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2546,
                                                "src": "1326:3:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                                    "typeString": "struct IForwarder.ForwardRequest memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                                    "typeString": "struct IForwarder.ForwardRequest memory"
                                                }
                                            ],
                                            "id": 2558,
                                            "name": "_verifyNonce",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2670,
                                            "src": "1313:12:7",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_struct$_ForwardRequest_$2950_memory_ptr_$returns$__$",
                                                "typeString": "function (struct IForwarder.ForwardRequest memory) view"
                                            }
                                        },
                                        "id": 2560,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1313:17:7",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2561,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1313:17:7"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 2563,
                                                "name": "req",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2546,
                                                "src": "1351:3:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                                    "typeString": "struct IForwarder.ForwardRequest memory"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 2564,
                                                "name": "domainSeparator",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2548,
                                                "src": "1356:15:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 2565,
                                                "name": "requestTypeHash",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2550,
                                                "src": "1373:15:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 2566,
                                                "name": "suffixData",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2552,
                                                "src": "1390:10:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 2567,
                                                "name": "sig",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2554,
                                                "src": "1402:3:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                                    "typeString": "struct IForwarder.ForwardRequest memory"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            ],
                                            "id": 2562,
                                            "name": "_verifySig",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2898,
                                            "src": "1340:10:7",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_struct$_ForwardRequest_$2950_memory_ptr_$_t_bytes32_$_t_bytes32_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$__$",
                                                "typeString": "function (struct IForwarder.ForwardRequest memory,bytes32,bytes32,bytes memory,bytes memory) view"
                                            }
                                        },
                                        "id": 2568,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1340:66:7",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2569,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1340:66:7"
                                }
                            ]
                        },
                        "documentation": null,
                        "functionSelector": "992d82c3",
                        "id": 2571,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "verify",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 2556,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "1288:8:7"
                        },
                        "parameters": {
                            "id": 2555,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2546,
                                    "mutability": "mutable",
                                    "name": "req",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2571,
                                    "src": "1119:25:7",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                        "typeString": "struct IForwarder.ForwardRequest"
                                    },
                                    "typeName": {
                                        "contractScope": null,
                                        "id": 2545,
                                        "name": "ForwardRequest",
                                        "nodeType": "UserDefinedTypeName",
                                        "referencedDeclaration": 2950,
                                        "src": "1119:14:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_ForwardRequest_$2950_storage_ptr",
                                            "typeString": "struct IForwarder.ForwardRequest"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2548,
                                    "mutability": "mutable",
                                    "name": "domainSeparator",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2571,
                                    "src": "1154:23:7",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 2547,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1154:7:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2550,
                                    "mutability": "mutable",
                                    "name": "requestTypeHash",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2571,
                                    "src": "1187:23:7",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 2549,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1187:7:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2552,
                                    "mutability": "mutable",
                                    "name": "suffixData",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2571,
                                    "src": "1220:25:7",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 2551,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1220:5:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2554,
                                    "mutability": "mutable",
                                    "name": "sig",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2571,
                                    "src": "1255:18:7",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 2553,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1255:5:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1109:165:7"
                        },
                        "returnParameters": {
                            "id": 2557,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1302:0:7"
                        },
                        "scope": 2934,
                        "src": "1094:319:7",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            2989
                        ],
                        "body": {
                            "id": 2652,
                            "nodeType": "Block",
                            "src": "1685:541:7",
                            "statements": [
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 2590,
                                                "name": "req",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2573,
                                                "src": "1708:3:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                                    "typeString": "struct IForwarder.ForwardRequest memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                                    "typeString": "struct IForwarder.ForwardRequest memory"
                                                }
                                            ],
                                            "id": 2589,
                                            "name": "_verifyNonce",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2670,
                                            "src": "1695:12:7",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_struct$_ForwardRequest_$2950_memory_ptr_$returns$__$",
                                                "typeString": "function (struct IForwarder.ForwardRequest memory) view"
                                            }
                                        },
                                        "id": 2591,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1695:17:7",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2592,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1695:17:7"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 2594,
                                                "name": "req",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2573,
                                                "src": "1733:3:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                                    "typeString": "struct IForwarder.ForwardRequest memory"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 2595,
                                                "name": "domainSeparator",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2575,
                                                "src": "1738:15:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 2596,
                                                "name": "requestTypeHash",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2577,
                                                "src": "1755:15:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 2597,
                                                "name": "suffixData",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2579,
                                                "src": "1772:10:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 2598,
                                                "name": "sig",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2581,
                                                "src": "1784:3:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                                    "typeString": "struct IForwarder.ForwardRequest memory"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            ],
                                            "id": 2593,
                                            "name": "_verifySig",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2898,
                                            "src": "1722:10:7",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_struct$_ForwardRequest_$2950_memory_ptr_$_t_bytes32_$_t_bytes32_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$__$",
                                                "typeString": "function (struct IForwarder.ForwardRequest memory,bytes32,bytes32,bytes memory,bytes memory) view"
                                            }
                                        },
                                        "id": 2599,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1722:66:7",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2600,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1722:66:7"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 2602,
                                                "name": "req",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2573,
                                                "src": "1811:3:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                                    "typeString": "struct IForwarder.ForwardRequest memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                                    "typeString": "struct IForwarder.ForwardRequest memory"
                                                }
                                            ],
                                            "id": 2601,
                                            "name": "_updateNonce",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2682,
                                            "src": "1798:12:7",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_ForwardRequest_$2950_memory_ptr_$returns$__$",
                                                "typeString": "function (struct IForwarder.ForwardRequest memory)"
                                            }
                                        },
                                        "id": 2603,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1798:17:7",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2604,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1798:17:7"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 2624,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "argumentTypes": null,
                                            "components": [
                                                {
                                                    "argumentTypes": null,
                                                    "id": 2605,
                                                    "name": "success",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 2585,
                                                    "src": "1886:7:7",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                {
                                                    "argumentTypes": null,
                                                    "id": 2606,
                                                    "name": "ret",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 2587,
                                                    "src": "1894:3:7",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                        "typeString": "bytes memory"
                                                    }
                                                }
                                            ],
                                            "id": 2607,
                                            "isConstant": false,
                                            "isInlineArray": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "TupleExpression",
                                            "src": "1885:13:7",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                                                "typeString": "tuple(bool,bytes memory)"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "argumentTypes": null,
                                            "arguments": [
                                                {
                                                    "argumentTypes": null,
                                                    "arguments": [
                                                        {
                                                            "argumentTypes": null,
                                                            "expression": {
                                                                "argumentTypes": null,
                                                                "id": 2618,
                                                                "name": "req",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 2573,
                                                                "src": "1964:3:7",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                                                    "typeString": "struct IForwarder.ForwardRequest memory"
                                                                }
                                                            },
                                                            "id": 2619,
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "data",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 2949,
                                                            "src": "1964:8:7",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            }
                                                        },
                                                        {
                                                            "argumentTypes": null,
                                                            "expression": {
                                                                "argumentTypes": null,
                                                                "id": 2620,
                                                                "name": "req",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 2573,
                                                                "src": "1974:3:7",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                                                    "typeString": "struct IForwarder.ForwardRequest memory"
                                                                }
                                                            },
                                                            "id": 2621,
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "from",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 2939,
                                                            "src": "1974:8:7",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 2616,
                                                            "name": "abi",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": -1,
                                                            "src": "1947:3:7",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_magic_abi",
                                                                "typeString": "abi"
                                                            }
                                                        },
                                                        "id": 2617,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "memberName": "encodePacked",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": null,
                                                        "src": "1947:16:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                                            "typeString": "function () pure returns (bytes memory)"
                                                        }
                                                    },
                                                    "id": 2622,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "1947:36:7",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                        "typeString": "bytes memory"
                                                    }
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                        "typeString": "bytes memory"
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 2608,
                                                            "name": "req",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 2573,
                                                            "src": "1901:3:7",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                                                "typeString": "struct IForwarder.ForwardRequest memory"
                                                            }
                                                        },
                                                        "id": 2609,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "to",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 2941,
                                                        "src": "1901:6:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "id": 2610,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "call",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": null,
                                                    "src": "1901:11:7",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                                                        "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                                                    }
                                                },
                                                "id": 2615,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "names": [
                                                    "gas",
                                                    "value"
                                                ],
                                                "nodeType": "FunctionCallOptions",
                                                "options": [
                                                    {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 2611,
                                                            "name": "req",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 2573,
                                                            "src": "1919:3:7",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                                                "typeString": "struct IForwarder.ForwardRequest memory"
                                                            }
                                                        },
                                                        "id": 2612,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "gas",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 2945,
                                                        "src": "1919:7:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 2613,
                                                            "name": "req",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 2573,
                                                            "src": "1936:3:7",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                                                "typeString": "struct IForwarder.ForwardRequest memory"
                                                            }
                                                        },
                                                        "id": 2614,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "value",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 2943,
                                                        "src": "1936:9:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    }
                                                ],
                                                "src": "1901:45:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$gasvalue",
                                                    "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                                                }
                                            },
                                            "id": 2623,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "1901:83:7",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                                                "typeString": "tuple(bool,bytes memory)"
                                            }
                                        },
                                        "src": "1885:99:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2625,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1885:99:7"
                                },
                                {
                                    "condition": {
                                        "argumentTypes": null,
                                        "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        },
                                        "id": 2632,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "argumentTypes": null,
                                            "expression": {
                                                "argumentTypes": null,
                                                "arguments": [
                                                    {
                                                        "argumentTypes": null,
                                                        "id": 2628,
                                                        "name": "this",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": -28,
                                                        "src": "2007:4:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_contract$_Forwarder_$2934",
                                                            "typeString": "contract Forwarder"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_contract$_Forwarder_$2934",
                                                            "typeString": "contract Forwarder"
                                                        }
                                                    ],
                                                    "id": 2627,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "ElementaryTypeNameExpression",
                                                    "src": "1999:7:7",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_address_$",
                                                        "typeString": "type(address)"
                                                    },
                                                    "typeName": {
                                                        "id": 2626,
                                                        "name": "address",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "1999:7:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": null,
                                                            "typeString": null
                                                        }
                                                    }
                                                },
                                                "id": 2629,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "typeConversion",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "1999:13:7",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            },
                                            "id": 2630,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "balance",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": null,
                                            "src": "1999:21:7",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": ">",
                                        "rightExpression": {
                                            "argumentTypes": null,
                                            "hexValue": "30",
                                            "id": 2631,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "2021:1:7",
                                            "subdenomination": null,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_rational_0_by_1",
                                                "typeString": "int_const 0"
                                            },
                                            "value": "0"
                                        },
                                        "src": "1999:23:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "falseBody": null,
                                    "id": 2647,
                                    "nodeType": "IfStatement",
                                    "src": "1994:196:7",
                                    "trueBody": {
                                        "id": 2646,
                                        "nodeType": "Block",
                                        "src": "2025:165:7",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "arguments": [
                                                        {
                                                            "argumentTypes": null,
                                                            "expression": {
                                                                "argumentTypes": null,
                                                                "arguments": [
                                                                    {
                                                                        "argumentTypes": null,
                                                                        "id": 2641,
                                                                        "name": "this",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": -28,
                                                                        "src": "2165:4:7",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_contract$_Forwarder_$2934",
                                                                            "typeString": "contract Forwarder"
                                                                        }
                                                                    }
                                                                ],
                                                                "expression": {
                                                                    "argumentTypes": [
                                                                        {
                                                                            "typeIdentifier": "t_contract$_Forwarder_$2934",
                                                                            "typeString": "contract Forwarder"
                                                                        }
                                                                    ],
                                                                    "id": 2640,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "nodeType": "ElementaryTypeNameExpression",
                                                                    "src": "2157:7:7",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_type$_t_address_$",
                                                                        "typeString": "type(address)"
                                                                    },
                                                                    "typeName": {
                                                                        "id": 2639,
                                                                        "name": "address",
                                                                        "nodeType": "ElementaryTypeName",
                                                                        "src": "2157:7:7",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": null,
                                                                            "typeString": null
                                                                        }
                                                                    }
                                                                },
                                                                "id": 2642,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "kind": "typeConversion",
                                                                "lValueRequested": false,
                                                                "names": [],
                                                                "nodeType": "FunctionCall",
                                                                "src": "2157:13:7",
                                                                "tryCall": false,
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address_payable",
                                                                    "typeString": "address payable"
                                                                }
                                                            },
                                                            "id": 2643,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "balance",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": null,
                                                            "src": "2157:21:7",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "arguments": [
                                                                {
                                                                    "argumentTypes": null,
                                                                    "expression": {
                                                                        "argumentTypes": null,
                                                                        "id": 2635,
                                                                        "name": "req",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 2573,
                                                                        "src": "2138:3:7",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                                                            "typeString": "struct IForwarder.ForwardRequest memory"
                                                                        }
                                                                    },
                                                                    "id": 2636,
                                                                    "isConstant": false,
                                                                    "isLValue": true,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "memberName": "from",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 2939,
                                                                    "src": "2138:8:7",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_address",
                                                                        "typeString": "address"
                                                                    }
                                                                }
                                                            ],
                                                            "expression": {
                                                                "argumentTypes": [
                                                                    {
                                                                        "typeIdentifier": "t_address",
                                                                        "typeString": "address"
                                                                    }
                                                                ],
                                                                "id": 2634,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "lValueRequested": false,
                                                                "nodeType": "ElementaryTypeNameExpression",
                                                                "src": "2130:8:7",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_type$_t_address_payable_$",
                                                                    "typeString": "type(address payable)"
                                                                },
                                                                "typeName": {
                                                                    "id": 2633,
                                                                    "name": "address",
                                                                    "nodeType": "ElementaryTypeName",
                                                                    "src": "2130:8:7",
                                                                    "stateMutability": "payable",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": null,
                                                                        "typeString": null
                                                                    }
                                                                }
                                                            },
                                                            "id": 2637,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "kind": "typeConversion",
                                                            "lValueRequested": false,
                                                            "names": [],
                                                            "nodeType": "FunctionCall",
                                                            "src": "2130:17:7",
                                                            "tryCall": false,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address_payable",
                                                                "typeString": "address payable"
                                                            }
                                                        },
                                                        "id": 2638,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "transfer",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": null,
                                                        "src": "2130:26:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$",
                                                            "typeString": "function (uint256)"
                                                        }
                                                    },
                                                    "id": 2644,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "2130:49:7",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$__$",
                                                        "typeString": "tuple()"
                                                    }
                                                },
                                                "id": 2645,
                                                "nodeType": "ExpressionStatement",
                                                "src": "2130:49:7"
                                            }
                                        ]
                                    }
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "components": [
                                            {
                                                "argumentTypes": null,
                                                "id": 2648,
                                                "name": "success",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2585,
                                                "src": "2207:7:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 2649,
                                                "name": "ret",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2587,
                                                "src": "2215:3:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "id": 2650,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "2206:13:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                                            "typeString": "tuple(bool,bytes memory)"
                                        }
                                    },
                                    "functionReturnParameters": 2588,
                                    "id": 2651,
                                    "nodeType": "Return",
                                    "src": "2199:20:7"
                                }
                            ]
                        },
                        "documentation": null,
                        "functionSelector": "cdf5735a",
                        "id": 2653,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "execute",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 2583,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "1631:8:7"
                        },
                        "parameters": {
                            "id": 2582,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2573,
                                    "mutability": "mutable",
                                    "name": "req",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2653,
                                    "src": "1445:25:7",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                        "typeString": "struct IForwarder.ForwardRequest"
                                    },
                                    "typeName": {
                                        "contractScope": null,
                                        "id": 2572,
                                        "name": "ForwardRequest",
                                        "nodeType": "UserDefinedTypeName",
                                        "referencedDeclaration": 2950,
                                        "src": "1445:14:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_ForwardRequest_$2950_storage_ptr",
                                            "typeString": "struct IForwarder.ForwardRequest"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2575,
                                    "mutability": "mutable",
                                    "name": "domainSeparator",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2653,
                                    "src": "1480:23:7",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 2574,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1480:7:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2577,
                                    "mutability": "mutable",
                                    "name": "requestTypeHash",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2653,
                                    "src": "1513:23:7",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 2576,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1513:7:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2579,
                                    "mutability": "mutable",
                                    "name": "suffixData",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2653,
                                    "src": "1546:25:7",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 2578,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1546:5:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2581,
                                    "mutability": "mutable",
                                    "name": "sig",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2653,
                                    "src": "1581:18:7",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 2580,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1581:5:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1435:170:7"
                        },
                        "returnParameters": {
                            "id": 2588,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2585,
                                    "mutability": "mutable",
                                    "name": "success",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2653,
                                    "src": "1653:12:7",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 2584,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1653:4:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2587,
                                    "mutability": "mutable",
                                    "name": "ret",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2653,
                                    "src": "1667:16:7",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 2586,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1667:5:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1652:32:7"
                        },
                        "scope": 2934,
                        "src": "1419:807:7",
                        "stateMutability": "payable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "body": {
                            "id": 2669,
                            "nodeType": "Block",
                            "src": "2296:73:7",
                            "statements": [
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 2665,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "baseExpression": {
                                                        "argumentTypes": null,
                                                        "id": 2659,
                                                        "name": "nonces",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2507,
                                                        "src": "2314:6:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                            "typeString": "mapping(address => uint256)"
                                                        }
                                                    },
                                                    "id": 2662,
                                                    "indexExpression": {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 2660,
                                                            "name": "req",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 2655,
                                                            "src": "2321:3:7",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                                                "typeString": "struct IForwarder.ForwardRequest memory"
                                                            }
                                                        },
                                                        "id": 2661,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "from",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 2939,
                                                        "src": "2321:8:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "2314:16:7",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "==",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 2663,
                                                        "name": "req",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2655,
                                                        "src": "2334:3:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                                            "typeString": "struct IForwarder.ForwardRequest memory"
                                                        }
                                                    },
                                                    "id": 2664,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "nonce",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 2947,
                                                    "src": "2334:9:7",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "2314:29:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "6e6f6e6365206d69736d61746368",
                                                "id": 2666,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "2345:16:7",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_19fa454ecd3cf263dcaa6dc55dff88ba7714cec09f60c18060943ba1b9329259",
                                                    "typeString": "literal_string \"nonce mismatch\""
                                                },
                                                "value": "nonce mismatch"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_19fa454ecd3cf263dcaa6dc55dff88ba7714cec09f60c18060943ba1b9329259",
                                                    "typeString": "literal_string \"nonce mismatch\""
                                                }
                                            ],
                                            "id": 2658,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "2306:7:7",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 2667,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2306:56:7",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2668,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2306:56:7"
                                }
                            ]
                        },
                        "documentation": null,
                        "id": 2670,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "_verifyNonce",
                        "nodeType": "FunctionDefinition",
                        "overrides": null,
                        "parameters": {
                            "id": 2656,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2655,
                                    "mutability": "mutable",
                                    "name": "req",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2670,
                                    "src": "2255:25:7",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                        "typeString": "struct IForwarder.ForwardRequest"
                                    },
                                    "typeName": {
                                        "contractScope": null,
                                        "id": 2654,
                                        "name": "ForwardRequest",
                                        "nodeType": "UserDefinedTypeName",
                                        "referencedDeclaration": 2950,
                                        "src": "2255:14:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_ForwardRequest_$2950_storage_ptr",
                                            "typeString": "struct IForwarder.ForwardRequest"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2254:27:7"
                        },
                        "returnParameters": {
                            "id": 2657,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "2296:0:7"
                        },
                        "scope": 2934,
                        "src": "2233:136:7",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 2681,
                            "nodeType": "Block",
                            "src": "2433:35:7",
                            "statements": [
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 2679,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "UnaryOperation",
                                        "operator": "++",
                                        "prefix": false,
                                        "src": "2443:18:7",
                                        "subExpression": {
                                            "argumentTypes": null,
                                            "baseExpression": {
                                                "argumentTypes": null,
                                                "id": 2675,
                                                "name": "nonces",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2507,
                                                "src": "2443:6:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                    "typeString": "mapping(address => uint256)"
                                                }
                                            },
                                            "id": 2678,
                                            "indexExpression": {
                                                "argumentTypes": null,
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "id": 2676,
                                                    "name": "req",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 2672,
                                                    "src": "2450:3:7",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                                        "typeString": "struct IForwarder.ForwardRequest memory"
                                                    }
                                                },
                                                "id": 2677,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "from",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 2939,
                                                "src": "2450:8:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "IndexAccess",
                                            "src": "2443:16:7",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 2680,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2443:18:7"
                                }
                            ]
                        },
                        "documentation": null,
                        "id": 2682,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "_updateNonce",
                        "nodeType": "FunctionDefinition",
                        "overrides": null,
                        "parameters": {
                            "id": 2673,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2672,
                                    "mutability": "mutable",
                                    "name": "req",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2682,
                                    "src": "2397:25:7",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                        "typeString": "struct IForwarder.ForwardRequest"
                                    },
                                    "typeName": {
                                        "contractScope": null,
                                        "id": 2671,
                                        "name": "ForwardRequest",
                                        "nodeType": "UserDefinedTypeName",
                                        "referencedDeclaration": 2950,
                                        "src": "2397:14:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_ForwardRequest_$2950_storage_ptr",
                                            "typeString": "struct IForwarder.ForwardRequest"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2396:27:7"
                        },
                        "returnParameters": {
                            "id": 2674,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "2433:0:7"
                        },
                        "scope": 2934,
                        "src": "2375:93:7",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "baseFunctions": [
                            2997
                        ],
                        "body": {
                            "id": 2744,
                            "nodeType": "Block",
                            "src": "2575:345:7",
                            "statements": [
                                {
                                    "body": {
                                        "id": 2724,
                                        "nodeType": "Block",
                                        "src": "2636:117:7",
                                        "statements": [
                                            {
                                                "assignments": [
                                                    2705
                                                ],
                                                "declarations": [
                                                    {
                                                        "constant": false,
                                                        "id": 2705,
                                                        "mutability": "mutable",
                                                        "name": "c",
                                                        "nodeType": "VariableDeclaration",
                                                        "overrides": null,
                                                        "scope": 2724,
                                                        "src": "2650:8:7",
                                                        "stateVariable": false,
                                                        "storageLocation": "default",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes1",
                                                            "typeString": "bytes1"
                                                        },
                                                        "typeName": {
                                                            "id": 2704,
                                                            "name": "bytes1",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "2650:6:7",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes1",
                                                                "typeString": "bytes1"
                                                            }
                                                        },
                                                        "value": null,
                                                        "visibility": "internal"
                                                    }
                                                ],
                                                "id": 2712,
                                                "initialValue": {
                                                    "argumentTypes": null,
                                                    "baseExpression": {
                                                        "argumentTypes": null,
                                                        "arguments": [
                                                            {
                                                                "argumentTypes": null,
                                                                "id": 2708,
                                                                "name": "typeName",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 2684,
                                                                "src": "2667:8:7",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_string_calldata_ptr",
                                                                    "typeString": "string calldata"
                                                                }
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_string_calldata_ptr",
                                                                    "typeString": "string calldata"
                                                                }
                                                            ],
                                                            "id": 2707,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "nodeType": "ElementaryTypeNameExpression",
                                                            "src": "2661:5:7",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                                                "typeString": "type(bytes storage pointer)"
                                                            },
                                                            "typeName": {
                                                                "id": 2706,
                                                                "name": "bytes",
                                                                "nodeType": "ElementaryTypeName",
                                                                "src": "2661:5:7",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": null,
                                                                    "typeString": null
                                                                }
                                                            }
                                                        },
                                                        "id": 2709,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "typeConversion",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "2661:15:7",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_calldata_ptr",
                                                            "typeString": "bytes calldata"
                                                        }
                                                    },
                                                    "id": 2711,
                                                    "indexExpression": {
                                                        "argumentTypes": null,
                                                        "id": 2710,
                                                        "name": "i",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2691,
                                                        "src": "2677:1:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "2661:18:7",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes1",
                                                        "typeString": "bytes1"
                                                    }
                                                },
                                                "nodeType": "VariableDeclarationStatement",
                                                "src": "2650:29:7"
                                            },
                                            {
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "arguments": [
                                                        {
                                                            "argumentTypes": null,
                                                            "commonType": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            },
                                                            "id": 2720,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "leftExpression": {
                                                                "argumentTypes": null,
                                                                "commonType": {
                                                                    "typeIdentifier": "t_bytes1",
                                                                    "typeString": "bytes1"
                                                                },
                                                                "id": 2716,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "leftExpression": {
                                                                    "argumentTypes": null,
                                                                    "id": 2714,
                                                                    "name": "c",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 2705,
                                                                    "src": "2701:1:7",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_bytes1",
                                                                        "typeString": "bytes1"
                                                                    }
                                                                },
                                                                "nodeType": "BinaryOperation",
                                                                "operator": "!=",
                                                                "rightExpression": {
                                                                    "argumentTypes": null,
                                                                    "hexValue": "28",
                                                                    "id": 2715,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "kind": "string",
                                                                    "lValueRequested": false,
                                                                    "nodeType": "Literal",
                                                                    "src": "2706:3:7",
                                                                    "subdenomination": null,
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_stringliteral_484bf06f3118ce360605f902ef526c45207bc469c2b056352f14b8408f9f6f9a",
                                                                        "typeString": "literal_string \"(\""
                                                                    },
                                                                    "value": "("
                                                                },
                                                                "src": "2701:8:7",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_bool",
                                                                    "typeString": "bool"
                                                                }
                                                            },
                                                            "nodeType": "BinaryOperation",
                                                            "operator": "&&",
                                                            "rightExpression": {
                                                                "argumentTypes": null,
                                                                "commonType": {
                                                                    "typeIdentifier": "t_bytes1",
                                                                    "typeString": "bytes1"
                                                                },
                                                                "id": 2719,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "leftExpression": {
                                                                    "argumentTypes": null,
                                                                    "id": 2717,
                                                                    "name": "c",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 2705,
                                                                    "src": "2713:1:7",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_bytes1",
                                                                        "typeString": "bytes1"
                                                                    }
                                                                },
                                                                "nodeType": "BinaryOperation",
                                                                "operator": "!=",
                                                                "rightExpression": {
                                                                    "argumentTypes": null,
                                                                    "hexValue": "29",
                                                                    "id": 2718,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "kind": "string",
                                                                    "lValueRequested": false,
                                                                    "nodeType": "Literal",
                                                                    "src": "2718:3:7",
                                                                    "subdenomination": null,
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_stringliteral_59d76dc3b33357eda30db1508968fbb18f21b9cd2442f1559b20154ddaa4d7ed",
                                                                        "typeString": "literal_string \")\""
                                                                    },
                                                                    "value": ")"
                                                                },
                                                                "src": "2713:8:7",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_bool",
                                                                    "typeString": "bool"
                                                                }
                                                            },
                                                            "src": "2701:20:7",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            }
                                                        },
                                                        {
                                                            "argumentTypes": null,
                                                            "hexValue": "696e76616c696420747970656e616d65",
                                                            "id": 2721,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "string",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "2723:18:7",
                                                            "subdenomination": null,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_stringliteral_1685321d334670e98977cbf6cb24501d967ce2ec16834dbe3af4eae1a4d34266",
                                                                "typeString": "literal_string \"invalid typename\""
                                                            },
                                                            "value": "invalid typename"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_stringliteral_1685321d334670e98977cbf6cb24501d967ce2ec16834dbe3af4eae1a4d34266",
                                                                "typeString": "literal_string \"invalid typename\""
                                                            }
                                                        ],
                                                        "id": 2713,
                                                        "name": "require",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [
                                                            -18,
                                                            -18
                                                        ],
                                                        "referencedDeclaration": -18,
                                                        "src": "2693:7:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                            "typeString": "function (bool,string memory) pure"
                                                        }
                                                    },
                                                    "id": 2722,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "2693:49:7",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$__$",
                                                        "typeString": "tuple()"
                                                    }
                                                },
                                                "id": 2723,
                                                "nodeType": "ExpressionStatement",
                                                "src": "2693:49:7"
                                            }
                                        ]
                                    },
                                    "condition": {
                                        "argumentTypes": null,
                                        "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        },
                                        "id": 2700,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "argumentTypes": null,
                                            "id": 2694,
                                            "name": "i",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2691,
                                            "src": "2603:1:7",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "<",
                                        "rightExpression": {
                                            "argumentTypes": null,
                                            "expression": {
                                                "argumentTypes": null,
                                                "arguments": [
                                                    {
                                                        "argumentTypes": null,
                                                        "id": 2697,
                                                        "name": "typeName",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2684,
                                                        "src": "2613:8:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_string_calldata_ptr",
                                                            "typeString": "string calldata"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_string_calldata_ptr",
                                                            "typeString": "string calldata"
                                                        }
                                                    ],
                                                    "id": 2696,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "ElementaryTypeNameExpression",
                                                    "src": "2607:5:7",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                                        "typeString": "type(bytes storage pointer)"
                                                    },
                                                    "typeName": {
                                                        "id": 2695,
                                                        "name": "bytes",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "2607:5:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": null,
                                                            "typeString": null
                                                        }
                                                    }
                                                },
                                                "id": 2698,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "typeConversion",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "2607:15:7",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            },
                                            "id": 2699,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "length",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": null,
                                            "src": "2607:22:7",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "2603:26:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 2725,
                                    "initializationExpression": {
                                        "assignments": [
                                            2691
                                        ],
                                        "declarations": [
                                            {
                                                "constant": false,
                                                "id": 2691,
                                                "mutability": "mutable",
                                                "name": "i",
                                                "nodeType": "VariableDeclaration",
                                                "overrides": null,
                                                "scope": 2725,
                                                "src": "2591:6:7",
                                                "stateVariable": false,
                                                "storageLocation": "default",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "typeName": {
                                                    "id": 2690,
                                                    "name": "uint",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "2591:4:7",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "value": null,
                                                "visibility": "internal"
                                            }
                                        ],
                                        "id": 2693,
                                        "initialValue": {
                                            "argumentTypes": null,
                                            "hexValue": "30",
                                            "id": 2692,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "2600:1:7",
                                            "subdenomination": null,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_rational_0_by_1",
                                                "typeString": "int_const 0"
                                            },
                                            "value": "0"
                                        },
                                        "nodeType": "VariableDeclarationStatement",
                                        "src": "2591:10:7"
                                    },
                                    "loopExpression": {
                                        "expression": {
                                            "argumentTypes": null,
                                            "id": 2702,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "UnaryOperation",
                                            "operator": "++",
                                            "prefix": false,
                                            "src": "2631:3:7",
                                            "subExpression": {
                                                "argumentTypes": null,
                                                "id": 2701,
                                                "name": "i",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2691,
                                                "src": "2631:1:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "id": 2703,
                                        "nodeType": "ExpressionStatement",
                                        "src": "2631:3:7"
                                    },
                                    "nodeType": "ForStatement",
                                    "src": "2586:167:7"
                                },
                                {
                                    "assignments": [
                                        2727
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 2727,
                                            "mutability": "mutable",
                                            "name": "requestType",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 2744,
                                            "src": "2763:25:7",
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_string_memory_ptr",
                                                "typeString": "string"
                                            },
                                            "typeName": {
                                                "id": 2726,
                                                "name": "string",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "2763:6:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_string_storage_ptr",
                                                    "typeString": "string"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 2739,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "arguments": [
                                                    {
                                                        "argumentTypes": null,
                                                        "id": 2732,
                                                        "name": "typeName",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2684,
                                                        "src": "2815:8:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_string_calldata_ptr",
                                                            "typeString": "string calldata"
                                                        }
                                                    },
                                                    {
                                                        "argumentTypes": null,
                                                        "hexValue": "28",
                                                        "id": 2733,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "string",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "2825:3:7",
                                                        "subdenomination": null,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_stringliteral_484bf06f3118ce360605f902ef526c45207bc469c2b056352f14b8408f9f6f9a",
                                                            "typeString": "literal_string \"(\""
                                                        },
                                                        "value": "("
                                                    },
                                                    {
                                                        "argumentTypes": null,
                                                        "id": 2734,
                                                        "name": "GENERIC_PARAMS",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2492,
                                                        "src": "2830:14:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_string_memory_ptr",
                                                            "typeString": "string memory"
                                                        }
                                                    },
                                                    {
                                                        "argumentTypes": null,
                                                        "hexValue": "2c",
                                                        "id": 2735,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "string",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "2846:3:7",
                                                        "subdenomination": null,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_stringliteral_3e7a35b97029f9e0cf6effd71c1a7958822e9a217d3a3aec886668a7dd8231cb",
                                                            "typeString": "literal_string \",\""
                                                        },
                                                        "value": ","
                                                    },
                                                    {
                                                        "argumentTypes": null,
                                                        "id": 2736,
                                                        "name": "typeSuffix",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2686,
                                                        "src": "2851:10:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_string_calldata_ptr",
                                                            "typeString": "string calldata"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_string_calldata_ptr",
                                                            "typeString": "string calldata"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_stringliteral_484bf06f3118ce360605f902ef526c45207bc469c2b056352f14b8408f9f6f9a",
                                                            "typeString": "literal_string \"(\""
                                                        },
                                                        {
                                                            "typeIdentifier": "t_string_memory_ptr",
                                                            "typeString": "string memory"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_stringliteral_3e7a35b97029f9e0cf6effd71c1a7958822e9a217d3a3aec886668a7dd8231cb",
                                                            "typeString": "literal_string \",\""
                                                        },
                                                        {
                                                            "typeIdentifier": "t_string_calldata_ptr",
                                                            "typeString": "string calldata"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 2730,
                                                        "name": "abi",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": -1,
                                                        "src": "2798:3:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_abi",
                                                            "typeString": "abi"
                                                        }
                                                    },
                                                    "id": 2731,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "memberName": "encodePacked",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": null,
                                                    "src": "2798:16:7",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                                        "typeString": "function () pure returns (bytes memory)"
                                                    }
                                                },
                                                "id": 2737,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "2798:64:7",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "id": 2729,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "nodeType": "ElementaryTypeNameExpression",
                                            "src": "2791:6:7",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                                                "typeString": "type(string storage pointer)"
                                            },
                                            "typeName": {
                                                "id": 2728,
                                                "name": "string",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "2791:6:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": null,
                                                    "typeString": null
                                                }
                                            }
                                        },
                                        "id": 2738,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2791:72:7",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_memory_ptr",
                                            "typeString": "string memory"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "2763:100:7"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 2741,
                                                "name": "requestType",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2727,
                                                "src": "2901:11:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_string_memory_ptr",
                                                    "typeString": "string memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_string_memory_ptr",
                                                    "typeString": "string memory"
                                                }
                                            ],
                                            "id": 2740,
                                            "name": "registerRequestTypeInternal",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2830,
                                            "src": "2873:27:7",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (string memory)"
                                            }
                                        },
                                        "id": 2742,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2873:40:7",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2743,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2873:40:7"
                                }
                            ]
                        },
                        "documentation": null,
                        "functionSelector": "d9210be5",
                        "id": 2745,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "registerRequestType",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 2688,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "2566:8:7"
                        },
                        "parameters": {
                            "id": 2687,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2684,
                                    "mutability": "mutable",
                                    "name": "typeName",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2745,
                                    "src": "2503:24:7",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_calldata_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 2683,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2503:6:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2686,
                                    "mutability": "mutable",
                                    "name": "typeSuffix",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2745,
                                    "src": "2529:26:7",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_calldata_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 2685,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2529:6:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2502:54:7"
                        },
                        "returnParameters": {
                            "id": 2689,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "2575:0:7"
                        },
                        "scope": 2934,
                        "src": "2474:446:7",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            3005
                        ],
                        "body": {
                            "id": 2803,
                            "nodeType": "Block",
                            "src": "3024:502:7",
                            "statements": [
                                {
                                    "assignments": [
                                        2754
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 2754,
                                            "mutability": "mutable",
                                            "name": "chainId",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 2803,
                                            "src": "3034:15:7",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 2753,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "3034:7:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 2755,
                                    "initialValue": null,
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "3034:15:7"
                                },
                                {
                                    "AST": {
                                        "nodeType": "YulBlock",
                                        "src": "3127:24:7",
                                        "statements": [
                                            {
                                                "nodeType": "YulAssignment",
                                                "src": "3129:20:7",
                                                "value": {
                                                    "arguments": [],
                                                    "functionName": {
                                                        "name": "chainid",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "3140:7:7"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "3140:9:7"
                                                },
                                                "variableNames": [
                                                    {
                                                        "name": "chainId",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "3129:7:7"
                                                    }
                                                ]
                                            }
                                        ]
                                    },
                                    "evmVersion": "istanbul",
                                    "externalReferences": [
                                        {
                                            "declaration": 2754,
                                            "isOffset": false,
                                            "isSlot": false,
                                            "src": "3129:7:7",
                                            "valueSize": 1
                                        }
                                    ],
                                    "id": 2756,
                                    "nodeType": "InlineAssembly",
                                    "src": "3118:33:7"
                                },
                                {
                                    "assignments": [
                                        2758
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 2758,
                                            "mutability": "mutable",
                                            "name": "domainValue",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 2803,
                                            "src": "3161:24:7",
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                "typeString": "bytes"
                                            },
                                            "typeName": {
                                                "id": 2757,
                                                "name": "bytes",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "3161:5:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_storage_ptr",
                                                    "typeString": "bytes"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 2785,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "arguments": [
                                                    {
                                                        "argumentTypes": null,
                                                        "arguments": [
                                                            {
                                                                "argumentTypes": null,
                                                                "id": 2764,
                                                                "name": "EIP712_DOMAIN_TYPE",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 2495,
                                                                "src": "3228:18:7",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_string_memory_ptr",
                                                                    "typeString": "string memory"
                                                                }
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_string_memory_ptr",
                                                                    "typeString": "string memory"
                                                                }
                                                            ],
                                                            "id": 2763,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "nodeType": "ElementaryTypeNameExpression",
                                                            "src": "3222:5:7",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                                                "typeString": "type(bytes storage pointer)"
                                                            },
                                                            "typeName": {
                                                                "id": 2762,
                                                                "name": "bytes",
                                                                "nodeType": "ElementaryTypeName",
                                                                "src": "3222:5:7",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": null,
                                                                    "typeString": null
                                                                }
                                                            }
                                                        },
                                                        "id": 2765,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "typeConversion",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "3222:25:7",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_memory_ptr",
                                                            "typeString": "bytes memory"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_bytes_memory_ptr",
                                                            "typeString": "bytes memory"
                                                        }
                                                    ],
                                                    "id": 2761,
                                                    "name": "keccak256",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": -8,
                                                    "src": "3212:9:7",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                                        "typeString": "function (bytes memory) pure returns (bytes32)"
                                                    }
                                                },
                                                "id": 2766,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "3212:36:7",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "arguments": [
                                                    {
                                                        "argumentTypes": null,
                                                        "arguments": [
                                                            {
                                                                "argumentTypes": null,
                                                                "id": 2770,
                                                                "name": "name",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 2747,
                                                                "src": "3278:4:7",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_string_calldata_ptr",
                                                                    "typeString": "string calldata"
                                                                }
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_string_calldata_ptr",
                                                                    "typeString": "string calldata"
                                                                }
                                                            ],
                                                            "id": 2769,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "nodeType": "ElementaryTypeNameExpression",
                                                            "src": "3272:5:7",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                                                "typeString": "type(bytes storage pointer)"
                                                            },
                                                            "typeName": {
                                                                "id": 2768,
                                                                "name": "bytes",
                                                                "nodeType": "ElementaryTypeName",
                                                                "src": "3272:5:7",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": null,
                                                                    "typeString": null
                                                                }
                                                            }
                                                        },
                                                        "id": 2771,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "typeConversion",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "3272:11:7",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_calldata_ptr",
                                                            "typeString": "bytes calldata"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_bytes_calldata_ptr",
                                                            "typeString": "bytes calldata"
                                                        }
                                                    ],
                                                    "id": 2767,
                                                    "name": "keccak256",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": -8,
                                                    "src": "3262:9:7",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                                        "typeString": "function (bytes memory) pure returns (bytes32)"
                                                    }
                                                },
                                                "id": 2772,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "3262:22:7",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "arguments": [
                                                    {
                                                        "argumentTypes": null,
                                                        "arguments": [
                                                            {
                                                                "argumentTypes": null,
                                                                "id": 2776,
                                                                "name": "version",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 2749,
                                                                "src": "3314:7:7",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_string_calldata_ptr",
                                                                    "typeString": "string calldata"
                                                                }
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_string_calldata_ptr",
                                                                    "typeString": "string calldata"
                                                                }
                                                            ],
                                                            "id": 2775,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "nodeType": "ElementaryTypeNameExpression",
                                                            "src": "3308:5:7",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                                                "typeString": "type(bytes storage pointer)"
                                                            },
                                                            "typeName": {
                                                                "id": 2774,
                                                                "name": "bytes",
                                                                "nodeType": "ElementaryTypeName",
                                                                "src": "3308:5:7",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": null,
                                                                    "typeString": null
                                                                }
                                                            }
                                                        },
                                                        "id": 2777,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "typeConversion",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "3308:14:7",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_calldata_ptr",
                                                            "typeString": "bytes calldata"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_bytes_calldata_ptr",
                                                            "typeString": "bytes calldata"
                                                        }
                                                    ],
                                                    "id": 2773,
                                                    "name": "keccak256",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": -8,
                                                    "src": "3298:9:7",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                                        "typeString": "function (bytes memory) pure returns (bytes32)"
                                                    }
                                                },
                                                "id": 2778,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "3298:25:7",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 2779,
                                                "name": "chainId",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2754,
                                                "src": "3337:7:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "arguments": [
                                                    {
                                                        "argumentTypes": null,
                                                        "id": 2782,
                                                        "name": "this",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": -28,
                                                        "src": "3366:4:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_contract$_Forwarder_$2934",
                                                            "typeString": "contract Forwarder"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_contract$_Forwarder_$2934",
                                                            "typeString": "contract Forwarder"
                                                        }
                                                    ],
                                                    "id": 2781,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "ElementaryTypeNameExpression",
                                                    "src": "3358:7:7",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_address_$",
                                                        "typeString": "type(address)"
                                                    },
                                                    "typeName": {
                                                        "id": 2780,
                                                        "name": "address",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "3358:7:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": null,
                                                            "typeString": null
                                                        }
                                                    }
                                                },
                                                "id": 2783,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "typeConversion",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "3358:13:7",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 2759,
                                                "name": "abi",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": -1,
                                                "src": "3188:3:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_magic_abi",
                                                    "typeString": "abi"
                                                }
                                            },
                                            "id": 2760,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "memberName": "encode",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": null,
                                            "src": "3188:10:7",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                                "typeString": "function () pure returns (bytes memory)"
                                            }
                                        },
                                        "id": 2784,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3188:184:7",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "3161:211:7"
                                },
                                {
                                    "assignments": [
                                        2787
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 2787,
                                            "mutability": "mutable",
                                            "name": "domainHash",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 2803,
                                            "src": "3383:18:7",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes32",
                                                "typeString": "bytes32"
                                            },
                                            "typeName": {
                                                "id": 2786,
                                                "name": "bytes32",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "3383:7:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 2791,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 2789,
                                                "name": "domainValue",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2758,
                                                "src": "3414:11:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "id": 2788,
                                            "name": "keccak256",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": -8,
                                            "src": "3404:9:7",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                                "typeString": "function (bytes memory) pure returns (bytes32)"
                                            }
                                        },
                                        "id": 2790,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3404:22:7",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "3383:43:7"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 2796,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "argumentTypes": null,
                                            "baseExpression": {
                                                "argumentTypes": null,
                                                "id": 2792,
                                                "name": "domains",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2503,
                                                "src": "3437:7:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                                                    "typeString": "mapping(bytes32 => bool)"
                                                }
                                            },
                                            "id": 2794,
                                            "indexExpression": {
                                                "argumentTypes": null,
                                                "id": 2793,
                                                "name": "domainHash",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2787,
                                                "src": "3445:10:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "IndexAccess",
                                            "src": "3437:19:7",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "argumentTypes": null,
                                            "hexValue": "74727565",
                                            "id": 2795,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "bool",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "3459:4:7",
                                            "subdenomination": null,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            },
                                            "value": "true"
                                        },
                                        "src": "3437:26:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 2797,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3437:26:7"
                                },
                                {
                                    "eventCall": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 2799,
                                                "name": "domainHash",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2787,
                                                "src": "3495:10:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 2800,
                                                "name": "domainValue",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2758,
                                                "src": "3507:11:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "id": 2798,
                                            "name": "DomainRegistered",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2836,
                                            "src": "3478:16:7",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_bytes_memory_ptr_$returns$__$",
                                                "typeString": "function (bytes32,bytes memory)"
                                            }
                                        },
                                        "id": 2801,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3478:41:7",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2802,
                                    "nodeType": "EmitStatement",
                                    "src": "3473:46:7"
                                }
                            ]
                        },
                        "documentation": null,
                        "functionSelector": "9c7b4592",
                        "id": 2804,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "registerDomainSeparator",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 2751,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "3015:8:7"
                        },
                        "parameters": {
                            "id": 2750,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2747,
                                    "mutability": "mutable",
                                    "name": "name",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2804,
                                    "src": "2959:20:7",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_calldata_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 2746,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2959:6:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2749,
                                    "mutability": "mutable",
                                    "name": "version",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2804,
                                    "src": "2981:23:7",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_calldata_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 2748,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2981:6:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2958:47:7"
                        },
                        "returnParameters": {
                            "id": 2752,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "3024:0:7"
                        },
                        "scope": 2934,
                        "src": "2926:600:7",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "body": {
                            "id": 2829,
                            "nodeType": "Block",
                            "src": "3605:183:7",
                            "statements": [
                                {
                                    "assignments": [
                                        2810
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 2810,
                                            "mutability": "mutable",
                                            "name": "requestTypehash",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 2829,
                                            "src": "3616:23:7",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes32",
                                                "typeString": "bytes32"
                                            },
                                            "typeName": {
                                                "id": 2809,
                                                "name": "bytes32",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "3616:7:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 2817,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "arguments": [
                                                    {
                                                        "argumentTypes": null,
                                                        "id": 2814,
                                                        "name": "requestType",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2806,
                                                        "src": "3658:11:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_string_memory_ptr",
                                                            "typeString": "string memory"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_string_memory_ptr",
                                                            "typeString": "string memory"
                                                        }
                                                    ],
                                                    "id": 2813,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "ElementaryTypeNameExpression",
                                                    "src": "3652:5:7",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                                        "typeString": "type(bytes storage pointer)"
                                                    },
                                                    "typeName": {
                                                        "id": 2812,
                                                        "name": "bytes",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "3652:5:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": null,
                                                            "typeString": null
                                                        }
                                                    }
                                                },
                                                "id": 2815,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "typeConversion",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "3652:18:7",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "id": 2811,
                                            "name": "keccak256",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": -8,
                                            "src": "3642:9:7",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                                "typeString": "function (bytes memory) pure returns (bytes32)"
                                            }
                                        },
                                        "id": 2816,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3642:29:7",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "3616:55:7"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 2822,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "argumentTypes": null,
                                            "baseExpression": {
                                                "argumentTypes": null,
                                                "id": 2818,
                                                "name": "typeHashes",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2499,
                                                "src": "3681:10:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                                                    "typeString": "mapping(bytes32 => bool)"
                                                }
                                            },
                                            "id": 2820,
                                            "indexExpression": {
                                                "argumentTypes": null,
                                                "id": 2819,
                                                "name": "requestTypehash",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2810,
                                                "src": "3692:15:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "IndexAccess",
                                            "src": "3681:27:7",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "argumentTypes": null,
                                            "hexValue": "74727565",
                                            "id": 2821,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "bool",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "3711:4:7",
                                            "subdenomination": null,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            },
                                            "value": "true"
                                        },
                                        "src": "3681:34:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 2823,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3681:34:7"
                                },
                                {
                                    "eventCall": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 2825,
                                                "name": "requestTypehash",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2810,
                                                "src": "3752:15:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 2826,
                                                "name": "requestType",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2806,
                                                "src": "3769:11:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_string_memory_ptr",
                                                    "typeString": "string memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                {
                                                    "typeIdentifier": "t_string_memory_ptr",
                                                    "typeString": "string memory"
                                                }
                                            ],
                                            "id": 2824,
                                            "name": "RequestTypeRegistered",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2842,
                                            "src": "3730:21:7",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bytes32,string memory)"
                                            }
                                        },
                                        "id": 2827,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3730:51:7",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2828,
                                    "nodeType": "EmitStatement",
                                    "src": "3725:56:7"
                                }
                            ]
                        },
                        "documentation": null,
                        "id": 2830,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "registerRequestTypeInternal",
                        "nodeType": "FunctionDefinition",
                        "overrides": null,
                        "parameters": {
                            "id": 2807,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2806,
                                    "mutability": "mutable",
                                    "name": "requestType",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2830,
                                    "src": "3569:25:7",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_memory_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 2805,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3569:6:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3568:27:7"
                        },
                        "returnParameters": {
                            "id": 2808,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "3605:0:7"
                        },
                        "scope": 2934,
                        "src": "3532:256:7",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "anonymous": false,
                        "documentation": null,
                        "id": 2836,
                        "name": "DomainRegistered",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 2835,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2832,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "domainSeparator",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2836,
                                    "src": "3817:31:7",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 2831,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3817:7:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2834,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "domainValue",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2836,
                                    "src": "3850:17:7",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 2833,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3850:5:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3816:52:7"
                        },
                        "src": "3794:75:7"
                    },
                    {
                        "anonymous": false,
                        "documentation": null,
                        "id": 2842,
                        "name": "RequestTypeRegistered",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 2841,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2838,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "typeHash",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2842,
                                    "src": "3903:24:7",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 2837,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3903:7:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2840,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "typeStr",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2842,
                                    "src": "3929:14:7",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_memory_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 2839,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3929:6:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3902:42:7"
                        },
                        "src": "3875:70:7"
                    },
                    {
                        "body": {
                            "id": 2897,
                            "nodeType": "Block",
                            "src": "4159:421:7",
                            "statements": [
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "baseExpression": {
                                                    "argumentTypes": null,
                                                    "id": 2856,
                                                    "name": "domains",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 2503,
                                                    "src": "4177:7:7",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                                                        "typeString": "mapping(bytes32 => bool)"
                                                    }
                                                },
                                                "id": 2858,
                                                "indexExpression": {
                                                    "argumentTypes": null,
                                                    "id": 2857,
                                                    "name": "domainSeparator",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 2846,
                                                    "src": "4185:15:7",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes32",
                                                        "typeString": "bytes32"
                                                    }
                                                },
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "IndexAccess",
                                                "src": "4177:24:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "756e7265676973746572656420646f6d61696e20736570617261746f72",
                                                "id": 2859,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "4203:31:7",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_580d1fcba66bd788b2c8ac4969fc6f192f2944a211583f2b57567880615b1b8b",
                                                    "typeString": "literal_string \"unregistered domain separator\""
                                                },
                                                "value": "unregistered domain separator"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_580d1fcba66bd788b2c8ac4969fc6f192f2944a211583f2b57567880615b1b8b",
                                                    "typeString": "literal_string \"unregistered domain separator\""
                                                }
                                            ],
                                            "id": 2855,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "4169:7:7",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 2860,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4169:66:7",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2861,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4169:66:7"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "baseExpression": {
                                                    "argumentTypes": null,
                                                    "id": 2863,
                                                    "name": "typeHashes",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 2499,
                                                    "src": "4253:10:7",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                                                        "typeString": "mapping(bytes32 => bool)"
                                                    }
                                                },
                                                "id": 2865,
                                                "indexExpression": {
                                                    "argumentTypes": null,
                                                    "id": 2864,
                                                    "name": "requestTypeHash",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 2848,
                                                    "src": "4264:15:7",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes32",
                                                        "typeString": "bytes32"
                                                    }
                                                },
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "IndexAccess",
                                                "src": "4253:27:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "756e726567697374657265642072657175657374207479706568617368",
                                                "id": 2866,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "4282:31:7",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_56dbda2c77ceb41f416ea9332fa84fe1c648499bfe7bbf007d694db0d30a0f19",
                                                    "typeString": "literal_string \"unregistered request typehash\""
                                                },
                                                "value": "unregistered request typehash"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_56dbda2c77ceb41f416ea9332fa84fe1c648499bfe7bbf007d694db0d30a0f19",
                                                    "typeString": "literal_string \"unregistered request typehash\""
                                                }
                                            ],
                                            "id": 2862,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "4245:7:7",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 2867,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4245:69:7",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2868,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4245:69:7"
                                },
                                {
                                    "assignments": [
                                        2870
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 2870,
                                            "mutability": "mutable",
                                            "name": "digest",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 2897,
                                            "src": "4324:14:7",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes32",
                                                "typeString": "bytes32"
                                            },
                                            "typeName": {
                                                "id": 2869,
                                                "name": "bytes32",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "4324:7:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 2885,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "arguments": [
                                                    {
                                                        "argumentTypes": null,
                                                        "hexValue": "1901",
                                                        "id": 2874,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "string",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "4385:10:7",
                                                        "subdenomination": null,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541",
                                                            "typeString": "literal_string \"\u0019\u0001\""
                                                        },
                                                        "value": "\u0019\u0001"
                                                    },
                                                    {
                                                        "argumentTypes": null,
                                                        "id": 2875,
                                                        "name": "domainSeparator",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2846,
                                                        "src": "4397:15:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes32",
                                                            "typeString": "bytes32"
                                                        }
                                                    },
                                                    {
                                                        "argumentTypes": null,
                                                        "arguments": [
                                                            {
                                                                "argumentTypes": null,
                                                                "arguments": [
                                                                    {
                                                                        "argumentTypes": null,
                                                                        "id": 2878,
                                                                        "name": "req",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 2844,
                                                                        "src": "4452:3:7",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                                                            "typeString": "struct IForwarder.ForwardRequest memory"
                                                                        }
                                                                    },
                                                                    {
                                                                        "argumentTypes": null,
                                                                        "id": 2879,
                                                                        "name": "requestTypeHash",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 2848,
                                                                        "src": "4457:15:7",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_bytes32",
                                                                            "typeString": "bytes32"
                                                                        }
                                                                    },
                                                                    {
                                                                        "argumentTypes": null,
                                                                        "id": 2880,
                                                                        "name": "suffixData",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 2850,
                                                                        "src": "4474:10:7",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_bytes_memory_ptr",
                                                                            "typeString": "bytes memory"
                                                                        }
                                                                    }
                                                                ],
                                                                "expression": {
                                                                    "argumentTypes": [
                                                                        {
                                                                            "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                                                            "typeString": "struct IForwarder.ForwardRequest memory"
                                                                        },
                                                                        {
                                                                            "typeIdentifier": "t_bytes32",
                                                                            "typeString": "bytes32"
                                                                        },
                                                                        {
                                                                            "typeIdentifier": "t_bytes_memory_ptr",
                                                                            "typeString": "bytes memory"
                                                                        }
                                                                    ],
                                                                    "id": 2877,
                                                                    "name": "_getEncoded",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 2933,
                                                                    "src": "4440:11:7",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_function_internal_pure$_t_struct$_ForwardRequest_$2950_memory_ptr_$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                                                                        "typeString": "function (struct IForwarder.ForwardRequest memory,bytes32,bytes memory) pure returns (bytes memory)"
                                                                    }
                                                                },
                                                                "id": 2881,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "kind": "functionCall",
                                                                "lValueRequested": false,
                                                                "names": [],
                                                                "nodeType": "FunctionCall",
                                                                "src": "4440:45:7",
                                                                "tryCall": false,
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                                    "typeString": "bytes memory"
                                                                }
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                                    "typeString": "bytes memory"
                                                                }
                                                            ],
                                                            "id": 2876,
                                                            "name": "keccak256",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": -8,
                                                            "src": "4430:9:7",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                                                "typeString": "function (bytes memory) pure returns (bytes32)"
                                                            }
                                                        },
                                                        "id": 2882,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "functionCall",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "4430:56:7",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes32",
                                                            "typeString": "bytes32"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541",
                                                            "typeString": "literal_string \"\u0019\u0001\""
                                                        },
                                                        {
                                                            "typeIdentifier": "t_bytes32",
                                                            "typeString": "bytes32"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_bytes32",
                                                            "typeString": "bytes32"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 2872,
                                                        "name": "abi",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": -1,
                                                        "src": "4351:3:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_abi",
                                                            "typeString": "abi"
                                                        }
                                                    },
                                                    "id": 2873,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "memberName": "encodePacked",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": null,
                                                    "src": "4351:16:7",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                                        "typeString": "function () pure returns (bytes memory)"
                                                    }
                                                },
                                                "id": 2883,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "4351:149:7",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "id": 2871,
                                            "name": "keccak256",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": -8,
                                            "src": "4341:9:7",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                                "typeString": "function (bytes memory) pure returns (bytes32)"
                                            }
                                        },
                                        "id": 2884,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4341:160:7",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "4324:177:7"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                "id": 2893,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "arguments": [
                                                        {
                                                            "argumentTypes": null,
                                                            "id": 2889,
                                                            "name": "sig",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 2852,
                                                            "src": "4534:3:7",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 2887,
                                                            "name": "digest",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 2870,
                                                            "src": "4519:6:7",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes32",
                                                                "typeString": "bytes32"
                                                            }
                                                        },
                                                        "id": 2888,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "recover",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 6547,
                                                        "src": "4519:14:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$bound_to$_t_bytes32_$",
                                                            "typeString": "function (bytes32,bytes memory) pure returns (address)"
                                                        }
                                                    },
                                                    "id": 2890,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "4519:19:7",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "==",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 2891,
                                                        "name": "req",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2844,
                                                        "src": "4542:3:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                                            "typeString": "struct IForwarder.ForwardRequest memory"
                                                        }
                                                    },
                                                    "id": 2892,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "from",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 2939,
                                                    "src": "4542:8:7",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "src": "4519:31:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "7369676e6174757265206d69736d61746368",
                                                "id": 2894,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "4552:20:7",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_f3d26a3c6a3f6d4086217afc5e73c8eb7caeb9c89076cb74d15918edc5b67386",
                                                    "typeString": "literal_string \"signature mismatch\""
                                                },
                                                "value": "signature mismatch"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_f3d26a3c6a3f6d4086217afc5e73c8eb7caeb9c89076cb74d15918edc5b67386",
                                                    "typeString": "literal_string \"signature mismatch\""
                                                }
                                            ],
                                            "id": 2886,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "4511:7:7",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 2895,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4511:62:7",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2896,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4511:62:7"
                                }
                            ]
                        },
                        "documentation": null,
                        "id": 2898,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "_verifySig",
                        "nodeType": "FunctionDefinition",
                        "overrides": null,
                        "parameters": {
                            "id": 2853,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2844,
                                    "mutability": "mutable",
                                    "name": "req",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2898,
                                    "src": "3981:25:7",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                        "typeString": "struct IForwarder.ForwardRequest"
                                    },
                                    "typeName": {
                                        "contractScope": null,
                                        "id": 2843,
                                        "name": "ForwardRequest",
                                        "nodeType": "UserDefinedTypeName",
                                        "referencedDeclaration": 2950,
                                        "src": "3981:14:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_ForwardRequest_$2950_storage_ptr",
                                            "typeString": "struct IForwarder.ForwardRequest"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2846,
                                    "mutability": "mutable",
                                    "name": "domainSeparator",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2898,
                                    "src": "4016:23:7",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 2845,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4016:7:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2848,
                                    "mutability": "mutable",
                                    "name": "requestTypeHash",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2898,
                                    "src": "4049:23:7",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 2847,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4049:7:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2850,
                                    "mutability": "mutable",
                                    "name": "suffixData",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2898,
                                    "src": "4082:23:7",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 2849,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4082:5:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2852,
                                    "mutability": "mutable",
                                    "name": "sig",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2898,
                                    "src": "4115:16:7",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 2851,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4115:5:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3971:161:7"
                        },
                        "returnParameters": {
                            "id": 2854,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "4159:0:7"
                        },
                        "scope": 2934,
                        "src": "3952:628:7",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 2932,
                            "nodeType": "Block",
                            "src": "4775:307:7",
                            "statements": [
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 2911,
                                                "name": "requestTypeHash",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2902,
                                                "src": "4822:15:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "arguments": [
                                                    {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 2914,
                                                            "name": "req",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 2900,
                                                            "src": "4879:3:7",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                                                "typeString": "struct IForwarder.ForwardRequest memory"
                                                            }
                                                        },
                                                        "id": 2915,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "from",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 2939,
                                                        "src": "4879:8:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 2916,
                                                            "name": "req",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 2900,
                                                            "src": "4905:3:7",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                                                "typeString": "struct IForwarder.ForwardRequest memory"
                                                            }
                                                        },
                                                        "id": 2917,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "to",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 2941,
                                                        "src": "4905:6:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 2918,
                                                            "name": "req",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 2900,
                                                            "src": "4929:3:7",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                                                "typeString": "struct IForwarder.ForwardRequest memory"
                                                            }
                                                        },
                                                        "id": 2919,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "value",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 2943,
                                                        "src": "4929:9:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 2920,
                                                            "name": "req",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 2900,
                                                            "src": "4956:3:7",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                                                "typeString": "struct IForwarder.ForwardRequest memory"
                                                            }
                                                        },
                                                        "id": 2921,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "gas",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 2945,
                                                        "src": "4956:7:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 2922,
                                                            "name": "req",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 2900,
                                                            "src": "4981:3:7",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                                                "typeString": "struct IForwarder.ForwardRequest memory"
                                                            }
                                                        },
                                                        "id": 2923,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "nonce",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 2947,
                                                        "src": "4981:9:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    {
                                                        "argumentTypes": null,
                                                        "arguments": [
                                                            {
                                                                "argumentTypes": null,
                                                                "expression": {
                                                                    "argumentTypes": null,
                                                                    "id": 2925,
                                                                    "name": "req",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 2900,
                                                                    "src": "5018:3:7",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                                                        "typeString": "struct IForwarder.ForwardRequest memory"
                                                                    }
                                                                },
                                                                "id": 2926,
                                                                "isConstant": false,
                                                                "isLValue": true,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "data",
                                                                "nodeType": "MemberAccess",
                                                                "referencedDeclaration": 2949,
                                                                "src": "5018:8:7",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                                    "typeString": "bytes memory"
                                                                }
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                                    "typeString": "bytes memory"
                                                                }
                                                            ],
                                                            "id": 2924,
                                                            "name": "keccak256",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": -8,
                                                            "src": "5008:9:7",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                                                "typeString": "function (bytes memory) pure returns (bytes32)"
                                                            }
                                                        },
                                                        "id": 2927,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "functionCall",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "5008:19:7",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes32",
                                                            "typeString": "bytes32"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_bytes32",
                                                            "typeString": "bytes32"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 2912,
                                                        "name": "abi",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": -1,
                                                        "src": "4851:3:7",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_abi",
                                                            "typeString": "abi"
                                                        }
                                                    },
                                                    "id": 2913,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "memberName": "encode",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": null,
                                                    "src": "4851:10:7",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                                        "typeString": "function () pure returns (bytes memory)"
                                                    }
                                                },
                                                "id": 2928,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "4851:190:7",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 2929,
                                                "name": "suffixData",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2904,
                                                "src": "5055:10:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 2909,
                                                "name": "abi",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": -1,
                                                "src": "4792:3:7",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_magic_abi",
                                                    "typeString": "abi"
                                                }
                                            },
                                            "id": 2910,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "memberName": "encodePacked",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": null,
                                            "src": "4792:16:7",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                                "typeString": "function () pure returns (bytes memory)"
                                            }
                                        },
                                        "id": 2930,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4792:283:7",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                        }
                                    },
                                    "functionReturnParameters": 2908,
                                    "id": 2931,
                                    "nodeType": "Return",
                                    "src": "4785:290:7"
                                }
                            ]
                        },
                        "documentation": null,
                        "functionSelector": "c45c2674",
                        "id": 2933,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "_getEncoded",
                        "nodeType": "FunctionDefinition",
                        "overrides": null,
                        "parameters": {
                            "id": 2905,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2900,
                                    "mutability": "mutable",
                                    "name": "req",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2933,
                                    "src": "4616:25:7",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_ForwardRequest_$2950_memory_ptr",
                                        "typeString": "struct IForwarder.ForwardRequest"
                                    },
                                    "typeName": {
                                        "contractScope": null,
                                        "id": 2899,
                                        "name": "ForwardRequest",
                                        "nodeType": "UserDefinedTypeName",
                                        "referencedDeclaration": 2950,
                                        "src": "4616:14:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_ForwardRequest_$2950_storage_ptr",
                                            "typeString": "struct IForwarder.ForwardRequest"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2902,
                                    "mutability": "mutable",
                                    "name": "requestTypeHash",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2933,
                                    "src": "4651:23:7",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 2901,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4651:7:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2904,
                                    "mutability": "mutable",
                                    "name": "suffixData",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2933,
                                    "src": "4684:23:7",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 2903,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4684:5:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4606:107:7"
                        },
                        "returnParameters": {
                            "id": 2908,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2907,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2933,
                                    "src": "4756:12:7",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 2906,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4756:5:7",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4746:28:7"
                        },
                        "scope": 2934,
                        "src": "4586:496:7",
                        "stateMutability": "pure",
                        "virtual": false,
                        "visibility": "public"
                    }
                ],
                "scope": 2935,
                "src": "175:4909:7"
            }
        ],
        "src": "31:5054:7"
    },
    "compiler": {
        "name": "solc",
        "version": "0.6.10+commit.00c0fcaf.Emscripten.clang"
    },
    "networks": {},
    "schemaVersion": "3.1.0",
    "updatedAt": "2020-12-21T17:30:10.466Z",
    "devdoc": {
        "methods": {}
    },
    "userdoc": {
        "methods": {}
    }
}
