{
    "contractName": "TestWrappedNativeToken",
    "abi": [
        {
            "inputs": [],
            "stateMutability": "nonpayable",
            "type": "constructor"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "owner",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "spender",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "value",
                    "type": "uint256"
                }
            ],
            "name": "Approval",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "from",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "to",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "value",
                    "type": "uint256"
                }
            ],
            "name": "Transfer",
            "type": "event"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "owner",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "spender",
                    "type": "address"
                }
            ],
            "name": "allowance",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "spender",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "approve",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "balanceOf",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "decimals",
            "outputs": [
                {
                    "internalType": "uint8",
                    "name": "",
                    "type": "uint8"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "spender",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "subtractedValue",
                    "type": "uint256"
                }
            ],
            "name": "decreaseAllowance",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "spender",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "addedValue",
                    "type": "uint256"
                }
            ],
            "name": "increaseAllowance",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "name",
            "outputs": [
                {
                    "internalType": "string",
                    "name": "",
                    "type": "string"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "symbol",
            "outputs": [
                {
                    "internalType": "string",
                    "name": "",
                    "type": "string"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "totalSupply",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "to",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "transfer",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "from",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "to",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "transferFrom",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "stateMutability": "payable",
            "type": "receive"
        },
        {
            "inputs": [],
            "name": "deposit",
            "outputs": [],
            "stateMutability": "payable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "withdraw",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        }
    ],
    "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless this function is overridden; NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`.\"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `amount`. - the caller must have allowance for ``from``'s tokens of at least `amount`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"minimal \\\"wrapped eth\\\" implementation.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"/Users/alexf/gsn2/packages/contracts/solpp/test/TestWrappedNativeToken.sol\":\"TestWrappedNativeToken\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/alexf/gsn2/packages/contracts/solpp/interfaces/IERC20Token.sol\":{\"keccak256\":\"0xe949e04eabf3596f6e5943f4dda66c32fdef7704253ea15394429a07fc4dfb61\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://71b8088074939d577e54c9bb4a9865ca031047d4c77ee850894737ce29f21d66\",\"dweb:/ipfs/QmPhEMU4aSry9trAVb4H4bZTanySEifc8LzNzaR22G3nE6\"]},\"/Users/alexf/gsn2/packages/contracts/solpp/test/TestWrappedNativeToken.sol\":{\"keccak256\":\"0xce91a4366755b1c2d9c383009db75b45db3e4d59276543773260b6b095fa5cb8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3abc49ca154e3b6a9f051caa9a2448229831129bb571b6355ad30247339b0cb1\",\"dweb:/ipfs/QmUEg4rHzc7cauwiTgogw2gL2k5rvYGoDLtamqd8dDSxFJ\"]},\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x24b04b8aacaaf1a4a0719117b29c9c3647b1f479c5ac2a60f5ff1bb6d839c238\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://43e46da9d9f49741ecd876a269e71bc7494058d7a8e9478429998adb5bc3eaa0\",\"dweb:/ipfs/QmUtp4cqzf22C5rJ76AabKADquGWcjsc33yjYXxXC4sDvy\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a376d3dda2cb70536c0a45c208b29b34ac560c4cb4f513a42079f96ba47d2dd\",\"dweb:/ipfs/QmZQg6gn1sUpM8wHzwNvSnihumUCAhxD119MpXeKp8B9s8\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]}},\"version\":1}",
    "bytecode": "0x60806040523480156200001157600080fd5b50604080518082018252601481527f57726170706564204e617469766520546f6b656e000000000000000000000000602080830191825283518085019094526005845264776e546f6b60d81b908401528151919291620000749160039162000093565b5080516200008a90600490602084019062000093565b50505062000176565b828054620000a19062000139565b90600052602060002090601f016020900481019282620000c5576000855562000110565b82601f10620000e057805160ff191683800117855562000110565b8280016001018555821562000110579182015b8281111562000110578251825591602001919060010190620000f3565b506200011e92915062000122565b5090565b5b808211156200011e576000815560010162000123565b600181811c908216806200014e57607f821691505b602082108114156200017057634e487b7160e01b600052602260045260246000fd5b50919050565b610c6c80620001866000396000f3fe6080604052600436106100c65760003560e01c8063395093511161007f578063a457c2d711610059578063a457c2d71461021b578063a9059cbb1461023b578063d0e30db01461025b578063dd62ed3e1461026357600080fd5b806339509351146101b057806370a08231146101d057806395d89b411461020657600080fd5b806306fdde03146100da578063095ea7b31461010557806318160ddd1461013557806323b872dd146101545780632e1a7d4d14610174578063313ce5671461019457600080fd5b366100d5576100d3610283565b005b600080fd5b3480156100e657600080fd5b506100ef61028f565b6040516100fc9190610b61565b60405180910390f35b34801561011157600080fd5b50610125610120366004610b1e565b610321565b60405190151581526020016100fc565b34801561014157600080fd5b506002545b6040519081526020016100fc565b34801561016057600080fd5b5061012561016f366004610ae2565b610339565b34801561018057600080fd5b506100d361018f366004610b48565b61035d565b3480156101a057600080fd5b50604051601281526020016100fc565b3480156101bc57600080fd5b506101256101cb366004610b1e565b6103fa565b3480156101dc57600080fd5b506101466101eb366004610a8d565b6001600160a01b031660009081526020819052604090205490565b34801561021257600080fd5b506100ef61041c565b34801561022757600080fd5b50610125610236366004610b1e565b61042b565b34801561024757600080fd5b50610125610256366004610b1e565b6104a6565b6100d3610283565b34801561026f57600080fd5b5061014661027e366004610aaf565b6104b4565b61028d33346104df565b565b60606003805461029e90610be5565b80601f01602080910402602001604051908101604052809291908181526020018280546102ca90610be5565b80156103175780601f106102ec57610100808354040283529160200191610317565b820191906000526020600020905b8154815290600101906020018083116102fa57829003601f168201915b5050505050905090565b60003361032f8185856105be565b5060019392505050565b6000336103478582856106e3565b61035285858561075d565b506001949350505050565b610367338261092b565b604051600090339083908381818185875af1925050503d80600081146103a9576040519150601f19603f3d011682016040523d82523d6000602084013e6103ae565b606091505b50509050806103f65760405162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b60448201526064015b60405180910390fd5b5050565b60003361032f81858561040d83836104b4565b6104179190610bb6565b6105be565b60606004805461029e90610be5565b6000338161043982866104b4565b9050838110156104995760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016103ed565b61035282868684036105be565b60003361032f81858561075d565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0382166105355760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016103ed565b80600260008282546105479190610bb6565b90915550506001600160a01b03821660009081526020819052604081208054839290610574908490610bb6565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b0383166106205760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016103ed565b6001600160a01b0382166106815760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016103ed565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006106ef84846104b4565b90506000198114610757578181101561074a5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016103ed565b61075784848484036105be565b50505050565b6001600160a01b0383166107c15760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016103ed565b6001600160a01b0382166108235760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016103ed565b6001600160a01b0383166000908152602081905260409020548181101561089b5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016103ed565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906108d2908490610bb6565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161091e91815260200190565b60405180910390a3610757565b6001600160a01b03821661098b5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016103ed565b6001600160a01b038216600090815260208190526040902054818110156109ff5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016103ed565b6001600160a01b0383166000908152602081905260408120838303905560028054849290610a2e908490610bce565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016106d6565b80356001600160a01b0381168114610a8857600080fd5b919050565b600060208284031215610a9f57600080fd5b610aa882610a71565b9392505050565b60008060408385031215610ac257600080fd5b610acb83610a71565b9150610ad960208401610a71565b90509250929050565b600080600060608486031215610af757600080fd5b610b0084610a71565b9250610b0e60208501610a71565b9150604084013590509250925092565b60008060408385031215610b3157600080fd5b610b3a83610a71565b946020939093013593505050565b600060208284031215610b5a57600080fd5b5035919050565b600060208083528351808285015260005b81811015610b8e57858101830151858201604001528201610b72565b81811115610ba0576000604083870101525b50601f01601f1916929092016040019392505050565b60008219821115610bc957610bc9610c20565b500190565b600082821015610be057610be0610c20565b500390565b600181811c90821680610bf957607f821691505b60208210811415610c1a57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fdfea26469706673582212201dd48a8844cab588703d2b338cf2fd90812b8d528b5d1b47952e32993ad7865c64736f6c63430008070033",
    "deployedBytecode": "0x6080604052600436106100c65760003560e01c8063395093511161007f578063a457c2d711610059578063a457c2d71461021b578063a9059cbb1461023b578063d0e30db01461025b578063dd62ed3e1461026357600080fd5b806339509351146101b057806370a08231146101d057806395d89b411461020657600080fd5b806306fdde03146100da578063095ea7b31461010557806318160ddd1461013557806323b872dd146101545780632e1a7d4d14610174578063313ce5671461019457600080fd5b366100d5576100d3610283565b005b600080fd5b3480156100e657600080fd5b506100ef61028f565b6040516100fc9190610b61565b60405180910390f35b34801561011157600080fd5b50610125610120366004610b1e565b610321565b60405190151581526020016100fc565b34801561014157600080fd5b506002545b6040519081526020016100fc565b34801561016057600080fd5b5061012561016f366004610ae2565b610339565b34801561018057600080fd5b506100d361018f366004610b48565b61035d565b3480156101a057600080fd5b50604051601281526020016100fc565b3480156101bc57600080fd5b506101256101cb366004610b1e565b6103fa565b3480156101dc57600080fd5b506101466101eb366004610a8d565b6001600160a01b031660009081526020819052604090205490565b34801561021257600080fd5b506100ef61041c565b34801561022757600080fd5b50610125610236366004610b1e565b61042b565b34801561024757600080fd5b50610125610256366004610b1e565b6104a6565b6100d3610283565b34801561026f57600080fd5b5061014661027e366004610aaf565b6104b4565b61028d33346104df565b565b60606003805461029e90610be5565b80601f01602080910402602001604051908101604052809291908181526020018280546102ca90610be5565b80156103175780601f106102ec57610100808354040283529160200191610317565b820191906000526020600020905b8154815290600101906020018083116102fa57829003601f168201915b5050505050905090565b60003361032f8185856105be565b5060019392505050565b6000336103478582856106e3565b61035285858561075d565b506001949350505050565b610367338261092b565b604051600090339083908381818185875af1925050503d80600081146103a9576040519150601f19603f3d011682016040523d82523d6000602084013e6103ae565b606091505b50509050806103f65760405162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b60448201526064015b60405180910390fd5b5050565b60003361032f81858561040d83836104b4565b6104179190610bb6565b6105be565b60606004805461029e90610be5565b6000338161043982866104b4565b9050838110156104995760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016103ed565b61035282868684036105be565b60003361032f81858561075d565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0382166105355760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016103ed565b80600260008282546105479190610bb6565b90915550506001600160a01b03821660009081526020819052604081208054839290610574908490610bb6565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b0383166106205760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016103ed565b6001600160a01b0382166106815760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016103ed565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006106ef84846104b4565b90506000198114610757578181101561074a5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016103ed565b61075784848484036105be565b50505050565b6001600160a01b0383166107c15760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016103ed565b6001600160a01b0382166108235760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016103ed565b6001600160a01b0383166000908152602081905260409020548181101561089b5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016103ed565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906108d2908490610bb6565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161091e91815260200190565b60405180910390a3610757565b6001600160a01b03821661098b5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016103ed565b6001600160a01b038216600090815260208190526040902054818110156109ff5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016103ed565b6001600160a01b0383166000908152602081905260408120838303905560028054849290610a2e908490610bce565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016106d6565b80356001600160a01b0381168114610a8857600080fd5b919050565b600060208284031215610a9f57600080fd5b610aa882610a71565b9392505050565b60008060408385031215610ac257600080fd5b610acb83610a71565b9150610ad960208401610a71565b90509250929050565b600080600060608486031215610af757600080fd5b610b0084610a71565b9250610b0e60208501610a71565b9150604084013590509250925092565b60008060408385031215610b3157600080fd5b610b3a83610a71565b946020939093013593505050565b600060208284031215610b5a57600080fd5b5035919050565b600060208083528351808285015260005b81811015610b8e57858101830151858201604001528201610b72565b81811115610ba0576000604083870101525b50601f01601f1916929092016040019392505050565b60008219821115610bc957610bc9610c20565b500190565b600082821015610be057610be0610c20565b500390565b600181811c90821680610bf957607f821691505b60208210811415610c1a57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fdfea26469706673582212201dd48a8844cab588703d2b338cf2fd90812b8d528b5d1b47952e32993ad7865c64736f6c63430008070033",
    "immutableReferences": {},
    "sourceMap": "211:585:37:-:0;;;321:60;;;;;;;;;-1:-1:-1;1978:113:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1978:113:49;;;;2044:13;;1978:113;;;2044:13;;:5;;:13;:::i;:::-;-1:-1:-1;2067:17:49;;;;:7;;:17;;;;;:::i;:::-;;1978:113;;211:585:37;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;211:585:37;;;-1:-1:-1;211:585:37;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:380:63;93:1;89:12;;;;136;;;157:61;;211:4;203:6;199:17;189:27;;157:61;264:2;256:6;253:14;233:18;230:38;227:161;;;310:10;305:3;301:20;298:1;291:31;345:4;342:1;335:15;373:4;370:1;363:15;227:161;;14:380;;;:::o;:::-;211:585:37;;;;;;",
    "deployedSourceMap": "211:585:37:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;424:9;:7;:9::i;:::-;211:585;;;;;2156:98:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4433:197;;;;;;;;;;-1:-1:-1;4433:197:49;;;;;:::i;:::-;;:::i;:::-;;;1800:14:63;;1793:22;1775:41;;1763:2;1748:18;4433:197:49;1635:187:63;3244:106:49;;;;;;;;;;-1:-1:-1;3331:12:49;;3244:106;;;6873:25:63;;;6861:2;6846:18;3244:106:49;6727:177:63;5192:286:49;;;;;;;;;;-1:-1:-1;5192:286:49;;;;;:::i;:::-;;:::i;540:254:37:-;;;;;;;;;;-1:-1:-1;540:254:37;;;;;:::i;:::-;;:::i;3093:91:49:-;;;;;;;;;;-1:-1:-1;3093:91:49;;3175:2;7051:36:63;;7039:2;7024:18;3093:91:49;6909:184:63;5873:234:49;;;;;;;;;;-1:-1:-1;5873:234:49;;;;;:::i;:::-;;:::i;3408:125::-;;;;;;;;;;-1:-1:-1;3408:125:49;;;;;:::i;:::-;-1:-1:-1;;;;;3508:18:49;3482:7;3508:18;;;;;;;;;;;;3408:125;2367:102;;;;;;;;;;;;;:::i;6594:427::-;;;;;;;;;;-1:-1:-1;6594:427:49;;;;;:::i;:::-;;:::i;3729:189::-;;;;;;;;;;-1:-1:-1;3729:189:49;;;;;:::i;:::-;;:::i;446:88:37:-;;;:::i;3976:149:49:-;;;;;;;;;;-1:-1:-1;3976:149:49;;;;;:::i;:::-;;:::i;446:88:37:-;499:28;505:10;517:9;499:5;:28::i;:::-;446:88::o;2156:98:49:-;2210:13;2242:5;2235:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2156:98;:::o;4433:197::-;4516:4;719:10:55;4570:32:49;719:10:55;4586:7:49;4595:6;4570:8;:32::i;:::-;-1:-1:-1;4619:4:49;;4433:197;-1:-1:-1;;;4433:197:49:o;5192:286::-;5319:4;719:10:55;5375:38:49;5391:4;719:10:55;5406:6:49;5375:15;:38::i;:::-;5423:27;5433:4;5439:2;5443:6;5423:9;:27::i;:::-;-1:-1:-1;5467:4:49;;5192:286;-1:-1:-1;;;;5192:286:49:o;540:254:37:-;597:25;603:10;615:6;597:5;:25::i;:::-;709:33;;692:12;;709:10;;731:6;;692:12;709:33;692:12;709:33;731:6;709:10;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;691:51;;;760:7;752:35;;;;-1:-1:-1;;;752:35:37;;5819:2:63;752:35:37;;;5801:21:63;5858:2;5838:18;;;5831:30;-1:-1:-1;;;5877:18:63;;;5870:45;5932:18;;752:35:37;;;;;;;;;587:207;540:254;:::o;5873:234:49:-;5961:4;719:10:55;6015:64:49;719:10:55;6031:7:49;6068:10;6040:25;719:10:55;6031:7:49;6040:9;:25::i;:::-;:38;;;;:::i;:::-;6015:8;:64::i;2367:102::-;2423:13;2455:7;2448:14;;;;;:::i;6594:427::-;6687:4;719:10:55;6687:4:49;6768:25;719:10:55;6785:7:49;6768:9;:25::i;:::-;6741:52;;6831:15;6811:16;:35;;6803:85;;;;-1:-1:-1;;;6803:85:49;;6163:2:63;6803:85:49;;;6145:21:63;6202:2;6182:18;;;6175:30;6241:34;6221:18;;;6214:62;-1:-1:-1;;;6292:18:63;;;6285:35;6337:19;;6803:85:49;5961:401:63;6803:85:49;6922:60;6931:5;6938:7;6966:15;6947:16;:34;6922:8;:60::i;3729:189::-;3808:4;719:10:55;3862:28:49;719:10:55;3879:2:49;3883:6;3862:9;:28::i;3976:149::-;-1:-1:-1;;;;;4091:18:49;;;4065:7;4091:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3976:149::o;8402:389::-;-1:-1:-1;;;;;8485:21:49;;8477:65;;;;-1:-1:-1;;;8477:65:49;;6569:2:63;8477:65:49;;;6551:21:63;6608:2;6588:18;;;6581:30;6647:33;6627:18;;;6620:61;6698:18;;8477:65:49;6367:355:63;8477:65:49;8629:6;8613:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;8645:18:49;;:9;:18;;;;;;;;;;:28;;8667:6;;8645:9;:28;;8667:6;;8645:28;:::i;:::-;;;;-1:-1:-1;;8688:37:49;;6873:25:63;;;-1:-1:-1;;;;;8688:37:49;;;8705:1;;8688:37;;6861:2:63;6846:18;8688:37:49;;;;;;;587:207:37;540:254;:::o;10110:370:49:-;-1:-1:-1;;;;;10241:19:49;;10233:68;;;;-1:-1:-1;;;10233:68:49;;5414:2:63;10233:68:49;;;5396:21:63;5453:2;5433:18;;;5426:30;5492:34;5472:18;;;5465:62;-1:-1:-1;;;5543:18:63;;;5536:34;5587:19;;10233:68:49;5212:400:63;10233:68:49;-1:-1:-1;;;;;10319:21:49;;10311:68;;;;-1:-1:-1;;;10311:68:49;;3438:2:63;10311:68:49;;;3420:21:63;3477:2;3457:18;;;3450:30;3516:34;3496:18;;;3489:62;-1:-1:-1;;;3567:18:63;;;3560:32;3609:19;;10311:68:49;3236:398:63;10311:68:49;-1:-1:-1;;;;;10390:18:49;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;10441:32;;6873:25:63;;;10441:32:49;;6846:18:63;10441:32:49;;;;;;;;10110:370;;;:::o;10761:441::-;10891:24;10918:25;10928:5;10935:7;10918:9;:25::i;:::-;10891:52;;-1:-1:-1;;10957:16:49;:37;10953:243;;11038:6;11018:16;:26;;11010:68;;;;-1:-1:-1;;;11010:68:49;;3841:2:63;11010:68:49;;;3823:21:63;3880:2;3860:18;;;3853:30;3919:31;3899:18;;;3892:59;3968:18;;11010:68:49;3639:353:63;11010:68:49;11120:51;11129:5;11136:7;11164:6;11145:16;:25;11120:8;:51::i;:::-;10881:321;10761:441;;;:::o;7475:651::-;-1:-1:-1;;;;;7601:18:49;;7593:68;;;;-1:-1:-1;;;7593:68:49;;5008:2:63;7593:68:49;;;4990:21:63;5047:2;5027:18;;;5020:30;5086:34;5066:18;;;5059:62;-1:-1:-1;;;5137:18:63;;;5130:35;5182:19;;7593:68:49;4806:401:63;7593:68:49;-1:-1:-1;;;;;7679:16:49;;7671:64;;;;-1:-1:-1;;;7671:64:49;;2631:2:63;7671:64:49;;;2613:21:63;2670:2;2650:18;;;2643:30;2709:34;2689:18;;;2682:62;-1:-1:-1;;;2760:18:63;;;2753:33;2803:19;;7671:64:49;2429:399:63;7671:64:49;-1:-1:-1;;;;;7817:15:49;;7795:19;7817:15;;;;;;;;;;;7850:21;;;;7842:72;;;;-1:-1:-1;;;7842:72:49;;4199:2:63;7842:72:49;;;4181:21:63;4238:2;4218:18;;;4211:30;4277:34;4257:18;;;4250:62;-1:-1:-1;;;4328:18:63;;;4321:36;4374:19;;7842:72:49;3997:402:63;7842:72:49;-1:-1:-1;;;;;7948:15:49;;;:9;:15;;;;;;;;;;;7966:20;;;7948:38;;8006:13;;;;;;;;:23;;7980:6;;7948:9;8006:23;;7980:6;;8006:23;:::i;:::-;;;;;;;;8060:2;-1:-1:-1;;;;;8045:26:49;8054:4;-1:-1:-1;;;;;8045:26:49;;8064:6;8045:26;;;;6873:25:63;;6861:2;6846:18;;6727:177;8045:26:49;;;;;;;;8082:37;9111:576;;-1:-1:-1;;;;;9194:21:49;;9186:67;;;;-1:-1:-1;;;9186:67:49;;4606:2:63;9186:67:49;;;4588:21:63;4645:2;4625:18;;;4618:30;4684:34;4664:18;;;4657:62;-1:-1:-1;;;4735:18:63;;;4728:31;4776:19;;9186:67:49;4404:397:63;9186:67:49;-1:-1:-1;;;;;9349:18:49;;9324:22;9349:18;;;;;;;;;;;9385:24;;;;9377:71;;;;-1:-1:-1;;;9377:71:49;;3035:2:63;9377:71:49;;;3017:21:63;3074:2;3054:18;;;3047:30;3113:34;3093:18;;;3086:62;-1:-1:-1;;;3164:18:63;;;3157:32;3206:19;;9377:71:49;2833:398:63;9377:71:49;-1:-1:-1;;;;;9482:18:49;;:9;:18;;;;;;;;;;9503:23;;;9482:44;;9546:12;:22;;9520:6;;9482:9;9546:22;;9520:6;;9546:22;:::i;:::-;;;;-1:-1:-1;;9584:37:49;;6873:25:63;;;9610:1:49;;-1:-1:-1;;;;;9584:37:49;;;;;6861:2:63;6846:18;9584:37:49;6727:177:63;14:173;82:20;;-1:-1:-1;;;;;131:31:63;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;:::-;333:39;192:186;-1:-1:-1;;;192:186:63:o;383:260::-;451:6;459;512:2;500:9;491:7;487:23;483:32;480:52;;;528:1;525;518:12;480:52;551:29;570:9;551:29;:::i;:::-;541:39;;599:38;633:2;622:9;618:18;599:38;:::i;:::-;589:48;;383:260;;;;;:::o;648:328::-;725:6;733;741;794:2;782:9;773:7;769:23;765:32;762:52;;;810:1;807;800:12;762:52;833:29;852:9;833:29;:::i;:::-;823:39;;881:38;915:2;904:9;900:18;881:38;:::i;:::-;871:48;;966:2;955:9;951:18;938:32;928:42;;648:328;;;;;:::o;981:254::-;1049:6;1057;1110:2;1098:9;1089:7;1085:23;1081:32;1078:52;;;1126:1;1123;1116:12;1078:52;1149:29;1168:9;1149:29;:::i;:::-;1139:39;1225:2;1210:18;;;;1197:32;;-1:-1:-1;;;981:254:63:o;1240:180::-;1299:6;1352:2;1340:9;1331:7;1327:23;1323:32;1320:52;;;1368:1;1365;1358:12;1320:52;-1:-1:-1;1391:23:63;;1240:180;-1:-1:-1;1240:180:63:o;1827:597::-;1939:4;1968:2;1997;1986:9;1979:21;2029:6;2023:13;2072:6;2067:2;2056:9;2052:18;2045:34;2097:1;2107:140;2121:6;2118:1;2115:13;2107:140;;;2216:14;;;2212:23;;2206:30;2182:17;;;2201:2;2178:26;2171:66;2136:10;;2107:140;;;2265:6;2262:1;2259:13;2256:91;;;2335:1;2330:2;2321:6;2310:9;2306:22;2302:31;2295:42;2256:91;-1:-1:-1;2408:2:63;2387:15;-1:-1:-1;;2383:29:63;2368:45;;;;2415:2;2364:54;;1827:597;-1:-1:-1;;;1827:597:63:o;7098:128::-;7138:3;7169:1;7165:6;7162:1;7159:13;7156:39;;;7175:18;;:::i;:::-;-1:-1:-1;7211:9:63;;7098:128::o;7231:125::-;7271:4;7299:1;7296;7293:8;7290:34;;;7304:18;;:::i;:::-;-1:-1:-1;7341:9:63;;7231:125::o;7361:380::-;7440:1;7436:12;;;;7483;;;7504:61;;7558:4;7550:6;7546:17;7536:27;;7504:61;7611:2;7603:6;7600:14;7580:18;7577:38;7574:161;;;7657:10;7652:3;7648:20;7645:1;7638:31;7692:4;7689:1;7682:15;7720:4;7717:1;7710:15;7574:161;;7361:380;;;:::o;7746:127::-;7807:10;7802:3;7798:20;7795:1;7788:31;7838:4;7835:1;7828:15;7862:4;7859:1;7852:15",
    "source": "pragma solidity ^0.8.0;\n\n// SPDX-License-Identifier:MIT\n\nimport \"@openzeppelin/contracts/token/ERC20/ERC20.sol\";\nimport \"../interfaces/IERC20Token.sol\";\n\n/**\n * @notice minimal \"wrapped eth\" implementation.\n */\ncontract TestWrappedNativeToken is ERC20, IERC20Token {\n\n    // solhint-disable-next-line no-empty-blocks\n    constructor() ERC20(\"Wrapped Native Token\", \"wnTok\") {\n    }\n\n    receive() external payable {\n        deposit();\n    }\n\n    function deposit() public override payable {\n        _mint(msg.sender, msg.value);\n    }\n\n    function withdraw(uint amount) public override {\n        _burn(msg.sender, amount);\n        // solhint-disable-next-line avoid-low-level-calls\n        (bool success,) = msg.sender.call{value:amount}(\"\");\n        require(success, \"transfer failed\");\n    }\n}",
    "sourcePath": "/Users/alexf/gsn2/packages/contracts/solpp/test/TestWrappedNativeToken.sol",
    "ast": {
        "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/test/TestWrappedNativeToken.sol",
        "exportedSymbols": {
            "Context": [
                11508
            ],
            "ERC20": [
                10771
            ],
            "IERC20": [
                10849
            ],
            "IERC20Metadata": [
                10874
            ],
            "IERC20Token": [
                5350
            ],
            "TestWrappedNativeToken": [
                8077
            ]
        },
        "id": 8078,
        "license": "MIT",
        "nodeType": "SourceUnit",
        "nodes": [
            {
                "id": 8014,
                "literals": [
                    "solidity",
                    "^",
                    "0.8",
                    ".0"
                ],
                "nodeType": "PragmaDirective",
                "src": "0:23:37"
            },
            {
                "absolutePath": "@openzeppelin/contracts/token/ERC20/ERC20.sol",
                "file": "@openzeppelin/contracts/token/ERC20/ERC20.sol",
                "id": 8015,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 8078,
                "sourceUnit": 10772,
                "src": "57:55:37",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/interfaces/IERC20Token.sol",
                "file": "../interfaces/IERC20Token.sol",
                "id": 8016,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 8078,
                "sourceUnit": 5351,
                "src": "113:39:37",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "abstract": false,
                "baseContracts": [
                    {
                        "baseName": {
                            "id": 8018,
                            "name": "ERC20",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 10771,
                            "src": "246:5:37"
                        },
                        "id": 8019,
                        "nodeType": "InheritanceSpecifier",
                        "src": "246:5:37"
                    },
                    {
                        "baseName": {
                            "id": 8020,
                            "name": "IERC20Token",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 5350,
                            "src": "253:11:37"
                        },
                        "id": 8021,
                        "nodeType": "InheritanceSpecifier",
                        "src": "253:11:37"
                    }
                ],
                "contractDependencies": [],
                "contractKind": "contract",
                "documentation": {
                    "id": 8017,
                    "nodeType": "StructuredDocumentation",
                    "src": "154:56:37",
                    "text": " @notice minimal \"wrapped eth\" implementation."
                },
                "fullyImplemented": true,
                "id": 8077,
                "linearizedBaseContracts": [
                    8077,
                    5350,
                    10771,
                    10874,
                    10849,
                    11508
                ],
                "name": "TestWrappedNativeToken",
                "nameLocation": "220:22:37",
                "nodeType": "ContractDefinition",
                "nodes": [
                    {
                        "body": {
                            "id": 8028,
                            "nodeType": "Block",
                            "src": "374:7:37",
                            "statements": []
                        },
                        "id": 8029,
                        "implemented": true,
                        "kind": "constructor",
                        "modifiers": [
                            {
                                "arguments": [
                                    {
                                        "hexValue": "57726170706564204e617469766520546f6b656e",
                                        "id": 8024,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "string",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "341:22:37",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_stringliteral_4b18f60c40c07c237360fadf2f40ae8cc74843e20529a868f1bca04ee60e5ca1",
                                            "typeString": "literal_string \"Wrapped Native Token\""
                                        },
                                        "value": "Wrapped Native Token"
                                    },
                                    {
                                        "hexValue": "776e546f6b",
                                        "id": 8025,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "string",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "365:7:37",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_stringliteral_97b5feb394f5b35005148281b777a8e6a985f43e5a09b6ec47a1c3a551f59808",
                                            "typeString": "literal_string \"wnTok\""
                                        },
                                        "value": "wnTok"
                                    }
                                ],
                                "id": 8026,
                                "kind": "baseConstructorSpecifier",
                                "modifierName": {
                                    "id": 8023,
                                    "name": "ERC20",
                                    "nodeType": "IdentifierPath",
                                    "referencedDeclaration": 10771,
                                    "src": "335:5:37"
                                },
                                "nodeType": "ModifierInvocation",
                                "src": "335:38:37"
                            }
                        ],
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 8022,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "332:2:37"
                        },
                        "returnParameters": {
                            "id": 8027,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "374:0:37"
                        },
                        "scope": 8077,
                        "src": "321:60:37",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "body": {
                            "id": 8035,
                            "nodeType": "Block",
                            "src": "414:26:37",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [],
                                        "expression": {
                                            "argumentTypes": [],
                                            "id": 8032,
                                            "name": "deposit",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 8048,
                                            "src": "424:7:37",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                                                "typeString": "function ()"
                                            }
                                        },
                                        "id": 8033,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "424:9:37",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 8034,
                                    "nodeType": "ExpressionStatement",
                                    "src": "424:9:37"
                                }
                            ]
                        },
                        "id": 8036,
                        "implemented": true,
                        "kind": "receive",
                        "modifiers": [],
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 8030,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "394:2:37"
                        },
                        "returnParameters": {
                            "id": 8031,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "414:0:37"
                        },
                        "scope": 8077,
                        "src": "387:53:37",
                        "stateMutability": "payable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            5344
                        ],
                        "body": {
                            "id": 8047,
                            "nodeType": "Block",
                            "src": "489:45:37",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "expression": {
                                                    "id": 8041,
                                                    "name": "msg",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967281,
                                                    "src": "505:3:37",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_message",
                                                        "typeString": "msg"
                                                    }
                                                },
                                                "id": 8042,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "sender",
                                                "nodeType": "MemberAccess",
                                                "src": "505:10:37",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "expression": {
                                                    "id": 8043,
                                                    "name": "msg",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967281,
                                                    "src": "517:3:37",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_message",
                                                        "typeString": "msg"
                                                    }
                                                },
                                                "id": 8044,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "value",
                                                "nodeType": "MemberAccess",
                                                "src": "517:9:37",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 8040,
                                            "name": "_mint",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 10588,
                                            "src": "499:5:37",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,uint256)"
                                            }
                                        },
                                        "id": 8045,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "499:28:37",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 8046,
                                    "nodeType": "ExpressionStatement",
                                    "src": "499:28:37"
                                }
                            ]
                        },
                        "functionSelector": "d0e30db0",
                        "id": 8048,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "deposit",
                        "nameLocation": "455:7:37",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 8038,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "472:8:37"
                        },
                        "parameters": {
                            "id": 8037,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "462:2:37"
                        },
                        "returnParameters": {
                            "id": 8039,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "489:0:37"
                        },
                        "scope": 8077,
                        "src": "446:88:37",
                        "stateMutability": "payable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            5349
                        ],
                        "body": {
                            "id": 8075,
                            "nodeType": "Block",
                            "src": "587:207:37",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "expression": {
                                                    "id": 8055,
                                                    "name": "msg",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967281,
                                                    "src": "603:3:37",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_message",
                                                        "typeString": "msg"
                                                    }
                                                },
                                                "id": 8056,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "sender",
                                                "nodeType": "MemberAccess",
                                                "src": "603:10:37",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 8057,
                                                "name": "amount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 8050,
                                                "src": "615:6:37",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 8054,
                                            "name": "_burn",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 10660,
                                            "src": "597:5:37",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,uint256)"
                                            }
                                        },
                                        "id": 8058,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "597:25:37",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 8059,
                                    "nodeType": "ExpressionStatement",
                                    "src": "597:25:37"
                                },
                                {
                                    "assignments": [
                                        8061,
                                        null
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 8061,
                                            "mutability": "mutable",
                                            "name": "success",
                                            "nameLocation": "697:7:37",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 8075,
                                            "src": "692:12:37",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            },
                                            "typeName": {
                                                "id": 8060,
                                                "name": "bool",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "692:4:37",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "visibility": "internal"
                                        },
                                        null
                                    ],
                                    "id": 8069,
                                    "initialValue": {
                                        "arguments": [
                                            {
                                                "hexValue": "",
                                                "id": 8067,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "739:2:37",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                                    "typeString": "literal_string \"\""
                                                },
                                                "value": ""
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                                    "typeString": "literal_string \"\""
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                                        "typeString": "literal_string \"\""
                                                    }
                                                ],
                                                "expression": {
                                                    "expression": {
                                                        "id": 8062,
                                                        "name": "msg",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967281,
                                                        "src": "709:3:37",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_message",
                                                            "typeString": "msg"
                                                        }
                                                    },
                                                    "id": 8063,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "sender",
                                                    "nodeType": "MemberAccess",
                                                    "src": "709:10:37",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "id": 8064,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "call",
                                                "nodeType": "MemberAccess",
                                                "src": "709:15:37",
                                                "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": 8066,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "names": [
                                                "value"
                                            ],
                                            "nodeType": "FunctionCallOptions",
                                            "options": [
                                                {
                                                    "id": 8065,
                                                    "name": "amount",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 8050,
                                                    "src": "731:6:37",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                }
                                            ],
                                            "src": "709:29:37",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value",
                                                "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                                            }
                                        },
                                        "id": 8068,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "709:33:37",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                                            "typeString": "tuple(bool,bytes memory)"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "691:51:37"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 8071,
                                                "name": "success",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 8061,
                                                "src": "760:7:37",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "7472616e73666572206661696c6564",
                                                "id": 8072,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "769:17:37",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_df1797085e2da014ef9392ee25ab0802d6ce132451397172f17fd86110e2e02b",
                                                    "typeString": "literal_string \"transfer failed\""
                                                },
                                                "value": "transfer failed"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_df1797085e2da014ef9392ee25ab0802d6ce132451397172f17fd86110e2e02b",
                                                    "typeString": "literal_string \"transfer failed\""
                                                }
                                            ],
                                            "id": 8070,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "752:7:37",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 8073,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "752:35:37",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 8074,
                                    "nodeType": "ExpressionStatement",
                                    "src": "752:35:37"
                                }
                            ]
                        },
                        "functionSelector": "2e1a7d4d",
                        "id": 8076,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "withdraw",
                        "nameLocation": "549:8:37",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 8052,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "578:8:37"
                        },
                        "parameters": {
                            "id": 8051,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 8050,
                                    "mutability": "mutable",
                                    "name": "amount",
                                    "nameLocation": "563:6:37",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 8076,
                                    "src": "558:11:37",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 8049,
                                        "name": "uint",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "558:4:37",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "557:13:37"
                        },
                        "returnParameters": {
                            "id": 8053,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "587:0:37"
                        },
                        "scope": 8077,
                        "src": "540:254:37",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    }
                ],
                "scope": 8078,
                "src": "211:585:37",
                "usedErrors": []
            }
        ],
        "src": "0:796:37"
    },
    "legacyAST": {
        "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/test/TestWrappedNativeToken.sol",
        "exportedSymbols": {
            "Context": [
                11508
            ],
            "ERC20": [
                10771
            ],
            "IERC20": [
                10849
            ],
            "IERC20Metadata": [
                10874
            ],
            "IERC20Token": [
                5350
            ],
            "TestWrappedNativeToken": [
                8077
            ]
        },
        "id": 8078,
        "license": "MIT",
        "nodeType": "SourceUnit",
        "nodes": [
            {
                "id": 8014,
                "literals": [
                    "solidity",
                    "^",
                    "0.8",
                    ".0"
                ],
                "nodeType": "PragmaDirective",
                "src": "0:23:37"
            },
            {
                "absolutePath": "@openzeppelin/contracts/token/ERC20/ERC20.sol",
                "file": "@openzeppelin/contracts/token/ERC20/ERC20.sol",
                "id": 8015,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 8078,
                "sourceUnit": 10772,
                "src": "57:55:37",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/interfaces/IERC20Token.sol",
                "file": "../interfaces/IERC20Token.sol",
                "id": 8016,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 8078,
                "sourceUnit": 5351,
                "src": "113:39:37",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "abstract": false,
                "baseContracts": [
                    {
                        "baseName": {
                            "id": 8018,
                            "name": "ERC20",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 10771,
                            "src": "246:5:37"
                        },
                        "id": 8019,
                        "nodeType": "InheritanceSpecifier",
                        "src": "246:5:37"
                    },
                    {
                        "baseName": {
                            "id": 8020,
                            "name": "IERC20Token",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 5350,
                            "src": "253:11:37"
                        },
                        "id": 8021,
                        "nodeType": "InheritanceSpecifier",
                        "src": "253:11:37"
                    }
                ],
                "contractDependencies": [],
                "contractKind": "contract",
                "documentation": {
                    "id": 8017,
                    "nodeType": "StructuredDocumentation",
                    "src": "154:56:37",
                    "text": " @notice minimal \"wrapped eth\" implementation."
                },
                "fullyImplemented": true,
                "id": 8077,
                "linearizedBaseContracts": [
                    8077,
                    5350,
                    10771,
                    10874,
                    10849,
                    11508
                ],
                "name": "TestWrappedNativeToken",
                "nameLocation": "220:22:37",
                "nodeType": "ContractDefinition",
                "nodes": [
                    {
                        "body": {
                            "id": 8028,
                            "nodeType": "Block",
                            "src": "374:7:37",
                            "statements": []
                        },
                        "id": 8029,
                        "implemented": true,
                        "kind": "constructor",
                        "modifiers": [
                            {
                                "arguments": [
                                    {
                                        "hexValue": "57726170706564204e617469766520546f6b656e",
                                        "id": 8024,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "string",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "341:22:37",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_stringliteral_4b18f60c40c07c237360fadf2f40ae8cc74843e20529a868f1bca04ee60e5ca1",
                                            "typeString": "literal_string \"Wrapped Native Token\""
                                        },
                                        "value": "Wrapped Native Token"
                                    },
                                    {
                                        "hexValue": "776e546f6b",
                                        "id": 8025,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "string",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "365:7:37",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_stringliteral_97b5feb394f5b35005148281b777a8e6a985f43e5a09b6ec47a1c3a551f59808",
                                            "typeString": "literal_string \"wnTok\""
                                        },
                                        "value": "wnTok"
                                    }
                                ],
                                "id": 8026,
                                "kind": "baseConstructorSpecifier",
                                "modifierName": {
                                    "id": 8023,
                                    "name": "ERC20",
                                    "nodeType": "IdentifierPath",
                                    "referencedDeclaration": 10771,
                                    "src": "335:5:37"
                                },
                                "nodeType": "ModifierInvocation",
                                "src": "335:38:37"
                            }
                        ],
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 8022,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "332:2:37"
                        },
                        "returnParameters": {
                            "id": 8027,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "374:0:37"
                        },
                        "scope": 8077,
                        "src": "321:60:37",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "body": {
                            "id": 8035,
                            "nodeType": "Block",
                            "src": "414:26:37",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [],
                                        "expression": {
                                            "argumentTypes": [],
                                            "id": 8032,
                                            "name": "deposit",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 8048,
                                            "src": "424:7:37",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                                                "typeString": "function ()"
                                            }
                                        },
                                        "id": 8033,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "424:9:37",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 8034,
                                    "nodeType": "ExpressionStatement",
                                    "src": "424:9:37"
                                }
                            ]
                        },
                        "id": 8036,
                        "implemented": true,
                        "kind": "receive",
                        "modifiers": [],
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 8030,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "394:2:37"
                        },
                        "returnParameters": {
                            "id": 8031,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "414:0:37"
                        },
                        "scope": 8077,
                        "src": "387:53:37",
                        "stateMutability": "payable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            5344
                        ],
                        "body": {
                            "id": 8047,
                            "nodeType": "Block",
                            "src": "489:45:37",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "expression": {
                                                    "id": 8041,
                                                    "name": "msg",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967281,
                                                    "src": "505:3:37",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_message",
                                                        "typeString": "msg"
                                                    }
                                                },
                                                "id": 8042,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "sender",
                                                "nodeType": "MemberAccess",
                                                "src": "505:10:37",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "expression": {
                                                    "id": 8043,
                                                    "name": "msg",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967281,
                                                    "src": "517:3:37",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_message",
                                                        "typeString": "msg"
                                                    }
                                                },
                                                "id": 8044,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "value",
                                                "nodeType": "MemberAccess",
                                                "src": "517:9:37",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 8040,
                                            "name": "_mint",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 10588,
                                            "src": "499:5:37",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,uint256)"
                                            }
                                        },
                                        "id": 8045,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "499:28:37",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 8046,
                                    "nodeType": "ExpressionStatement",
                                    "src": "499:28:37"
                                }
                            ]
                        },
                        "functionSelector": "d0e30db0",
                        "id": 8048,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "deposit",
                        "nameLocation": "455:7:37",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 8038,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "472:8:37"
                        },
                        "parameters": {
                            "id": 8037,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "462:2:37"
                        },
                        "returnParameters": {
                            "id": 8039,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "489:0:37"
                        },
                        "scope": 8077,
                        "src": "446:88:37",
                        "stateMutability": "payable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            5349
                        ],
                        "body": {
                            "id": 8075,
                            "nodeType": "Block",
                            "src": "587:207:37",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "expression": {
                                                    "id": 8055,
                                                    "name": "msg",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967281,
                                                    "src": "603:3:37",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_message",
                                                        "typeString": "msg"
                                                    }
                                                },
                                                "id": 8056,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "sender",
                                                "nodeType": "MemberAccess",
                                                "src": "603:10:37",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 8057,
                                                "name": "amount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 8050,
                                                "src": "615:6:37",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 8054,
                                            "name": "_burn",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 10660,
                                            "src": "597:5:37",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,uint256)"
                                            }
                                        },
                                        "id": 8058,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "597:25:37",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 8059,
                                    "nodeType": "ExpressionStatement",
                                    "src": "597:25:37"
                                },
                                {
                                    "assignments": [
                                        8061,
                                        null
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 8061,
                                            "mutability": "mutable",
                                            "name": "success",
                                            "nameLocation": "697:7:37",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 8075,
                                            "src": "692:12:37",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            },
                                            "typeName": {
                                                "id": 8060,
                                                "name": "bool",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "692:4:37",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "visibility": "internal"
                                        },
                                        null
                                    ],
                                    "id": 8069,
                                    "initialValue": {
                                        "arguments": [
                                            {
                                                "hexValue": "",
                                                "id": 8067,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "739:2:37",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                                    "typeString": "literal_string \"\""
                                                },
                                                "value": ""
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                                    "typeString": "literal_string \"\""
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                                        "typeString": "literal_string \"\""
                                                    }
                                                ],
                                                "expression": {
                                                    "expression": {
                                                        "id": 8062,
                                                        "name": "msg",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967281,
                                                        "src": "709:3:37",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_message",
                                                            "typeString": "msg"
                                                        }
                                                    },
                                                    "id": 8063,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "sender",
                                                    "nodeType": "MemberAccess",
                                                    "src": "709:10:37",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "id": 8064,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "call",
                                                "nodeType": "MemberAccess",
                                                "src": "709:15:37",
                                                "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": 8066,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "names": [
                                                "value"
                                            ],
                                            "nodeType": "FunctionCallOptions",
                                            "options": [
                                                {
                                                    "id": 8065,
                                                    "name": "amount",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 8050,
                                                    "src": "731:6:37",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                }
                                            ],
                                            "src": "709:29:37",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value",
                                                "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                                            }
                                        },
                                        "id": 8068,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "709:33:37",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                                            "typeString": "tuple(bool,bytes memory)"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "691:51:37"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 8071,
                                                "name": "success",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 8061,
                                                "src": "760:7:37",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "7472616e73666572206661696c6564",
                                                "id": 8072,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "769:17:37",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_df1797085e2da014ef9392ee25ab0802d6ce132451397172f17fd86110e2e02b",
                                                    "typeString": "literal_string \"transfer failed\""
                                                },
                                                "value": "transfer failed"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_df1797085e2da014ef9392ee25ab0802d6ce132451397172f17fd86110e2e02b",
                                                    "typeString": "literal_string \"transfer failed\""
                                                }
                                            ],
                                            "id": 8070,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "752:7:37",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 8073,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "752:35:37",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 8074,
                                    "nodeType": "ExpressionStatement",
                                    "src": "752:35:37"
                                }
                            ]
                        },
                        "functionSelector": "2e1a7d4d",
                        "id": 8076,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "withdraw",
                        "nameLocation": "549:8:37",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 8052,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "578:8:37"
                        },
                        "parameters": {
                            "id": 8051,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 8050,
                                    "mutability": "mutable",
                                    "name": "amount",
                                    "nameLocation": "563:6:37",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 8076,
                                    "src": "558:11:37",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 8049,
                                        "name": "uint",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "558:4:37",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "557:13:37"
                        },
                        "returnParameters": {
                            "id": 8053,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "587:0:37"
                        },
                        "scope": 8077,
                        "src": "540:254:37",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    }
                ],
                "scope": 8078,
                "src": "211:585:37",
                "usedErrors": []
            }
        ],
        "src": "0:796:37"
    },
    "compiler": {
        "name": "solc",
        "version": "0.8.7+commit.e28d00a7.Emscripten.clang"
    },
    "networks": {},
    "schemaVersion": "3.1.0",
    "updatedAt": "2023-03-16T16:54:15.243Z",
    "devdoc": {
        "kind": "dev",
        "methods": {
            "allowance(address,address)": {
                "details": "See {IERC20-allowance}."
            },
            "approve(address,uint256)": {
                "details": "See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address."
            },
            "balanceOf(address)": {
                "details": "See {IERC20-balanceOf}."
            },
            "decimals()": {
                "details": "Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless this function is overridden; NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}."
            },
            "decreaseAllowance(address,uint256)": {
                "details": "Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`."
            },
            "increaseAllowance(address,uint256)": {
                "details": "Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address."
            },
            "name()": {
                "details": "Returns the name of the token."
            },
            "symbol()": {
                "details": "Returns the symbol of the token, usually a shorter version of the name."
            },
            "totalSupply()": {
                "details": "See {IERC20-totalSupply}."
            },
            "transfer(address,uint256)": {
                "details": "See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`."
            },
            "transferFrom(address,address,uint256)": {
                "details": "See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `amount`. - the caller must have allowance for ``from``'s tokens of at least `amount`."
            }
        },
        "version": 1
    },
    "userdoc": {
        "kind": "user",
        "methods": {},
        "notice": "minimal \"wrapped eth\" implementation.",
        "version": 1
    }
}
