{
    "contractName": "Test_Token",
    "abi": [
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "_initialAmount",
                    "type": "uint256"
                },
                {
                    "internalType": "string",
                    "name": "_tokenName",
                    "type": "string"
                },
                {
                    "internalType": "uint8",
                    "name": "_decimalUnits",
                    "type": "uint8"
                },
                {
                    "internalType": "string",
                    "name": "_tokenSymbol",
                    "type": "string"
                }
            ],
            "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": "",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "name": "allowed",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "name": "balances",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "decimals",
            "outputs": [
                {
                    "internalType": "uint8",
                    "name": "",
                    "type": "uint8"
                }
            ],
            "stateMutability": "view",
            "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": "_value",
                    "type": "uint256"
                }
            ],
            "name": "transfer",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "success",
                    "type": "bool"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "_from",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "_to",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "_value",
                    "type": "uint256"
                }
            ],
            "name": "transferFrom",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "success",
                    "type": "bool"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "_owner",
                    "type": "address"
                }
            ],
            "name": "balanceOf",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "balance",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "_spender",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "_value",
                    "type": "uint256"
                }
            ],
            "name": "approve",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "success",
                    "type": "bool"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "_owner",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "_spender",
                    "type": "address"
                }
            ],
            "name": "allowance",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "remaining",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        }
    ],
    "metadata": "{\"compiler\":{\"version\":\"0.8.0+commit.c7dfd78e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_initialAmount\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_tokenName\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"_decimalUnits\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"_tokenSymbol\",\"type\":\"string\"}],\"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\":\"remaining\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowed\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"balances\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"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\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"params\":{\"_owner\":\"The address of the account owning tokens\",\"_spender\":\"The address of the account able to transfer the tokens\"},\"returns\":{\"remaining\":\"Amount of remaining tokens allowed to spent\"}},\"approve(address,uint256)\":{\"params\":{\"_spender\":\"The address of the account able to transfer the tokens\",\"_value\":\"The amount of wei to be approved for transfer\"},\"returns\":{\"success\":\"Whether the approval was successful or not\"}},\"balanceOf(address)\":{\"params\":{\"_owner\":\"The address from which the balance will be retrieved\"},\"returns\":{\"balance\":\"the balance\"}},\"transfer(address,uint256)\":{\"params\":{\"_to\":\"The address of the recipient\",\"_value\":\"The amount of token to be transferred\"},\"returns\":{\"success\":\"Whether the transfer was successful or not\"}},\"transferFrom(address,address,uint256)\":{\"params\":{\"_from\":\"The address of the sender\",\"_to\":\"The address of the recipient\",\"_value\":\"The amount of token to be transferred\"},\"returns\":{\"success\":\"Whether the transfer was successful or not\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"approve(address,uint256)\":{\"notice\":\"`msg.sender` approves `_addr` to spend `_value` tokens\"},\"transfer(address,uint256)\":{\"notice\":\"send `_value` token to `_to` from `msg.sender`\"},\"transferFrom(address,address,uint256)\":{\"notice\":\"send `_value` token to `_to` from `_from` on the condition it is approved by `_from`\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/Users/jordigironamezcua/pruebas/contracts/Token.sol\":\"Test_Token\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/jordigironamezcua/pruebas/contracts/Token.sol\":{\"keccak256\":\"0x1e85b30d11439d47026a71e631e68f183ed11452cb9736209c8e89302304fb07\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://865c5dcda1e1d509c30f824d43abc5fae1ec7a149d73e8bf4372ff26c4848c49\",\"dweb:/ipfs/QmNY8wAdmFLNBRfKbXNA2rHUU3X5CkwMV4fE98VyRYT6LP\"]}},\"version\":1}",
    "bytecode": "60806040523480156200001157600080fd5b50604051620013af380380620013af833981810160405281019062000037919062000228565b836000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083600281905550826003908051906020019062000099929190620000d8565b5081600460006101000a81548160ff021916908360ff1602179055508060059080519060200190620000cd929190620000d8565b505050505062000442565b828054620000e6906200037a565b90600052602060002090601f0160209004810192826200010a576000855562000156565b82601f106200012557805160ff191683800117855562000156565b8280016001018555821562000156579182015b828111156200015557825182559160200191906001019062000138565b5b50905062000165919062000169565b5090565b5b80821115620001845760008160009055506001016200016a565b5090565b60006200019f6200019984620002fa565b620002c6565b905082815260208101848484011115620001b857600080fd5b620001c584828562000344565b509392505050565b600082601f830112620001df57600080fd5b8151620001f184826020860162000188565b91505092915050565b6000815190506200020b816200040e565b92915050565b600081519050620002228162000428565b92915050565b600080600080608085870312156200023f57600080fd5b60006200024f87828801620001fa565b945050602085015167ffffffffffffffff8111156200026d57600080fd5b6200027b87828801620001cd565b93505060406200028e8782880162000211565b925050606085015167ffffffffffffffff811115620002ac57600080fd5b620002ba87828801620001cd565b91505092959194509250565b6000604051905081810181811067ffffffffffffffff82111715620002f057620002ef620003df565b5b8060405250919050565b600067ffffffffffffffff821115620003185762000317620003df565b5b601f19601f8301169050602081019050919050565b6000819050919050565b600060ff82169050919050565b60005b838110156200036457808201518184015260208101905062000347565b8381111562000374576000848401525b50505050565b600060028204905060018216806200039357607f821691505b60208210811415620003aa57620003a9620003b0565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000419816200032d565b81146200042557600080fd5b50565b620004338162000337565b81146200043f57600080fd5b50565b610f5d80620004526000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c8063313ce56711610071578063313ce5671461017a5780635c6581651461019857806370a08231146101c857806395d89b41146101f8578063a9059cbb14610216578063dd62ed3e14610246576100a9565b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100fc57806323b872dd1461011a57806327e235e31461014a575b600080fd5b6100b6610276565b6040516100c39190610c92565b60405180910390f35b6100e660048036038101906100e19190610b09565b610304565b6040516100f39190610c77565b60405180910390f35b6101046103f6565b6040516101119190610cf4565b60405180910390f35b610134600480360381019061012f9190610aba565b6103fc565b6040516101419190610c77565b60405180910390f35b610164600480360381019061015f9190610a55565b6106e2565b6040516101719190610cf4565b60405180910390f35b6101826106fa565b60405161018f9190610d0f565b60405180910390f35b6101b260048036038101906101ad9190610a7e565b61070d565b6040516101bf9190610cf4565b60405180910390f35b6101e260048036038101906101dd9190610a55565b610732565b6040516101ef9190610cf4565b60405180910390f35b61020061077a565b60405161020d9190610c92565b60405180910390f35b610230600480360381019061022b9190610b09565b610808565b60405161023d9190610c77565b60405180910390f35b610260600480360381019061025b9190610a7e565b6109a4565b60405161026d9190610cf4565b60405180910390f35b6003805461028390610e58565b80601f01602080910402602001604051908101604052809291908181526020018280546102af90610e58565b80156102fc5780601f106102d1576101008083540402835291602001916102fc565b820191906000526020600020905b8154815290600101906020018083116102df57829003601f168201915b505050505081565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516103e49190610cf4565b60405180910390a36001905092915050565b60025481565b600080600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156104cc5750828110155b61050b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161050290610cd4565b60405180910390fd5b826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546105599190610d46565b92505081905550826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546105ae9190610d9c565b925050819055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8110156106715782600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546106699190610d9c565b925050819055505b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516106ce9190610cf4565b60405180910390a360019150509392505050565b60006020528060005260406000206000915090505481565b600460009054906101000a900460ff1681565b6001602052816000526040600020602052806000526040600020600091509150505481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6005805461078790610e58565b80601f01602080910402602001604051908101604052809291908181526020018280546107b390610e58565b80156108005780601f106107d557610100808354040283529160200191610800565b820191906000526020600020905b8154815290600101906020018083116107e357829003601f168201915b505050505081565b6000816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561088b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088290610cb4565b60405180910390fd5b816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546108d99190610d9c565b92505081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461092e9190610d46565b925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516109929190610cf4565b60405180910390a36001905092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600081359050610a3a81610ef9565b92915050565b600081359050610a4f81610f10565b92915050565b600060208284031215610a6757600080fd5b6000610a7584828501610a2b565b91505092915050565b60008060408385031215610a9157600080fd5b6000610a9f85828601610a2b565b9250506020610ab085828601610a2b565b9150509250929050565b600080600060608486031215610acf57600080fd5b6000610add86828701610a2b565b9350506020610aee86828701610a2b565b9250506040610aff86828701610a40565b9150509250925092565b60008060408385031215610b1c57600080fd5b6000610b2a85828601610a2b565b9250506020610b3b85828601610a40565b9150509250929050565b610b4e81610de2565b82525050565b6000610b5f82610d2a565b610b698185610d35565b9350610b79818560208601610e25565b610b8281610ee8565b840191505092915050565b6000610b9a602f83610d35565b91507f746f6b656e2062616c616e6365206973206c6f776572207468616e207468652060008301527f76616c75652072657175657374656400000000000000000000000000000000006020830152604082019050919050565b6000610c00603983610d35565b91507f746f6b656e2062616c616e6365206f7220616c6c6f77616e6365206973206c6f60008301527f776572207468616e20616d6f756e7420726571756573746564000000000000006020830152604082019050919050565b610c6281610e0e565b82525050565b610c7181610e18565b82525050565b6000602082019050610c8c6000830184610b45565b92915050565b60006020820190508181036000830152610cac8184610b54565b905092915050565b60006020820190508181036000830152610ccd81610b8d565b9050919050565b60006020820190508181036000830152610ced81610bf3565b9050919050565b6000602082019050610d096000830184610c59565b92915050565b6000602082019050610d246000830184610c68565b92915050565b600081519050919050565b600082825260208201905092915050565b6000610d5182610e0e565b9150610d5c83610e0e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115610d9157610d90610e8a565b5b828201905092915050565b6000610da782610e0e565b9150610db283610e0e565b925082821015610dc557610dc4610e8a565b5b828203905092915050565b6000610ddb82610dee565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015610e43578082015181840152602081019050610e28565b83811115610e52576000848401525b50505050565b60006002820490506001821680610e7057607f821691505b60208210811415610e8457610e83610eb9565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b610f0281610dd0565b8114610f0d57600080fd5b50565b610f1981610e0e565b8114610f2457600080fd5b5056fea2646970667358221220caed3ccf9f3e5a02e5c13bf96bde7dec9a4cd5dae702da65612423e101e9a55864736f6c63430008000033",
    "deployedBytecode": "608060405234801561001057600080fd5b50600436106100a95760003560e01c8063313ce56711610071578063313ce5671461017a5780635c6581651461019857806370a08231146101c857806395d89b41146101f8578063a9059cbb14610216578063dd62ed3e14610246576100a9565b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100fc57806323b872dd1461011a57806327e235e31461014a575b600080fd5b6100b6610276565b6040516100c39190610c92565b60405180910390f35b6100e660048036038101906100e19190610b09565b610304565b6040516100f39190610c77565b60405180910390f35b6101046103f6565b6040516101119190610cf4565b60405180910390f35b610134600480360381019061012f9190610aba565b6103fc565b6040516101419190610c77565b60405180910390f35b610164600480360381019061015f9190610a55565b6106e2565b6040516101719190610cf4565b60405180910390f35b6101826106fa565b60405161018f9190610d0f565b60405180910390f35b6101b260048036038101906101ad9190610a7e565b61070d565b6040516101bf9190610cf4565b60405180910390f35b6101e260048036038101906101dd9190610a55565b610732565b6040516101ef9190610cf4565b60405180910390f35b61020061077a565b60405161020d9190610c92565b60405180910390f35b610230600480360381019061022b9190610b09565b610808565b60405161023d9190610c77565b60405180910390f35b610260600480360381019061025b9190610a7e565b6109a4565b60405161026d9190610cf4565b60405180910390f35b6003805461028390610e58565b80601f01602080910402602001604051908101604052809291908181526020018280546102af90610e58565b80156102fc5780601f106102d1576101008083540402835291602001916102fc565b820191906000526020600020905b8154815290600101906020018083116102df57829003601f168201915b505050505081565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516103e49190610cf4565b60405180910390a36001905092915050565b60025481565b600080600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156104cc5750828110155b61050b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161050290610cd4565b60405180910390fd5b826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546105599190610d46565b92505081905550826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546105ae9190610d9c565b925050819055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8110156106715782600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546106699190610d9c565b925050819055505b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516106ce9190610cf4565b60405180910390a360019150509392505050565b60006020528060005260406000206000915090505481565b600460009054906101000a900460ff1681565b6001602052816000526040600020602052806000526040600020600091509150505481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6005805461078790610e58565b80601f01602080910402602001604051908101604052809291908181526020018280546107b390610e58565b80156108005780601f106107d557610100808354040283529160200191610800565b820191906000526020600020905b8154815290600101906020018083116107e357829003601f168201915b505050505081565b6000816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561088b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088290610cb4565b60405180910390fd5b816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546108d99190610d9c565b92505081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461092e9190610d46565b925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516109929190610cf4565b60405180910390a36001905092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600081359050610a3a81610ef9565b92915050565b600081359050610a4f81610f10565b92915050565b600060208284031215610a6757600080fd5b6000610a7584828501610a2b565b91505092915050565b60008060408385031215610a9157600080fd5b6000610a9f85828601610a2b565b9250506020610ab085828601610a2b565b9150509250929050565b600080600060608486031215610acf57600080fd5b6000610add86828701610a2b565b9350506020610aee86828701610a2b565b9250506040610aff86828701610a40565b9150509250925092565b60008060408385031215610b1c57600080fd5b6000610b2a85828601610a2b565b9250506020610b3b85828601610a40565b9150509250929050565b610b4e81610de2565b82525050565b6000610b5f82610d2a565b610b698185610d35565b9350610b79818560208601610e25565b610b8281610ee8565b840191505092915050565b6000610b9a602f83610d35565b91507f746f6b656e2062616c616e6365206973206c6f776572207468616e207468652060008301527f76616c75652072657175657374656400000000000000000000000000000000006020830152604082019050919050565b6000610c00603983610d35565b91507f746f6b656e2062616c616e6365206f7220616c6c6f77616e6365206973206c6f60008301527f776572207468616e20616d6f756e7420726571756573746564000000000000006020830152604082019050919050565b610c6281610e0e565b82525050565b610c7181610e18565b82525050565b6000602082019050610c8c6000830184610b45565b92915050565b60006020820190508181036000830152610cac8184610b54565b905092915050565b60006020820190508181036000830152610ccd81610b8d565b9050919050565b60006020820190508181036000830152610ced81610bf3565b9050919050565b6000602082019050610d096000830184610c59565b92915050565b6000602082019050610d246000830184610c68565b92915050565b600081519050919050565b600082825260208201905092915050565b6000610d5182610e0e565b9150610d5c83610e0e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115610d9157610d90610e8a565b5b828201905092915050565b6000610da782610e0e565b9150610db283610e0e565b925082821015610dc557610dc4610e8a565b5b828203905092915050565b6000610ddb82610dee565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015610e43578082015181840152602081019050610e28565b83811115610e52576000848401525b50505050565b60006002820490506001821680610e7057607f821691505b60208210811415610e8457610e83610eb9565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b610f0281610dd0565b8114610f0d57600080fd5b50565b610f1981610e0e565b8114610f2457600080fd5b5056fea2646970667358221220caed3ccf9f3e5a02e5c13bf96bde7dec9a4cd5dae702da65612423e101e9a55864736f6c63430008000033",
    "immutableReferences": {},
    "generatedSources": [
        {
            "ast": {
                "nodeType": "YulBlock",
                "src": "0:3997:2",
                "statements": [
                    {
                        "body": {
                            "nodeType": "YulBlock",
                            "src": "102:258:2",
                            "statements": [
                                {
                                    "nodeType": "YulAssignment",
                                    "src": "112:74:2",
                                    "value": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "name": "length",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "178:6:2"
                                                    }
                                                ],
                                                "functionName": {
                                                    "name": "array_allocation_size_t_string_memory_ptr",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "136:41:2"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "136:49:2"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "allocateMemory",
                                            "nodeType": "YulIdentifier",
                                            "src": "121:14:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "121:65:2"
                                    },
                                    "variableNames": [
                                        {
                                            "name": "array",
                                            "nodeType": "YulIdentifier",
                                            "src": "112:5:2"
                                        }
                                    ]
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "name": "array",
                                                "nodeType": "YulIdentifier",
                                                "src": "202:5:2"
                                            },
                                            {
                                                "name": "length",
                                                "nodeType": "YulIdentifier",
                                                "src": "209:6:2"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "mstore",
                                            "nodeType": "YulIdentifier",
                                            "src": "195:6:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "195:21:2"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "195:21:2"
                                },
                                {
                                    "nodeType": "YulVariableDeclaration",
                                    "src": "225:27:2",
                                    "value": {
                                        "arguments": [
                                            {
                                                "name": "array",
                                                "nodeType": "YulIdentifier",
                                                "src": "240:5:2"
                                            },
                                            {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "247:4:2",
                                                "type": "",
                                                "value": "0x20"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "236:3:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "236:16:2"
                                    },
                                    "variables": [
                                        {
                                            "name": "dst",
                                            "nodeType": "YulTypedName",
                                            "src": "229:3:2",
                                            "type": ""
                                        }
                                    ]
                                },
                                {
                                    "body": {
                                        "nodeType": "YulBlock",
                                        "src": "290:16:2",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "kind": "number",
                                                            "nodeType": "YulLiteral",
                                                            "src": "299:1:2",
                                                            "type": "",
                                                            "value": "0"
                                                        },
                                                        {
                                                            "kind": "number",
                                                            "nodeType": "YulLiteral",
                                                            "src": "302:1:2",
                                                            "type": "",
                                                            "value": "0"
                                                        }
                                                    ],
                                                    "functionName": {
                                                        "name": "revert",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "292:6:2"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "292:12:2"
                                                },
                                                "nodeType": "YulExpressionStatement",
                                                "src": "292:12:2"
                                            }
                                        ]
                                    },
                                    "condition": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "name": "src",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "271:3:2"
                                                    },
                                                    {
                                                        "name": "length",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "276:6:2"
                                                    }
                                                ],
                                                "functionName": {
                                                    "name": "add",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "267:3:2"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "267:16:2"
                                            },
                                            {
                                                "name": "end",
                                                "nodeType": "YulIdentifier",
                                                "src": "285:3:2"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "gt",
                                            "nodeType": "YulIdentifier",
                                            "src": "264:2:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "264:25:2"
                                    },
                                    "nodeType": "YulIf",
                                    "src": "261:2:2"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "name": "src",
                                                "nodeType": "YulIdentifier",
                                                "src": "337:3:2"
                                            },
                                            {
                                                "name": "dst",
                                                "nodeType": "YulIdentifier",
                                                "src": "342:3:2"
                                            },
                                            {
                                                "name": "length",
                                                "nodeType": "YulIdentifier",
                                                "src": "347:6:2"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "copy_memory_to_memory",
                                            "nodeType": "YulIdentifier",
                                            "src": "315:21:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "315:39:2"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "315:39:2"
                                }
                            ]
                        },
                        "name": "abi_decode_available_length_t_string_memory_ptr_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                            {
                                "name": "src",
                                "nodeType": "YulTypedName",
                                "src": "75:3:2",
                                "type": ""
                            },
                            {
                                "name": "length",
                                "nodeType": "YulTypedName",
                                "src": "80:6:2",
                                "type": ""
                            },
                            {
                                "name": "end",
                                "nodeType": "YulTypedName",
                                "src": "88:3:2",
                                "type": ""
                            }
                        ],
                        "returnVariables": [
                            {
                                "name": "array",
                                "nodeType": "YulTypedName",
                                "src": "96:5:2",
                                "type": ""
                            }
                        ],
                        "src": "7:353:2"
                    },
                    {
                        "body": {
                            "nodeType": "YulBlock",
                            "src": "453:215:2",
                            "statements": [
                                {
                                    "body": {
                                        "nodeType": "YulBlock",
                                        "src": "502:16:2",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "kind": "number",
                                                            "nodeType": "YulLiteral",
                                                            "src": "511:1:2",
                                                            "type": "",
                                                            "value": "0"
                                                        },
                                                        {
                                                            "kind": "number",
                                                            "nodeType": "YulLiteral",
                                                            "src": "514:1:2",
                                                            "type": "",
                                                            "value": "0"
                                                        }
                                                    ],
                                                    "functionName": {
                                                        "name": "revert",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "504:6:2"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "504:12:2"
                                                },
                                                "nodeType": "YulExpressionStatement",
                                                "src": "504:12:2"
                                            }
                                        ]
                                    },
                                    "condition": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "arguments": [
                                                            {
                                                                "name": "offset",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "481:6:2"
                                                            },
                                                            {
                                                                "kind": "number",
                                                                "nodeType": "YulLiteral",
                                                                "src": "489:4:2",
                                                                "type": "",
                                                                "value": "0x1f"
                                                            }
                                                        ],
                                                        "functionName": {
                                                            "name": "add",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "477:3:2"
                                                        },
                                                        "nodeType": "YulFunctionCall",
                                                        "src": "477:17:2"
                                                    },
                                                    {
                                                        "name": "end",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "496:3:2"
                                                    }
                                                ],
                                                "functionName": {
                                                    "name": "slt",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "473:3:2"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "473:27:2"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "iszero",
                                            "nodeType": "YulIdentifier",
                                            "src": "466:6:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "466:35:2"
                                    },
                                    "nodeType": "YulIf",
                                    "src": "463:2:2"
                                },
                                {
                                    "nodeType": "YulVariableDeclaration",
                                    "src": "527:27:2",
                                    "value": {
                                        "arguments": [
                                            {
                                                "name": "offset",
                                                "nodeType": "YulIdentifier",
                                                "src": "547:6:2"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "541:5:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "541:13:2"
                                    },
                                    "variables": [
                                        {
                                            "name": "length",
                                            "nodeType": "YulTypedName",
                                            "src": "531:6:2",
                                            "type": ""
                                        }
                                    ]
                                },
                                {
                                    "nodeType": "YulAssignment",
                                    "src": "563:99:2",
                                    "value": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "name": "offset",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "635:6:2"
                                                    },
                                                    {
                                                        "kind": "number",
                                                        "nodeType": "YulLiteral",
                                                        "src": "643:4:2",
                                                        "type": "",
                                                        "value": "0x20"
                                                    }
                                                ],
                                                "functionName": {
                                                    "name": "add",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "631:3:2"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "631:17:2"
                                            },
                                            {
                                                "name": "length",
                                                "nodeType": "YulIdentifier",
                                                "src": "650:6:2"
                                            },
                                            {
                                                "name": "end",
                                                "nodeType": "YulIdentifier",
                                                "src": "658:3:2"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "abi_decode_available_length_t_string_memory_ptr_fromMemory",
                                            "nodeType": "YulIdentifier",
                                            "src": "572:58:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "572:90:2"
                                    },
                                    "variableNames": [
                                        {
                                            "name": "array",
                                            "nodeType": "YulIdentifier",
                                            "src": "563:5:2"
                                        }
                                    ]
                                }
                            ]
                        },
                        "name": "abi_decode_t_string_memory_ptr_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                            {
                                "name": "offset",
                                "nodeType": "YulTypedName",
                                "src": "431:6:2",
                                "type": ""
                            },
                            {
                                "name": "end",
                                "nodeType": "YulTypedName",
                                "src": "439:3:2",
                                "type": ""
                            }
                        ],
                        "returnVariables": [
                            {
                                "name": "array",
                                "nodeType": "YulTypedName",
                                "src": "447:5:2",
                                "type": ""
                            }
                        ],
                        "src": "380:288:2"
                    },
                    {
                        "body": {
                            "nodeType": "YulBlock",
                            "src": "737:80:2",
                            "statements": [
                                {
                                    "nodeType": "YulAssignment",
                                    "src": "747:22:2",
                                    "value": {
                                        "arguments": [
                                            {
                                                "name": "offset",
                                                "nodeType": "YulIdentifier",
                                                "src": "762:6:2"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "756:5:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "756:13:2"
                                    },
                                    "variableNames": [
                                        {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "747:5:2"
                                        }
                                    ]
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "name": "value",
                                                "nodeType": "YulIdentifier",
                                                "src": "805:5:2"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "validator_revert_t_uint256",
                                            "nodeType": "YulIdentifier",
                                            "src": "778:26:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "778:33:2"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "778:33:2"
                                }
                            ]
                        },
                        "name": "abi_decode_t_uint256_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                            {
                                "name": "offset",
                                "nodeType": "YulTypedName",
                                "src": "715:6:2",
                                "type": ""
                            },
                            {
                                "name": "end",
                                "nodeType": "YulTypedName",
                                "src": "723:3:2",
                                "type": ""
                            }
                        ],
                        "returnVariables": [
                            {
                                "name": "value",
                                "nodeType": "YulTypedName",
                                "src": "731:5:2",
                                "type": ""
                            }
                        ],
                        "src": "674:143:2"
                    },
                    {
                        "body": {
                            "nodeType": "YulBlock",
                            "src": "884:78:2",
                            "statements": [
                                {
                                    "nodeType": "YulAssignment",
                                    "src": "894:22:2",
                                    "value": {
                                        "arguments": [
                                            {
                                                "name": "offset",
                                                "nodeType": "YulIdentifier",
                                                "src": "909:6:2"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "903:5:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "903:13:2"
                                    },
                                    "variableNames": [
                                        {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "894:5:2"
                                        }
                                    ]
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "name": "value",
                                                "nodeType": "YulIdentifier",
                                                "src": "950:5:2"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "validator_revert_t_uint8",
                                            "nodeType": "YulIdentifier",
                                            "src": "925:24:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "925:31:2"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "925:31:2"
                                }
                            ]
                        },
                        "name": "abi_decode_t_uint8_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                            {
                                "name": "offset",
                                "nodeType": "YulTypedName",
                                "src": "862:6:2",
                                "type": ""
                            },
                            {
                                "name": "end",
                                "nodeType": "YulTypedName",
                                "src": "870:3:2",
                                "type": ""
                            }
                        ],
                        "returnVariables": [
                            {
                                "name": "value",
                                "nodeType": "YulTypedName",
                                "src": "878:5:2",
                                "type": ""
                            }
                        ],
                        "src": "823:139:2"
                    },
                    {
                        "body": {
                            "nodeType": "YulBlock",
                            "src": "1114:815:2",
                            "statements": [
                                {
                                    "body": {
                                        "nodeType": "YulBlock",
                                        "src": "1161:16:2",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "kind": "number",
                                                            "nodeType": "YulLiteral",
                                                            "src": "1170:1:2",
                                                            "type": "",
                                                            "value": "0"
                                                        },
                                                        {
                                                            "kind": "number",
                                                            "nodeType": "YulLiteral",
                                                            "src": "1173:1:2",
                                                            "type": "",
                                                            "value": "0"
                                                        }
                                                    ],
                                                    "functionName": {
                                                        "name": "revert",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "1163:6:2"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "1163:12:2"
                                                },
                                                "nodeType": "YulExpressionStatement",
                                                "src": "1163:12:2"
                                            }
                                        ]
                                    },
                                    "condition": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "name": "dataEnd",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "1135:7:2"
                                                    },
                                                    {
                                                        "name": "headStart",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "1144:9:2"
                                                    }
                                                ],
                                                "functionName": {
                                                    "name": "sub",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "1131:3:2"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "1131:23:2"
                                            },
                                            {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "1156:3:2",
                                                "type": "",
                                                "value": "128"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "slt",
                                            "nodeType": "YulIdentifier",
                                            "src": "1127:3:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1127:33:2"
                                    },
                                    "nodeType": "YulIf",
                                    "src": "1124:2:2"
                                },
                                {
                                    "nodeType": "YulBlock",
                                    "src": "1187:128:2",
                                    "statements": [
                                        {
                                            "nodeType": "YulVariableDeclaration",
                                            "src": "1202:15:2",
                                            "value": {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "1216:1:2",
                                                "type": "",
                                                "value": "0"
                                            },
                                            "variables": [
                                                {
                                                    "name": "offset",
                                                    "nodeType": "YulTypedName",
                                                    "src": "1206:6:2",
                                                    "type": ""
                                                }
                                            ]
                                        },
                                        {
                                            "nodeType": "YulAssignment",
                                            "src": "1231:74:2",
                                            "value": {
                                                "arguments": [
                                                    {
                                                        "arguments": [
                                                            {
                                                                "name": "headStart",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "1277:9:2"
                                                            },
                                                            {
                                                                "name": "offset",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "1288:6:2"
                                                            }
                                                        ],
                                                        "functionName": {
                                                            "name": "add",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "1273:3:2"
                                                        },
                                                        "nodeType": "YulFunctionCall",
                                                        "src": "1273:22:2"
                                                    },
                                                    {
                                                        "name": "dataEnd",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "1297:7:2"
                                                    }
                                                ],
                                                "functionName": {
                                                    "name": "abi_decode_t_uint256_fromMemory",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "1241:31:2"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "1241:64:2"
                                            },
                                            "variableNames": [
                                                {
                                                    "name": "value0",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "1231:6:2"
                                                }
                                            ]
                                        }
                                    ]
                                },
                                {
                                    "nodeType": "YulBlock",
                                    "src": "1325:225:2",
                                    "statements": [
                                        {
                                            "nodeType": "YulVariableDeclaration",
                                            "src": "1340:39:2",
                                            "value": {
                                                "arguments": [
                                                    {
                                                        "arguments": [
                                                            {
                                                                "name": "headStart",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "1364:9:2"
                                                            },
                                                            {
                                                                "kind": "number",
                                                                "nodeType": "YulLiteral",
                                                                "src": "1375:2:2",
                                                                "type": "",
                                                                "value": "32"
                                                            }
                                                        ],
                                                        "functionName": {
                                                            "name": "add",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "1360:3:2"
                                                        },
                                                        "nodeType": "YulFunctionCall",
                                                        "src": "1360:18:2"
                                                    }
                                                ],
                                                "functionName": {
                                                    "name": "mload",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "1354:5:2"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "1354:25:2"
                                            },
                                            "variables": [
                                                {
                                                    "name": "offset",
                                                    "nodeType": "YulTypedName",
                                                    "src": "1344:6:2",
                                                    "type": ""
                                                }
                                            ]
                                        },
                                        {
                                            "body": {
                                                "nodeType": "YulBlock",
                                                "src": "1426:16:2",
                                                "statements": [
                                                    {
                                                        "expression": {
                                                            "arguments": [
                                                                {
                                                                    "kind": "number",
                                                                    "nodeType": "YulLiteral",
                                                                    "src": "1435:1:2",
                                                                    "type": "",
                                                                    "value": "0"
                                                                },
                                                                {
                                                                    "kind": "number",
                                                                    "nodeType": "YulLiteral",
                                                                    "src": "1438:1:2",
                                                                    "type": "",
                                                                    "value": "0"
                                                                }
                                                            ],
                                                            "functionName": {
                                                                "name": "revert",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "1428:6:2"
                                                            },
                                                            "nodeType": "YulFunctionCall",
                                                            "src": "1428:12:2"
                                                        },
                                                        "nodeType": "YulExpressionStatement",
                                                        "src": "1428:12:2"
                                                    }
                                                ]
                                            },
                                            "condition": {
                                                "arguments": [
                                                    {
                                                        "name": "offset",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "1398:6:2"
                                                    },
                                                    {
                                                        "kind": "number",
                                                        "nodeType": "YulLiteral",
                                                        "src": "1406:18:2",
                                                        "type": "",
                                                        "value": "0xffffffffffffffff"
                                                    }
                                                ],
                                                "functionName": {
                                                    "name": "gt",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "1395:2:2"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "1395:30:2"
                                            },
                                            "nodeType": "YulIf",
                                            "src": "1392:2:2"
                                        },
                                        {
                                            "nodeType": "YulAssignment",
                                            "src": "1456:84:2",
                                            "value": {
                                                "arguments": [
                                                    {
                                                        "arguments": [
                                                            {
                                                                "name": "headStart",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "1512:9:2"
                                                            },
                                                            {
                                                                "name": "offset",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "1523:6:2"
                                                            }
                                                        ],
                                                        "functionName": {
                                                            "name": "add",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "1508:3:2"
                                                        },
                                                        "nodeType": "YulFunctionCall",
                                                        "src": "1508:22:2"
                                                    },
                                                    {
                                                        "name": "dataEnd",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "1532:7:2"
                                                    }
                                                ],
                                                "functionName": {
                                                    "name": "abi_decode_t_string_memory_ptr_fromMemory",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "1466:41:2"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "1466:74:2"
                                            },
                                            "variableNames": [
                                                {
                                                    "name": "value1",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "1456:6:2"
                                                }
                                            ]
                                        }
                                    ]
                                },
                                {
                                    "nodeType": "YulBlock",
                                    "src": "1560:127:2",
                                    "statements": [
                                        {
                                            "nodeType": "YulVariableDeclaration",
                                            "src": "1575:16:2",
                                            "value": {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "1589:2:2",
                                                "type": "",
                                                "value": "64"
                                            },
                                            "variables": [
                                                {
                                                    "name": "offset",
                                                    "nodeType": "YulTypedName",
                                                    "src": "1579:6:2",
                                                    "type": ""
                                                }
                                            ]
                                        },
                                        {
                                            "nodeType": "YulAssignment",
                                            "src": "1605:72:2",
                                            "value": {
                                                "arguments": [
                                                    {
                                                        "arguments": [
                                                            {
                                                                "name": "headStart",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "1649:9:2"
                                                            },
                                                            {
                                                                "name": "offset",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "1660:6:2"
                                                            }
                                                        ],
                                                        "functionName": {
                                                            "name": "add",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "1645:3:2"
                                                        },
                                                        "nodeType": "YulFunctionCall",
                                                        "src": "1645:22:2"
                                                    },
                                                    {
                                                        "name": "dataEnd",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "1669:7:2"
                                                    }
                                                ],
                                                "functionName": {
                                                    "name": "abi_decode_t_uint8_fromMemory",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "1615:29:2"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "1615:62:2"
                                            },
                                            "variableNames": [
                                                {
                                                    "name": "value2",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "1605:6:2"
                                                }
                                            ]
                                        }
                                    ]
                                },
                                {
                                    "nodeType": "YulBlock",
                                    "src": "1697:225:2",
                                    "statements": [
                                        {
                                            "nodeType": "YulVariableDeclaration",
                                            "src": "1712:39:2",
                                            "value": {
                                                "arguments": [
                                                    {
                                                        "arguments": [
                                                            {
                                                                "name": "headStart",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "1736:9:2"
                                                            },
                                                            {
                                                                "kind": "number",
                                                                "nodeType": "YulLiteral",
                                                                "src": "1747:2:2",
                                                                "type": "",
                                                                "value": "96"
                                                            }
                                                        ],
                                                        "functionName": {
                                                            "name": "add",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "1732:3:2"
                                                        },
                                                        "nodeType": "YulFunctionCall",
                                                        "src": "1732:18:2"
                                                    }
                                                ],
                                                "functionName": {
                                                    "name": "mload",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "1726:5:2"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "1726:25:2"
                                            },
                                            "variables": [
                                                {
                                                    "name": "offset",
                                                    "nodeType": "YulTypedName",
                                                    "src": "1716:6:2",
                                                    "type": ""
                                                }
                                            ]
                                        },
                                        {
                                            "body": {
                                                "nodeType": "YulBlock",
                                                "src": "1798:16:2",
                                                "statements": [
                                                    {
                                                        "expression": {
                                                            "arguments": [
                                                                {
                                                                    "kind": "number",
                                                                    "nodeType": "YulLiteral",
                                                                    "src": "1807:1:2",
                                                                    "type": "",
                                                                    "value": "0"
                                                                },
                                                                {
                                                                    "kind": "number",
                                                                    "nodeType": "YulLiteral",
                                                                    "src": "1810:1:2",
                                                                    "type": "",
                                                                    "value": "0"
                                                                }
                                                            ],
                                                            "functionName": {
                                                                "name": "revert",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "1800:6:2"
                                                            },
                                                            "nodeType": "YulFunctionCall",
                                                            "src": "1800:12:2"
                                                        },
                                                        "nodeType": "YulExpressionStatement",
                                                        "src": "1800:12:2"
                                                    }
                                                ]
                                            },
                                            "condition": {
                                                "arguments": [
                                                    {
                                                        "name": "offset",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "1770:6:2"
                                                    },
                                                    {
                                                        "kind": "number",
                                                        "nodeType": "YulLiteral",
                                                        "src": "1778:18:2",
                                                        "type": "",
                                                        "value": "0xffffffffffffffff"
                                                    }
                                                ],
                                                "functionName": {
                                                    "name": "gt",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "1767:2:2"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "1767:30:2"
                                            },
                                            "nodeType": "YulIf",
                                            "src": "1764:2:2"
                                        },
                                        {
                                            "nodeType": "YulAssignment",
                                            "src": "1828:84:2",
                                            "value": {
                                                "arguments": [
                                                    {
                                                        "arguments": [
                                                            {
                                                                "name": "headStart",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "1884:9:2"
                                                            },
                                                            {
                                                                "name": "offset",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "1895:6:2"
                                                            }
                                                        ],
                                                        "functionName": {
                                                            "name": "add",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "1880:3:2"
                                                        },
                                                        "nodeType": "YulFunctionCall",
                                                        "src": "1880:22:2"
                                                    },
                                                    {
                                                        "name": "dataEnd",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "1904:7:2"
                                                    }
                                                ],
                                                "functionName": {
                                                    "name": "abi_decode_t_string_memory_ptr_fromMemory",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "1838:41:2"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "1838:74:2"
                                            },
                                            "variableNames": [
                                                {
                                                    "name": "value3",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "1828:6:2"
                                                }
                                            ]
                                        }
                                    ]
                                }
                            ]
                        },
                        "name": "abi_decode_tuple_t_uint256t_string_memory_ptrt_uint8t_string_memory_ptr_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                            {
                                "name": "headStart",
                                "nodeType": "YulTypedName",
                                "src": "1060:9:2",
                                "type": ""
                            },
                            {
                                "name": "dataEnd",
                                "nodeType": "YulTypedName",
                                "src": "1071:7:2",
                                "type": ""
                            }
                        ],
                        "returnVariables": [
                            {
                                "name": "value0",
                                "nodeType": "YulTypedName",
                                "src": "1083:6:2",
                                "type": ""
                            },
                            {
                                "name": "value1",
                                "nodeType": "YulTypedName",
                                "src": "1091:6:2",
                                "type": ""
                            },
                            {
                                "name": "value2",
                                "nodeType": "YulTypedName",
                                "src": "1099:6:2",
                                "type": ""
                            },
                            {
                                "name": "value3",
                                "nodeType": "YulTypedName",
                                "src": "1107:6:2",
                                "type": ""
                            }
                        ],
                        "src": "968:961:2"
                    },
                    {
                        "body": {
                            "nodeType": "YulBlock",
                            "src": "1975:243:2",
                            "statements": [
                                {
                                    "nodeType": "YulAssignment",
                                    "src": "1985:19:2",
                                    "value": {
                                        "arguments": [
                                            {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "2001:2:2",
                                                "type": "",
                                                "value": "64"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "1995:5:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1995:9:2"
                                    },
                                    "variableNames": [
                                        {
                                            "name": "memPtr",
                                            "nodeType": "YulIdentifier",
                                            "src": "1985:6:2"
                                        }
                                    ]
                                },
                                {
                                    "nodeType": "YulVariableDeclaration",
                                    "src": "2013:35:2",
                                    "value": {
                                        "arguments": [
                                            {
                                                "name": "memPtr",
                                                "nodeType": "YulIdentifier",
                                                "src": "2035:6:2"
                                            },
                                            {
                                                "name": "size",
                                                "nodeType": "YulIdentifier",
                                                "src": "2043:4:2"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "2031:3:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2031:17:2"
                                    },
                                    "variables": [
                                        {
                                            "name": "newFreePtr",
                                            "nodeType": "YulTypedName",
                                            "src": "2017:10:2",
                                            "type": ""
                                        }
                                    ]
                                },
                                {
                                    "body": {
                                        "nodeType": "YulBlock",
                                        "src": "2159:22:2",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "arguments": [],
                                                    "functionName": {
                                                        "name": "panic_error_0x41",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "2161:16:2"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "2161:18:2"
                                                },
                                                "nodeType": "YulExpressionStatement",
                                                "src": "2161:18:2"
                                            }
                                        ]
                                    },
                                    "condition": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "name": "newFreePtr",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "2102:10:2"
                                                    },
                                                    {
                                                        "kind": "number",
                                                        "nodeType": "YulLiteral",
                                                        "src": "2114:18:2",
                                                        "type": "",
                                                        "value": "0xffffffffffffffff"
                                                    }
                                                ],
                                                "functionName": {
                                                    "name": "gt",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "2099:2:2"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "2099:34:2"
                                            },
                                            {
                                                "arguments": [
                                                    {
                                                        "name": "newFreePtr",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "2138:10:2"
                                                    },
                                                    {
                                                        "name": "memPtr",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "2150:6:2"
                                                    }
                                                ],
                                                "functionName": {
                                                    "name": "lt",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "2135:2:2"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "2135:22:2"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "or",
                                            "nodeType": "YulIdentifier",
                                            "src": "2096:2:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2096:62:2"
                                    },
                                    "nodeType": "YulIf",
                                    "src": "2093:2:2"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "2197:2:2",
                                                "type": "",
                                                "value": "64"
                                            },
                                            {
                                                "name": "newFreePtr",
                                                "nodeType": "YulIdentifier",
                                                "src": "2201:10:2"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "mstore",
                                            "nodeType": "YulIdentifier",
                                            "src": "2190:6:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2190:22:2"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2190:22:2"
                                }
                            ]
                        },
                        "name": "allocateMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                            {
                                "name": "size",
                                "nodeType": "YulTypedName",
                                "src": "1959:4:2",
                                "type": ""
                            }
                        ],
                        "returnVariables": [
                            {
                                "name": "memPtr",
                                "nodeType": "YulTypedName",
                                "src": "1968:6:2",
                                "type": ""
                            }
                        ],
                        "src": "1935:283:2"
                    },
                    {
                        "body": {
                            "nodeType": "YulBlock",
                            "src": "2291:265:2",
                            "statements": [
                                {
                                    "body": {
                                        "nodeType": "YulBlock",
                                        "src": "2396:22:2",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "arguments": [],
                                                    "functionName": {
                                                        "name": "panic_error_0x41",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "2398:16:2"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "2398:18:2"
                                                },
                                                "nodeType": "YulExpressionStatement",
                                                "src": "2398:18:2"
                                            }
                                        ]
                                    },
                                    "condition": {
                                        "arguments": [
                                            {
                                                "name": "length",
                                                "nodeType": "YulIdentifier",
                                                "src": "2368:6:2"
                                            },
                                            {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "2376:18:2",
                                                "type": "",
                                                "value": "0xffffffffffffffff"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "gt",
                                            "nodeType": "YulIdentifier",
                                            "src": "2365:2:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2365:30:2"
                                    },
                                    "nodeType": "YulIf",
                                    "src": "2362:2:2"
                                },
                                {
                                    "nodeType": "YulAssignment",
                                    "src": "2448:41:2",
                                    "value": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "name": "length",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "2464:6:2"
                                                    },
                                                    {
                                                        "kind": "number",
                                                        "nodeType": "YulLiteral",
                                                        "src": "2472:4:2",
                                                        "type": "",
                                                        "value": "0x1f"
                                                    }
                                                ],
                                                "functionName": {
                                                    "name": "add",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "2460:3:2"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "2460:17:2"
                                            },
                                            {
                                                "arguments": [
                                                    {
                                                        "kind": "number",
                                                        "nodeType": "YulLiteral",
                                                        "src": "2483:4:2",
                                                        "type": "",
                                                        "value": "0x1f"
                                                    }
                                                ],
                                                "functionName": {
                                                    "name": "not",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "2479:3:2"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "2479:9:2"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "and",
                                            "nodeType": "YulIdentifier",
                                            "src": "2456:3:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2456:33:2"
                                    },
                                    "variableNames": [
                                        {
                                            "name": "size",
                                            "nodeType": "YulIdentifier",
                                            "src": "2448:4:2"
                                        }
                                    ]
                                },
                                {
                                    "nodeType": "YulAssignment",
                                    "src": "2526:23:2",
                                    "value": {
                                        "arguments": [
                                            {
                                                "name": "size",
                                                "nodeType": "YulIdentifier",
                                                "src": "2538:4:2"
                                            },
                                            {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "2544:4:2",
                                                "type": "",
                                                "value": "0x20"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "2534:3:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2534:15:2"
                                    },
                                    "variableNames": [
                                        {
                                            "name": "size",
                                            "nodeType": "YulIdentifier",
                                            "src": "2526:4:2"
                                        }
                                    ]
                                }
                            ]
                        },
                        "name": "array_allocation_size_t_string_memory_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                            {
                                "name": "length",
                                "nodeType": "YulTypedName",
                                "src": "2275:6:2",
                                "type": ""
                            }
                        ],
                        "returnVariables": [
                            {
                                "name": "size",
                                "nodeType": "YulTypedName",
                                "src": "2286:4:2",
                                "type": ""
                            }
                        ],
                        "src": "2224:332:2"
                    },
                    {
                        "body": {
                            "nodeType": "YulBlock",
                            "src": "2607:32:2",
                            "statements": [
                                {
                                    "nodeType": "YulAssignment",
                                    "src": "2617:16:2",
                                    "value": {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "2628:5:2"
                                    },
                                    "variableNames": [
                                        {
                                            "name": "cleaned",
                                            "nodeType": "YulIdentifier",
                                            "src": "2617:7:2"
                                        }
                                    ]
                                }
                            ]
                        },
                        "name": "cleanup_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                            {
                                "name": "value",
                                "nodeType": "YulTypedName",
                                "src": "2589:5:2",
                                "type": ""
                            }
                        ],
                        "returnVariables": [
                            {
                                "name": "cleaned",
                                "nodeType": "YulTypedName",
                                "src": "2599:7:2",
                                "type": ""
                            }
                        ],
                        "src": "2562:77:2"
                    },
                    {
                        "body": {
                            "nodeType": "YulBlock",
                            "src": "2688:43:2",
                            "statements": [
                                {
                                    "nodeType": "YulAssignment",
                                    "src": "2698:27:2",
                                    "value": {
                                        "arguments": [
                                            {
                                                "name": "value",
                                                "nodeType": "YulIdentifier",
                                                "src": "2713:5:2"
                                            },
                                            {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "2720:4:2",
                                                "type": "",
                                                "value": "0xff"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "and",
                                            "nodeType": "YulIdentifier",
                                            "src": "2709:3:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2709:16:2"
                                    },
                                    "variableNames": [
                                        {
                                            "name": "cleaned",
                                            "nodeType": "YulIdentifier",
                                            "src": "2698:7:2"
                                        }
                                    ]
                                }
                            ]
                        },
                        "name": "cleanup_t_uint8",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                            {
                                "name": "value",
                                "nodeType": "YulTypedName",
                                "src": "2670:5:2",
                                "type": ""
                            }
                        ],
                        "returnVariables": [
                            {
                                "name": "cleaned",
                                "nodeType": "YulTypedName",
                                "src": "2680:7:2",
                                "type": ""
                            }
                        ],
                        "src": "2645:86:2"
                    },
                    {
                        "body": {
                            "nodeType": "YulBlock",
                            "src": "2786:258:2",
                            "statements": [
                                {
                                    "nodeType": "YulVariableDeclaration",
                                    "src": "2796:10:2",
                                    "value": {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2805:1:2",
                                        "type": "",
                                        "value": "0"
                                    },
                                    "variables": [
                                        {
                                            "name": "i",
                                            "nodeType": "YulTypedName",
                                            "src": "2800:1:2",
                                            "type": ""
                                        }
                                    ]
                                },
                                {
                                    "body": {
                                        "nodeType": "YulBlock",
                                        "src": "2865:63:2",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "arguments": [
                                                                {
                                                                    "name": "dst",
                                                                    "nodeType": "YulIdentifier",
                                                                    "src": "2890:3:2"
                                                                },
                                                                {
                                                                    "name": "i",
                                                                    "nodeType": "YulIdentifier",
                                                                    "src": "2895:1:2"
                                                                }
                                                            ],
                                                            "functionName": {
                                                                "name": "add",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "2886:3:2"
                                                            },
                                                            "nodeType": "YulFunctionCall",
                                                            "src": "2886:11:2"
                                                        },
                                                        {
                                                            "arguments": [
                                                                {
                                                                    "arguments": [
                                                                        {
                                                                            "name": "src",
                                                                            "nodeType": "YulIdentifier",
                                                                            "src": "2909:3:2"
                                                                        },
                                                                        {
                                                                            "name": "i",
                                                                            "nodeType": "YulIdentifier",
                                                                            "src": "2914:1:2"
                                                                        }
                                                                    ],
                                                                    "functionName": {
                                                                        "name": "add",
                                                                        "nodeType": "YulIdentifier",
                                                                        "src": "2905:3:2"
                                                                    },
                                                                    "nodeType": "YulFunctionCall",
                                                                    "src": "2905:11:2"
                                                                }
                                                            ],
                                                            "functionName": {
                                                                "name": "mload",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "2899:5:2"
                                                            },
                                                            "nodeType": "YulFunctionCall",
                                                            "src": "2899:18:2"
                                                        }
                                                    ],
                                                    "functionName": {
                                                        "name": "mstore",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "2879:6:2"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "2879:39:2"
                                                },
                                                "nodeType": "YulExpressionStatement",
                                                "src": "2879:39:2"
                                            }
                                        ]
                                    },
                                    "condition": {
                                        "arguments": [
                                            {
                                                "name": "i",
                                                "nodeType": "YulIdentifier",
                                                "src": "2826:1:2"
                                            },
                                            {
                                                "name": "length",
                                                "nodeType": "YulIdentifier",
                                                "src": "2829:6:2"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "lt",
                                            "nodeType": "YulIdentifier",
                                            "src": "2823:2:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2823:13:2"
                                    },
                                    "nodeType": "YulForLoop",
                                    "post": {
                                        "nodeType": "YulBlock",
                                        "src": "2837:19:2",
                                        "statements": [
                                            {
                                                "nodeType": "YulAssignment",
                                                "src": "2839:15:2",
                                                "value": {
                                                    "arguments": [
                                                        {
                                                            "name": "i",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "2848:1:2"
                                                        },
                                                        {
                                                            "kind": "number",
                                                            "nodeType": "YulLiteral",
                                                            "src": "2851:2:2",
                                                            "type": "",
                                                            "value": "32"
                                                        }
                                                    ],
                                                    "functionName": {
                                                        "name": "add",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "2844:3:2"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "2844:10:2"
                                                },
                                                "variableNames": [
                                                    {
                                                        "name": "i",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "2839:1:2"
                                                    }
                                                ]
                                            }
                                        ]
                                    },
                                    "pre": {
                                        "nodeType": "YulBlock",
                                        "src": "2819:3:2",
                                        "statements": []
                                    },
                                    "src": "2815:113:2"
                                },
                                {
                                    "body": {
                                        "nodeType": "YulBlock",
                                        "src": "2962:76:2",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "arguments": [
                                                                {
                                                                    "name": "dst",
                                                                    "nodeType": "YulIdentifier",
                                                                    "src": "3012:3:2"
                                                                },
                                                                {
                                                                    "name": "length",
                                                                    "nodeType": "YulIdentifier",
                                                                    "src": "3017:6:2"
                                                                }
                                                            ],
                                                            "functionName": {
                                                                "name": "add",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "3008:3:2"
                                                            },
                                                            "nodeType": "YulFunctionCall",
                                                            "src": "3008:16:2"
                                                        },
                                                        {
                                                            "kind": "number",
                                                            "nodeType": "YulLiteral",
                                                            "src": "3026:1:2",
                                                            "type": "",
                                                            "value": "0"
                                                        }
                                                    ],
                                                    "functionName": {
                                                        "name": "mstore",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "3001:6:2"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "3001:27:2"
                                                },
                                                "nodeType": "YulExpressionStatement",
                                                "src": "3001:27:2"
                                            }
                                        ]
                                    },
                                    "condition": {
                                        "arguments": [
                                            {
                                                "name": "i",
                                                "nodeType": "YulIdentifier",
                                                "src": "2943:1:2"
                                            },
                                            {
                                                "name": "length",
                                                "nodeType": "YulIdentifier",
                                                "src": "2946:6:2"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "gt",
                                            "nodeType": "YulIdentifier",
                                            "src": "2940:2:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2940:13:2"
                                    },
                                    "nodeType": "YulIf",
                                    "src": "2937:2:2"
                                }
                            ]
                        },
                        "name": "copy_memory_to_memory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                            {
                                "name": "src",
                                "nodeType": "YulTypedName",
                                "src": "2768:3:2",
                                "type": ""
                            },
                            {
                                "name": "dst",
                                "nodeType": "YulTypedName",
                                "src": "2773:3:2",
                                "type": ""
                            },
                            {
                                "name": "length",
                                "nodeType": "YulTypedName",
                                "src": "2778:6:2",
                                "type": ""
                            }
                        ],
                        "src": "2737:307:2"
                    },
                    {
                        "body": {
                            "nodeType": "YulBlock",
                            "src": "3101:269:2",
                            "statements": [
                                {
                                    "nodeType": "YulAssignment",
                                    "src": "3111:22:2",
                                    "value": {
                                        "arguments": [
                                            {
                                                "name": "data",
                                                "nodeType": "YulIdentifier",
                                                "src": "3125:4:2"
                                            },
                                            {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "3131:1:2",
                                                "type": "",
                                                "value": "2"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "div",
                                            "nodeType": "YulIdentifier",
                                            "src": "3121:3:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3121:12:2"
                                    },
                                    "variableNames": [
                                        {
                                            "name": "length",
                                            "nodeType": "YulIdentifier",
                                            "src": "3111:6:2"
                                        }
                                    ]
                                },
                                {
                                    "nodeType": "YulVariableDeclaration",
                                    "src": "3142:38:2",
                                    "value": {
                                        "arguments": [
                                            {
                                                "name": "data",
                                                "nodeType": "YulIdentifier",
                                                "src": "3172:4:2"
                                            },
                                            {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "3178:1:2",
                                                "type": "",
                                                "value": "1"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "and",
                                            "nodeType": "YulIdentifier",
                                            "src": "3168:3:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3168:12:2"
                                    },
                                    "variables": [
                                        {
                                            "name": "outOfPlaceEncoding",
                                            "nodeType": "YulTypedName",
                                            "src": "3146:18:2",
                                            "type": ""
                                        }
                                    ]
                                },
                                {
                                    "body": {
                                        "nodeType": "YulBlock",
                                        "src": "3219:51:2",
                                        "statements": [
                                            {
                                                "nodeType": "YulAssignment",
                                                "src": "3233:27:2",
                                                "value": {
                                                    "arguments": [
                                                        {
                                                            "name": "length",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "3247:6:2"
                                                        },
                                                        {
                                                            "kind": "number",
                                                            "nodeType": "YulLiteral",
                                                            "src": "3255:4:2",
                                                            "type": "",
                                                            "value": "0x7f"
                                                        }
                                                    ],
                                                    "functionName": {
                                                        "name": "and",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "3243:3:2"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "3243:17:2"
                                                },
                                                "variableNames": [
                                                    {
                                                        "name": "length",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "3233:6:2"
                                                    }
                                                ]
                                            }
                                        ]
                                    },
                                    "condition": {
                                        "arguments": [
                                            {
                                                "name": "outOfPlaceEncoding",
                                                "nodeType": "YulIdentifier",
                                                "src": "3199:18:2"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "iszero",
                                            "nodeType": "YulIdentifier",
                                            "src": "3192:6:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3192:26:2"
                                    },
                                    "nodeType": "YulIf",
                                    "src": "3189:2:2"
                                },
                                {
                                    "body": {
                                        "nodeType": "YulBlock",
                                        "src": "3322:42:2",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "arguments": [],
                                                    "functionName": {
                                                        "name": "panic_error_0x22",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "3336:16:2"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "3336:18:2"
                                                },
                                                "nodeType": "YulExpressionStatement",
                                                "src": "3336:18:2"
                                            }
                                        ]
                                    },
                                    "condition": {
                                        "arguments": [
                                            {
                                                "name": "outOfPlaceEncoding",
                                                "nodeType": "YulIdentifier",
                                                "src": "3286:18:2"
                                            },
                                            {
                                                "arguments": [
                                                    {
                                                        "name": "length",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "3309:6:2"
                                                    },
                                                    {
                                                        "kind": "number",
                                                        "nodeType": "YulLiteral",
                                                        "src": "3317:2:2",
                                                        "type": "",
                                                        "value": "32"
                                                    }
                                                ],
                                                "functionName": {
                                                    "name": "lt",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "3306:2:2"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "3306:14:2"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "eq",
                                            "nodeType": "YulIdentifier",
                                            "src": "3283:2:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3283:38:2"
                                    },
                                    "nodeType": "YulIf",
                                    "src": "3280:2:2"
                                }
                            ]
                        },
                        "name": "extract_byte_array_length",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                            {
                                "name": "data",
                                "nodeType": "YulTypedName",
                                "src": "3085:4:2",
                                "type": ""
                            }
                        ],
                        "returnVariables": [
                            {
                                "name": "length",
                                "nodeType": "YulTypedName",
                                "src": "3094:6:2",
                                "type": ""
                            }
                        ],
                        "src": "3050:320:2"
                    },
                    {
                        "body": {
                            "nodeType": "YulBlock",
                            "src": "3404:152:2",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "3421:1:2",
                                                "type": "",
                                                "value": "0"
                                            },
                                            {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "3424:77:2",
                                                "type": "",
                                                "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "mstore",
                                            "nodeType": "YulIdentifier",
                                            "src": "3414:6:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3414:88:2"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3414:88:2"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "3518:1:2",
                                                "type": "",
                                                "value": "4"
                                            },
                                            {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "3521:4:2",
                                                "type": "",
                                                "value": "0x22"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "mstore",
                                            "nodeType": "YulIdentifier",
                                            "src": "3511:6:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3511:15:2"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3511:15:2"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "3542:1:2",
                                                "type": "",
                                                "value": "0"
                                            },
                                            {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "3545:4:2",
                                                "type": "",
                                                "value": "0x24"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "revert",
                                            "nodeType": "YulIdentifier",
                                            "src": "3535:6:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3535:15:2"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3535:15:2"
                                }
                            ]
                        },
                        "name": "panic_error_0x22",
                        "nodeType": "YulFunctionDefinition",
                        "src": "3376:180:2"
                    },
                    {
                        "body": {
                            "nodeType": "YulBlock",
                            "src": "3590:152:2",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "3607:1:2",
                                                "type": "",
                                                "value": "0"
                                            },
                                            {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "3610:77:2",
                                                "type": "",
                                                "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "mstore",
                                            "nodeType": "YulIdentifier",
                                            "src": "3600:6:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3600:88:2"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3600:88:2"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "3704:1:2",
                                                "type": "",
                                                "value": "4"
                                            },
                                            {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "3707:4:2",
                                                "type": "",
                                                "value": "0x41"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "mstore",
                                            "nodeType": "YulIdentifier",
                                            "src": "3697:6:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3697:15:2"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3697:15:2"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "3728:1:2",
                                                "type": "",
                                                "value": "0"
                                            },
                                            {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "3731:4:2",
                                                "type": "",
                                                "value": "0x24"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "revert",
                                            "nodeType": "YulIdentifier",
                                            "src": "3721:6:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3721:15:2"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3721:15:2"
                                }
                            ]
                        },
                        "name": "panic_error_0x41",
                        "nodeType": "YulFunctionDefinition",
                        "src": "3562:180:2"
                    },
                    {
                        "body": {
                            "nodeType": "YulBlock",
                            "src": "3791:79:2",
                            "statements": [
                                {
                                    "body": {
                                        "nodeType": "YulBlock",
                                        "src": "3848:16:2",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "kind": "number",
                                                            "nodeType": "YulLiteral",
                                                            "src": "3857:1:2",
                                                            "type": "",
                                                            "value": "0"
                                                        },
                                                        {
                                                            "kind": "number",
                                                            "nodeType": "YulLiteral",
                                                            "src": "3860:1:2",
                                                            "type": "",
                                                            "value": "0"
                                                        }
                                                    ],
                                                    "functionName": {
                                                        "name": "revert",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "3850:6:2"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "3850:12:2"
                                                },
                                                "nodeType": "YulExpressionStatement",
                                                "src": "3850:12:2"
                                            }
                                        ]
                                    },
                                    "condition": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "name": "value",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "3814:5:2"
                                                    },
                                                    {
                                                        "arguments": [
                                                            {
                                                                "name": "value",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "3839:5:2"
                                                            }
                                                        ],
                                                        "functionName": {
                                                            "name": "cleanup_t_uint256",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "3821:17:2"
                                                        },
                                                        "nodeType": "YulFunctionCall",
                                                        "src": "3821:24:2"
                                                    }
                                                ],
                                                "functionName": {
                                                    "name": "eq",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "3811:2:2"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "3811:35:2"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "iszero",
                                            "nodeType": "YulIdentifier",
                                            "src": "3804:6:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3804:43:2"
                                    },
                                    "nodeType": "YulIf",
                                    "src": "3801:2:2"
                                }
                            ]
                        },
                        "name": "validator_revert_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                            {
                                "name": "value",
                                "nodeType": "YulTypedName",
                                "src": "3784:5:2",
                                "type": ""
                            }
                        ],
                        "src": "3748:122:2"
                    },
                    {
                        "body": {
                            "nodeType": "YulBlock",
                            "src": "3917:77:2",
                            "statements": [
                                {
                                    "body": {
                                        "nodeType": "YulBlock",
                                        "src": "3972:16:2",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "kind": "number",
                                                            "nodeType": "YulLiteral",
                                                            "src": "3981:1:2",
                                                            "type": "",
                                                            "value": "0"
                                                        },
                                                        {
                                                            "kind": "number",
                                                            "nodeType": "YulLiteral",
                                                            "src": "3984:1:2",
                                                            "type": "",
                                                            "value": "0"
                                                        }
                                                    ],
                                                    "functionName": {
                                                        "name": "revert",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "3974:6:2"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "3974:12:2"
                                                },
                                                "nodeType": "YulExpressionStatement",
                                                "src": "3974:12:2"
                                            }
                                        ]
                                    },
                                    "condition": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "name": "value",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "3940:5:2"
                                                    },
                                                    {
                                                        "arguments": [
                                                            {
                                                                "name": "value",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "3963:5:2"
                                                            }
                                                        ],
                                                        "functionName": {
                                                            "name": "cleanup_t_uint8",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "3947:15:2"
                                                        },
                                                        "nodeType": "YulFunctionCall",
                                                        "src": "3947:22:2"
                                                    }
                                                ],
                                                "functionName": {
                                                    "name": "eq",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "3937:2:2"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "3937:33:2"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "iszero",
                                            "nodeType": "YulIdentifier",
                                            "src": "3930:6:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3930:41:2"
                                    },
                                    "nodeType": "YulIf",
                                    "src": "3927:2:2"
                                }
                            ]
                        },
                        "name": "validator_revert_t_uint8",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                            {
                                "name": "value",
                                "nodeType": "YulTypedName",
                                "src": "3910:5:2",
                                "type": ""
                            }
                        ],
                        "src": "3876:118:2"
                    }
                ]
            },
            "contents": "{\n\n    function abi_decode_available_length_t_string_memory_ptr_fromMemory(src, length, end) -> array {\n        array := allocateMemory(array_allocation_size_t_string_memory_ptr(length))\n        mstore(array, length)\n        let dst := add(array, 0x20)\n        if gt(add(src, length), end) { revert(0, 0) }\n        copy_memory_to_memory(src, dst, length)\n    }\n\n    // string\n    function abi_decode_t_string_memory_ptr_fromMemory(offset, end) -> array {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let length := mload(offset)\n        array := abi_decode_available_length_t_string_memory_ptr_fromMemory(add(offset, 0x20), length, end)\n    }\n\n    function abi_decode_t_uint256_fromMemory(offset, end) -> value {\n        value := mload(offset)\n        validator_revert_t_uint256(value)\n    }\n\n    function abi_decode_t_uint8_fromMemory(offset, end) -> value {\n        value := mload(offset)\n        validator_revert_t_uint8(value)\n    }\n\n    function abi_decode_tuple_t_uint256t_string_memory_ptrt_uint8t_string_memory_ptr_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3 {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_uint256_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := mload(add(headStart, 32))\n            if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n\n            value1 := abi_decode_t_string_memory_ptr_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 64\n\n            value2 := abi_decode_t_uint8_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := mload(add(headStart, 96))\n            if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n\n            value3 := abi_decode_t_string_memory_ptr_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function allocateMemory(size) -> memPtr {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, size)\n        // protect against overflow\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n\n    function array_allocation_size_t_string_memory_ptr(length) -> size {\n        // Make sure we can allocate memory without overflow\n        if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n\n        // round up\n        size := and(add(length, 0x1f), not(0x1f))\n\n        // add length slot\n        size := add(size, 0x20)\n\n    }\n\n    function cleanup_t_uint256(value) -> cleaned {\n        cleaned := value\n    }\n\n    function cleanup_t_uint8(value) -> cleaned {\n        cleaned := and(value, 0xff)\n    }\n\n    function copy_memory_to_memory(src, dst, length) {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        if gt(i, length)\n        {\n            // clear end\n            mstore(add(dst, length), 0)\n        }\n    }\n\n    function extract_byte_array_length(data) -> length {\n        length := div(data, 2)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) {\n            length := and(length, 0x7f)\n        }\n\n        if eq(outOfPlaceEncoding, lt(length, 32)) {\n            panic_error_0x22()\n        }\n    }\n\n    function panic_error_0x22() {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x22)\n        revert(0, 0x24)\n    }\n\n    function panic_error_0x41() {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n\n    function validator_revert_t_uint256(value) {\n        if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n    }\n\n    function validator_revert_t_uint8(value) {\n        if iszero(eq(value, cleanup_t_uint8(value))) { revert(0, 0) }\n    }\n\n}\n",
            "id": 2,
            "language": "Yul",
            "name": "#utility.yul"
        }
    ],
    "deployedGeneratedSources": [
        {
            "ast": {
                "nodeType": "YulBlock",
                "src": "0:7954:2",
                "statements": [
                    {
                        "body": {
                            "nodeType": "YulBlock",
                            "src": "59:87:2",
                            "statements": [
                                {
                                    "nodeType": "YulAssignment",
                                    "src": "69:29:2",
                                    "value": {
                                        "arguments": [
                                            {
                                                "name": "offset",
                                                "nodeType": "YulIdentifier",
                                                "src": "91:6:2"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "calldataload",
                                            "nodeType": "YulIdentifier",
                                            "src": "78:12:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "78:20:2"
                                    },
                                    "variableNames": [
                                        {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "69:5:2"
                                        }
                                    ]
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "name": "value",
                                                "nodeType": "YulIdentifier",
                                                "src": "134:5:2"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "validator_revert_t_address",
                                            "nodeType": "YulIdentifier",
                                            "src": "107:26:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "107:33:2"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "107:33:2"
                                }
                            ]
                        },
                        "name": "abi_decode_t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                            {
                                "name": "offset",
                                "nodeType": "YulTypedName",
                                "src": "37:6:2",
                                "type": ""
                            },
                            {
                                "name": "end",
                                "nodeType": "YulTypedName",
                                "src": "45:3:2",
                                "type": ""
                            }
                        ],
                        "returnVariables": [
                            {
                                "name": "value",
                                "nodeType": "YulTypedName",
                                "src": "53:5:2",
                                "type": ""
                            }
                        ],
                        "src": "7:139:2"
                    },
                    {
                        "body": {
                            "nodeType": "YulBlock",
                            "src": "204:87:2",
                            "statements": [
                                {
                                    "nodeType": "YulAssignment",
                                    "src": "214:29:2",
                                    "value": {
                                        "arguments": [
                                            {
                                                "name": "offset",
                                                "nodeType": "YulIdentifier",
                                                "src": "236:6:2"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "calldataload",
                                            "nodeType": "YulIdentifier",
                                            "src": "223:12:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "223:20:2"
                                    },
                                    "variableNames": [
                                        {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "214:5:2"
                                        }
                                    ]
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "name": "value",
                                                "nodeType": "YulIdentifier",
                                                "src": "279:5:2"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "validator_revert_t_uint256",
                                            "nodeType": "YulIdentifier",
                                            "src": "252:26:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "252:33:2"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "252:33:2"
                                }
                            ]
                        },
                        "name": "abi_decode_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                            {
                                "name": "offset",
                                "nodeType": "YulTypedName",
                                "src": "182:6:2",
                                "type": ""
                            },
                            {
                                "name": "end",
                                "nodeType": "YulTypedName",
                                "src": "190:3:2",
                                "type": ""
                            }
                        ],
                        "returnVariables": [
                            {
                                "name": "value",
                                "nodeType": "YulTypedName",
                                "src": "198:5:2",
                                "type": ""
                            }
                        ],
                        "src": "152:139:2"
                    },
                    {
                        "body": {
                            "nodeType": "YulBlock",
                            "src": "363:196:2",
                            "statements": [
                                {
                                    "body": {
                                        "nodeType": "YulBlock",
                                        "src": "409:16:2",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "kind": "number",
                                                            "nodeType": "YulLiteral",
                                                            "src": "418:1:2",
                                                            "type": "",
                                                            "value": "0"
                                                        },
                                                        {
                                                            "kind": "number",
                                                            "nodeType": "YulLiteral",
                                                            "src": "421:1:2",
                                                            "type": "",
                                                            "value": "0"
                                                        }
                                                    ],
                                                    "functionName": {
                                                        "name": "revert",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "411:6:2"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "411:12:2"
                                                },
                                                "nodeType": "YulExpressionStatement",
                                                "src": "411:12:2"
                                            }
                                        ]
                                    },
                                    "condition": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "name": "dataEnd",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "384:7:2"
                                                    },
                                                    {
                                                        "name": "headStart",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "393:9:2"
                                                    }
                                                ],
                                                "functionName": {
                                                    "name": "sub",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "380:3:2"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "380:23:2"
                                            },
                                            {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "405:2:2",
                                                "type": "",
                                                "value": "32"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "slt",
                                            "nodeType": "YulIdentifier",
                                            "src": "376:3:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "376:32:2"
                                    },
                                    "nodeType": "YulIf",
                                    "src": "373:2:2"
                                },
                                {
                                    "nodeType": "YulBlock",
                                    "src": "435:117:2",
                                    "statements": [
                                        {
                                            "nodeType": "YulVariableDeclaration",
                                            "src": "450:15:2",
                                            "value": {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "464:1:2",
                                                "type": "",
                                                "value": "0"
                                            },
                                            "variables": [
                                                {
                                                    "name": "offset",
                                                    "nodeType": "YulTypedName",
                                                    "src": "454:6:2",
                                                    "type": ""
                                                }
                                            ]
                                        },
                                        {
                                            "nodeType": "YulAssignment",
                                            "src": "479:63:2",
                                            "value": {
                                                "arguments": [
                                                    {
                                                        "arguments": [
                                                            {
                                                                "name": "headStart",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "514:9:2"
                                                            },
                                                            {
                                                                "name": "offset",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "525:6:2"
                                                            }
                                                        ],
                                                        "functionName": {
                                                            "name": "add",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "510:3:2"
                                                        },
                                                        "nodeType": "YulFunctionCall",
                                                        "src": "510:22:2"
                                                    },
                                                    {
                                                        "name": "dataEnd",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "534:7:2"
                                                    }
                                                ],
                                                "functionName": {
                                                    "name": "abi_decode_t_address",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "489:20:2"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "489:53:2"
                                            },
                                            "variableNames": [
                                                {
                                                    "name": "value0",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "479:6:2"
                                                }
                                            ]
                                        }
                                    ]
                                }
                            ]
                        },
                        "name": "abi_decode_tuple_t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                            {
                                "name": "headStart",
                                "nodeType": "YulTypedName",
                                "src": "333:9:2",
                                "type": ""
                            },
                            {
                                "name": "dataEnd",
                                "nodeType": "YulTypedName",
                                "src": "344:7:2",
                                "type": ""
                            }
                        ],
                        "returnVariables": [
                            {
                                "name": "value0",
                                "nodeType": "YulTypedName",
                                "src": "356:6:2",
                                "type": ""
                            }
                        ],
                        "src": "297:262:2"
                    },
                    {
                        "body": {
                            "nodeType": "YulBlock",
                            "src": "648:324:2",
                            "statements": [
                                {
                                    "body": {
                                        "nodeType": "YulBlock",
                                        "src": "694:16:2",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "kind": "number",
                                                            "nodeType": "YulLiteral",
                                                            "src": "703:1:2",
                                                            "type": "",
                                                            "value": "0"
                                                        },
                                                        {
                                                            "kind": "number",
                                                            "nodeType": "YulLiteral",
                                                            "src": "706:1:2",
                                                            "type": "",
                                                            "value": "0"
                                                        }
                                                    ],
                                                    "functionName": {
                                                        "name": "revert",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "696:6:2"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "696:12:2"
                                                },
                                                "nodeType": "YulExpressionStatement",
                                                "src": "696:12:2"
                                            }
                                        ]
                                    },
                                    "condition": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "name": "dataEnd",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "669:7:2"
                                                    },
                                                    {
                                                        "name": "headStart",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "678:9:2"
                                                    }
                                                ],
                                                "functionName": {
                                                    "name": "sub",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "665:3:2"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "665:23:2"
                                            },
                                            {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "690:2:2",
                                                "type": "",
                                                "value": "64"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "slt",
                                            "nodeType": "YulIdentifier",
                                            "src": "661:3:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "661:32:2"
                                    },
                                    "nodeType": "YulIf",
                                    "src": "658:2:2"
                                },
                                {
                                    "nodeType": "YulBlock",
                                    "src": "720:117:2",
                                    "statements": [
                                        {
                                            "nodeType": "YulVariableDeclaration",
                                            "src": "735:15:2",
                                            "value": {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "749:1:2",
                                                "type": "",
                                                "value": "0"
                                            },
                                            "variables": [
                                                {
                                                    "name": "offset",
                                                    "nodeType": "YulTypedName",
                                                    "src": "739:6:2",
                                                    "type": ""
                                                }
                                            ]
                                        },
                                        {
                                            "nodeType": "YulAssignment",
                                            "src": "764:63:2",
                                            "value": {
                                                "arguments": [
                                                    {
                                                        "arguments": [
                                                            {
                                                                "name": "headStart",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "799:9:2"
                                                            },
                                                            {
                                                                "name": "offset",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "810:6:2"
                                                            }
                                                        ],
                                                        "functionName": {
                                                            "name": "add",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "795:3:2"
                                                        },
                                                        "nodeType": "YulFunctionCall",
                                                        "src": "795:22:2"
                                                    },
                                                    {
                                                        "name": "dataEnd",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "819:7:2"
                                                    }
                                                ],
                                                "functionName": {
                                                    "name": "abi_decode_t_address",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "774:20:2"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "774:53:2"
                                            },
                                            "variableNames": [
                                                {
                                                    "name": "value0",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "764:6:2"
                                                }
                                            ]
                                        }
                                    ]
                                },
                                {
                                    "nodeType": "YulBlock",
                                    "src": "847:118:2",
                                    "statements": [
                                        {
                                            "nodeType": "YulVariableDeclaration",
                                            "src": "862:16:2",
                                            "value": {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "876:2:2",
                                                "type": "",
                                                "value": "32"
                                            },
                                            "variables": [
                                                {
                                                    "name": "offset",
                                                    "nodeType": "YulTypedName",
                                                    "src": "866:6:2",
                                                    "type": ""
                                                }
                                            ]
                                        },
                                        {
                                            "nodeType": "YulAssignment",
                                            "src": "892:63:2",
                                            "value": {
                                                "arguments": [
                                                    {
                                                        "arguments": [
                                                            {
                                                                "name": "headStart",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "927:9:2"
                                                            },
                                                            {
                                                                "name": "offset",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "938:6:2"
                                                            }
                                                        ],
                                                        "functionName": {
                                                            "name": "add",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "923:3:2"
                                                        },
                                                        "nodeType": "YulFunctionCall",
                                                        "src": "923:22:2"
                                                    },
                                                    {
                                                        "name": "dataEnd",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "947:7:2"
                                                    }
                                                ],
                                                "functionName": {
                                                    "name": "abi_decode_t_address",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "902:20:2"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "902:53:2"
                                            },
                                            "variableNames": [
                                                {
                                                    "name": "value1",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "892:6:2"
                                                }
                                            ]
                                        }
                                    ]
                                }
                            ]
                        },
                        "name": "abi_decode_tuple_t_addresst_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                            {
                                "name": "headStart",
                                "nodeType": "YulTypedName",
                                "src": "610:9:2",
                                "type": ""
                            },
                            {
                                "name": "dataEnd",
                                "nodeType": "YulTypedName",
                                "src": "621:7:2",
                                "type": ""
                            }
                        ],
                        "returnVariables": [
                            {
                                "name": "value0",
                                "nodeType": "YulTypedName",
                                "src": "633:6:2",
                                "type": ""
                            },
                            {
                                "name": "value1",
                                "nodeType": "YulTypedName",
                                "src": "641:6:2",
                                "type": ""
                            }
                        ],
                        "src": "565:407:2"
                    },
                    {
                        "body": {
                            "nodeType": "YulBlock",
                            "src": "1078:452:2",
                            "statements": [
                                {
                                    "body": {
                                        "nodeType": "YulBlock",
                                        "src": "1124:16:2",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "kind": "number",
                                                            "nodeType": "YulLiteral",
                                                            "src": "1133:1:2",
                                                            "type": "",
                                                            "value": "0"
                                                        },
                                                        {
                                                            "kind": "number",
                                                            "nodeType": "YulLiteral",
                                                            "src": "1136:1:2",
                                                            "type": "",
                                                            "value": "0"
                                                        }
                                                    ],
                                                    "functionName": {
                                                        "name": "revert",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "1126:6:2"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "1126:12:2"
                                                },
                                                "nodeType": "YulExpressionStatement",
                                                "src": "1126:12:2"
                                            }
                                        ]
                                    },
                                    "condition": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "name": "dataEnd",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "1099:7:2"
                                                    },
                                                    {
                                                        "name": "headStart",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "1108:9:2"
                                                    }
                                                ],
                                                "functionName": {
                                                    "name": "sub",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "1095:3:2"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "1095:23:2"
                                            },
                                            {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "1120:2:2",
                                                "type": "",
                                                "value": "96"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "slt",
                                            "nodeType": "YulIdentifier",
                                            "src": "1091:3:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1091:32:2"
                                    },
                                    "nodeType": "YulIf",
                                    "src": "1088:2:2"
                                },
                                {
                                    "nodeType": "YulBlock",
                                    "src": "1150:117:2",
                                    "statements": [
                                        {
                                            "nodeType": "YulVariableDeclaration",
                                            "src": "1165:15:2",
                                            "value": {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "1179:1:2",
                                                "type": "",
                                                "value": "0"
                                            },
                                            "variables": [
                                                {
                                                    "name": "offset",
                                                    "nodeType": "YulTypedName",
                                                    "src": "1169:6:2",
                                                    "type": ""
                                                }
                                            ]
                                        },
                                        {
                                            "nodeType": "YulAssignment",
                                            "src": "1194:63:2",
                                            "value": {
                                                "arguments": [
                                                    {
                                                        "arguments": [
                                                            {
                                                                "name": "headStart",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "1229:9:2"
                                                            },
                                                            {
                                                                "name": "offset",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "1240:6:2"
                                                            }
                                                        ],
                                                        "functionName": {
                                                            "name": "add",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "1225:3:2"
                                                        },
                                                        "nodeType": "YulFunctionCall",
                                                        "src": "1225:22:2"
                                                    },
                                                    {
                                                        "name": "dataEnd",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "1249:7:2"
                                                    }
                                                ],
                                                "functionName": {
                                                    "name": "abi_decode_t_address",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "1204:20:2"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "1204:53:2"
                                            },
                                            "variableNames": [
                                                {
                                                    "name": "value0",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "1194:6:2"
                                                }
                                            ]
                                        }
                                    ]
                                },
                                {
                                    "nodeType": "YulBlock",
                                    "src": "1277:118:2",
                                    "statements": [
                                        {
                                            "nodeType": "YulVariableDeclaration",
                                            "src": "1292:16:2",
                                            "value": {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "1306:2:2",
                                                "type": "",
                                                "value": "32"
                                            },
                                            "variables": [
                                                {
                                                    "name": "offset",
                                                    "nodeType": "YulTypedName",
                                                    "src": "1296:6:2",
                                                    "type": ""
                                                }
                                            ]
                                        },
                                        {
                                            "nodeType": "YulAssignment",
                                            "src": "1322:63:2",
                                            "value": {
                                                "arguments": [
                                                    {
                                                        "arguments": [
                                                            {
                                                                "name": "headStart",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "1357:9:2"
                                                            },
                                                            {
                                                                "name": "offset",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "1368:6:2"
                                                            }
                                                        ],
                                                        "functionName": {
                                                            "name": "add",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "1353:3:2"
                                                        },
                                                        "nodeType": "YulFunctionCall",
                                                        "src": "1353:22:2"
                                                    },
                                                    {
                                                        "name": "dataEnd",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "1377:7:2"
                                                    }
                                                ],
                                                "functionName": {
                                                    "name": "abi_decode_t_address",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "1332:20:2"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "1332:53:2"
                                            },
                                            "variableNames": [
                                                {
                                                    "name": "value1",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "1322:6:2"
                                                }
                                            ]
                                        }
                                    ]
                                },
                                {
                                    "nodeType": "YulBlock",
                                    "src": "1405:118:2",
                                    "statements": [
                                        {
                                            "nodeType": "YulVariableDeclaration",
                                            "src": "1420:16:2",
                                            "value": {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "1434:2:2",
                                                "type": "",
                                                "value": "64"
                                            },
                                            "variables": [
                                                {
                                                    "name": "offset",
                                                    "nodeType": "YulTypedName",
                                                    "src": "1424:6:2",
                                                    "type": ""
                                                }
                                            ]
                                        },
                                        {
                                            "nodeType": "YulAssignment",
                                            "src": "1450:63:2",
                                            "value": {
                                                "arguments": [
                                                    {
                                                        "arguments": [
                                                            {
                                                                "name": "headStart",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "1485:9:2"
                                                            },
                                                            {
                                                                "name": "offset",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "1496:6:2"
                                                            }
                                                        ],
                                                        "functionName": {
                                                            "name": "add",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "1481:3:2"
                                                        },
                                                        "nodeType": "YulFunctionCall",
                                                        "src": "1481:22:2"
                                                    },
                                                    {
                                                        "name": "dataEnd",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "1505:7:2"
                                                    }
                                                ],
                                                "functionName": {
                                                    "name": "abi_decode_t_uint256",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "1460:20:2"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "1460:53:2"
                                            },
                                            "variableNames": [
                                                {
                                                    "name": "value2",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "1450:6:2"
                                                }
                                            ]
                                        }
                                    ]
                                }
                            ]
                        },
                        "name": "abi_decode_tuple_t_addresst_addresst_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                            {
                                "name": "headStart",
                                "nodeType": "YulTypedName",
                                "src": "1032:9:2",
                                "type": ""
                            },
                            {
                                "name": "dataEnd",
                                "nodeType": "YulTypedName",
                                "src": "1043:7:2",
                                "type": ""
                            }
                        ],
                        "returnVariables": [
                            {
                                "name": "value0",
                                "nodeType": "YulTypedName",
                                "src": "1055:6:2",
                                "type": ""
                            },
                            {
                                "name": "value1",
                                "nodeType": "YulTypedName",
                                "src": "1063:6:2",
                                "type": ""
                            },
                            {
                                "name": "value2",
                                "nodeType": "YulTypedName",
                                "src": "1071:6:2",
                                "type": ""
                            }
                        ],
                        "src": "978:552:2"
                    },
                    {
                        "body": {
                            "nodeType": "YulBlock",
                            "src": "1619:324:2",
                            "statements": [
                                {
                                    "body": {
                                        "nodeType": "YulBlock",
                                        "src": "1665:16:2",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "kind": "number",
                                                            "nodeType": "YulLiteral",
                                                            "src": "1674:1:2",
                                                            "type": "",
                                                            "value": "0"
                                                        },
                                                        {
                                                            "kind": "number",
                                                            "nodeType": "YulLiteral",
                                                            "src": "1677:1:2",
                                                            "type": "",
                                                            "value": "0"
                                                        }
                                                    ],
                                                    "functionName": {
                                                        "name": "revert",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "1667:6:2"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "1667:12:2"
                                                },
                                                "nodeType": "YulExpressionStatement",
                                                "src": "1667:12:2"
                                            }
                                        ]
                                    },
                                    "condition": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "name": "dataEnd",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "1640:7:2"
                                                    },
                                                    {
                                                        "name": "headStart",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "1649:9:2"
                                                    }
                                                ],
                                                "functionName": {
                                                    "name": "sub",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "1636:3:2"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "1636:23:2"
                                            },
                                            {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "1661:2:2",
                                                "type": "",
                                                "value": "64"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "slt",
                                            "nodeType": "YulIdentifier",
                                            "src": "1632:3:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1632:32:2"
                                    },
                                    "nodeType": "YulIf",
                                    "src": "1629:2:2"
                                },
                                {
                                    "nodeType": "YulBlock",
                                    "src": "1691:117:2",
                                    "statements": [
                                        {
                                            "nodeType": "YulVariableDeclaration",
                                            "src": "1706:15:2",
                                            "value": {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "1720:1:2",
                                                "type": "",
                                                "value": "0"
                                            },
                                            "variables": [
                                                {
                                                    "name": "offset",
                                                    "nodeType": "YulTypedName",
                                                    "src": "1710:6:2",
                                                    "type": ""
                                                }
                                            ]
                                        },
                                        {
                                            "nodeType": "YulAssignment",
                                            "src": "1735:63:2",
                                            "value": {
                                                "arguments": [
                                                    {
                                                        "arguments": [
                                                            {
                                                                "name": "headStart",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "1770:9:2"
                                                            },
                                                            {
                                                                "name": "offset",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "1781:6:2"
                                                            }
                                                        ],
                                                        "functionName": {
                                                            "name": "add",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "1766:3:2"
                                                        },
                                                        "nodeType": "YulFunctionCall",
                                                        "src": "1766:22:2"
                                                    },
                                                    {
                                                        "name": "dataEnd",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "1790:7:2"
                                                    }
                                                ],
                                                "functionName": {
                                                    "name": "abi_decode_t_address",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "1745:20:2"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "1745:53:2"
                                            },
                                            "variableNames": [
                                                {
                                                    "name": "value0",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "1735:6:2"
                                                }
                                            ]
                                        }
                                    ]
                                },
                                {
                                    "nodeType": "YulBlock",
                                    "src": "1818:118:2",
                                    "statements": [
                                        {
                                            "nodeType": "YulVariableDeclaration",
                                            "src": "1833:16:2",
                                            "value": {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "1847:2:2",
                                                "type": "",
                                                "value": "32"
                                            },
                                            "variables": [
                                                {
                                                    "name": "offset",
                                                    "nodeType": "YulTypedName",
                                                    "src": "1837:6:2",
                                                    "type": ""
                                                }
                                            ]
                                        },
                                        {
                                            "nodeType": "YulAssignment",
                                            "src": "1863:63:2",
                                            "value": {
                                                "arguments": [
                                                    {
                                                        "arguments": [
                                                            {
                                                                "name": "headStart",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "1898:9:2"
                                                            },
                                                            {
                                                                "name": "offset",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "1909:6:2"
                                                            }
                                                        ],
                                                        "functionName": {
                                                            "name": "add",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "1894:3:2"
                                                        },
                                                        "nodeType": "YulFunctionCall",
                                                        "src": "1894:22:2"
                                                    },
                                                    {
                                                        "name": "dataEnd",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "1918:7:2"
                                                    }
                                                ],
                                                "functionName": {
                                                    "name": "abi_decode_t_uint256",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "1873:20:2"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "1873:53:2"
                                            },
                                            "variableNames": [
                                                {
                                                    "name": "value1",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "1863:6:2"
                                                }
                                            ]
                                        }
                                    ]
                                }
                            ]
                        },
                        "name": "abi_decode_tuple_t_addresst_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                            {
                                "name": "headStart",
                                "nodeType": "YulTypedName",
                                "src": "1581:9:2",
                                "type": ""
                            },
                            {
                                "name": "dataEnd",
                                "nodeType": "YulTypedName",
                                "src": "1592:7:2",
                                "type": ""
                            }
                        ],
                        "returnVariables": [
                            {
                                "name": "value0",
                                "nodeType": "YulTypedName",
                                "src": "1604:6:2",
                                "type": ""
                            },
                            {
                                "name": "value1",
                                "nodeType": "YulTypedName",
                                "src": "1612:6:2",
                                "type": ""
                            }
                        ],
                        "src": "1536:407:2"
                    },
                    {
                        "body": {
                            "nodeType": "YulBlock",
                            "src": "2008:50:2",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "name": "pos",
                                                "nodeType": "YulIdentifier",
                                                "src": "2025:3:2"
                                            },
                                            {
                                                "arguments": [
                                                    {
                                                        "name": "value",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "2045:5:2"
                                                    }
                                                ],
                                                "functionName": {
                                                    "name": "cleanup_t_bool",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "2030:14:2"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "2030:21:2"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "mstore",
                                            "nodeType": "YulIdentifier",
                                            "src": "2018:6:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2018:34:2"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2018:34:2"
                                }
                            ]
                        },
                        "name": "abi_encode_t_bool_to_t_bool_fromStack",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                            {
                                "name": "value",
                                "nodeType": "YulTypedName",
                                "src": "1996:5:2",
                                "type": ""
                            },
                            {
                                "name": "pos",
                                "nodeType": "YulTypedName",
                                "src": "2003:3:2",
                                "type": ""
                            }
                        ],
                        "src": "1949:109:2"
                    },
                    {
                        "body": {
                            "nodeType": "YulBlock",
                            "src": "2156:272:2",
                            "statements": [
                                {
                                    "nodeType": "YulVariableDeclaration",
                                    "src": "2166:53:2",
                                    "value": {
                                        "arguments": [
                                            {
                                                "name": "value",
                                                "nodeType": "YulIdentifier",
                                                "src": "2213:5:2"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "array_length_t_string_memory_ptr",
                                            "nodeType": "YulIdentifier",
                                            "src": "2180:32:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2180:39:2"
                                    },
                                    "variables": [
                                        {
                                            "name": "length",
                                            "nodeType": "YulTypedName",
                                            "src": "2170:6:2",
                                            "type": ""
                                        }
                                    ]
                                },
                                {
                                    "nodeType": "YulAssignment",
                                    "src": "2228:78:2",
                                    "value": {
                                        "arguments": [
                                            {
                                                "name": "pos",
                                                "nodeType": "YulIdentifier",
                                                "src": "2294:3:2"
                                            },
                                            {
                                                "name": "length",
                                                "nodeType": "YulIdentifier",
                                                "src": "2299:6:2"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
                                            "nodeType": "YulIdentifier",
                                            "src": "2235:58:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2235:71:2"
                                    },
                                    "variableNames": [
                                        {
                                            "name": "pos",
                                            "nodeType": "YulIdentifier",
                                            "src": "2228:3:2"
                                        }
                                    ]
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "name": "value",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "2341:5:2"
                                                    },
                                                    {
                                                        "kind": "number",
                                                        "nodeType": "YulLiteral",
                                                        "src": "2348:4:2",
                                                        "type": "",
                                                        "value": "0x20"
                                                    }
                                                ],
                                                "functionName": {
                                                    "name": "add",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "2337:3:2"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "2337:16:2"
                                            },
                                            {
                                                "name": "pos",
                                                "nodeType": "YulIdentifier",
                                                "src": "2355:3:2"
                                            },
                                            {
                                                "name": "length",
                                                "nodeType": "YulIdentifier",
                                                "src": "2360:6:2"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "copy_memory_to_memory",
                                            "nodeType": "YulIdentifier",
                                            "src": "2315:21:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2315:52:2"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2315:52:2"
                                },
                                {
                                    "nodeType": "YulAssignment",
                                    "src": "2376:46:2",
                                    "value": {
                                        "arguments": [
                                            {
                                                "name": "pos",
                                                "nodeType": "YulIdentifier",
                                                "src": "2387:3:2"
                                            },
                                            {
                                                "arguments": [
                                                    {
                                                        "name": "length",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "2414:6:2"
                                                    }
                                                ],
                                                "functionName": {
                                                    "name": "round_up_to_mul_of_32",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "2392:21:2"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "2392:29:2"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "2383:3:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2383:39:2"
                                    },
                                    "variableNames": [
                                        {
                                            "name": "end",
                                            "nodeType": "YulIdentifier",
                                            "src": "2376:3:2"
                                        }
                                    ]
                                }
                            ]
                        },
                        "name": "abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                            {
                                "name": "value",
                                "nodeType": "YulTypedName",
                                "src": "2137:5:2",
                                "type": ""
                            },
                            {
                                "name": "pos",
                                "nodeType": "YulTypedName",
                                "src": "2144:3:2",
                                "type": ""
                            }
                        ],
                        "returnVariables": [
                            {
                                "name": "end",
                                "nodeType": "YulTypedName",
                                "src": "2152:3:2",
                                "type": ""
                            }
                        ],
                        "src": "2064:364:2"
                    },
                    {
                        "body": {
                            "nodeType": "YulBlock",
                            "src": "2580:233:2",
                            "statements": [
                                {
                                    "nodeType": "YulAssignment",
                                    "src": "2590:74:2",
                                    "value": {
                                        "arguments": [
                                            {
                                                "name": "pos",
                                                "nodeType": "YulIdentifier",
                                                "src": "2656:3:2"
                                            },
                                            {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "2661:2:2",
                                                "type": "",
                                                "value": "47"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
                                            "nodeType": "YulIdentifier",
                                            "src": "2597:58:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2597:67:2"
                                    },
                                    "variableNames": [
                                        {
                                            "name": "pos",
                                            "nodeType": "YulIdentifier",
                                            "src": "2590:3:2"
                                        }
                                    ]
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "name": "pos",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "2685:3:2"
                                                    },
                                                    {
                                                        "kind": "number",
                                                        "nodeType": "YulLiteral",
                                                        "src": "2690:1:2",
                                                        "type": "",
                                                        "value": "0"
                                                    }
                                                ],
                                                "functionName": {
                                                    "name": "add",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "2681:3:2"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "2681:11:2"
                                            },
                                            {
                                                "kind": "string",
                                                "nodeType": "YulLiteral",
                                                "src": "2694:34:2",
                                                "type": "",
                                                "value": "token balance is lower than the "
                                            }
                                        ],
                                        "functionName": {
                                            "name": "mstore",
                                            "nodeType": "YulIdentifier",
                                            "src": "2674:6:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2674:55:2"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2674:55:2"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "name": "pos",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "2750:3:2"
                                                    },
                                                    {
                                                        "kind": "number",
                                                        "nodeType": "YulLiteral",
                                                        "src": "2755:2:2",
                                                        "type": "",
                                                        "value": "32"
                                                    }
                                                ],
                                                "functionName": {
                                                    "name": "add",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "2746:3:2"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "2746:12:2"
                                            },
                                            {
                                                "kind": "string",
                                                "nodeType": "YulLiteral",
                                                "src": "2760:17:2",
                                                "type": "",
                                                "value": "value requested"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "mstore",
                                            "nodeType": "YulIdentifier",
                                            "src": "2739:6:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2739:39:2"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2739:39:2"
                                },
                                {
                                    "nodeType": "YulAssignment",
                                    "src": "2788:19:2",
                                    "value": {
                                        "arguments": [
                                            {
                                                "name": "pos",
                                                "nodeType": "YulIdentifier",
                                                "src": "2799:3:2"
                                            },
                                            {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "2804:2:2",
                                                "type": "",
                                                "value": "64"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "2795:3:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2795:12:2"
                                    },
                                    "variableNames": [
                                        {
                                            "name": "end",
                                            "nodeType": "YulIdentifier",
                                            "src": "2788:3:2"
                                        }
                                    ]
                                }
                            ]
                        },
                        "name": "abi_encode_t_stringliteral_1585781bcea687a18f97b1a94f6f8e11a9041130e156fda9ccf03b1c68f06452_to_t_string_memory_ptr_fromStack",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                            {
                                "name": "pos",
                                "nodeType": "YulTypedName",
                                "src": "2568:3:2",
                                "type": ""
                            }
                        ],
                        "returnVariables": [
                            {
                                "name": "end",
                                "nodeType": "YulTypedName",
                                "src": "2576:3:2",
                                "type": ""
                            }
                        ],
                        "src": "2434:379:2"
                    },
                    {
                        "body": {
                            "nodeType": "YulBlock",
                            "src": "2965:243:2",
                            "statements": [
                                {
                                    "nodeType": "YulAssignment",
                                    "src": "2975:74:2",
                                    "value": {
                                        "arguments": [
                                            {
                                                "name": "pos",
                                                "nodeType": "YulIdentifier",
                                                "src": "3041:3:2"
                                            },
                                            {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "3046:2:2",
                                                "type": "",
                                                "value": "57"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
                                            "nodeType": "YulIdentifier",
                                            "src": "2982:58:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2982:67:2"
                                    },
                                    "variableNames": [
                                        {
                                            "name": "pos",
                                            "nodeType": "YulIdentifier",
                                            "src": "2975:3:2"
                                        }
                                    ]
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "name": "pos",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "3070:3:2"
                                                    },
                                                    {
                                                        "kind": "number",
                                                        "nodeType": "YulLiteral",
                                                        "src": "3075:1:2",
                                                        "type": "",
                                                        "value": "0"
                                                    }
                                                ],
                                                "functionName": {
                                                    "name": "add",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "3066:3:2"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "3066:11:2"
                                            },
                                            {
                                                "kind": "string",
                                                "nodeType": "YulLiteral",
                                                "src": "3079:34:2",
                                                "type": "",
                                                "value": "token balance or allowance is lo"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "mstore",
                                            "nodeType": "YulIdentifier",
                                            "src": "3059:6:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3059:55:2"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3059:55:2"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "name": "pos",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "3135:3:2"
                                                    },
                                                    {
                                                        "kind": "number",
                                                        "nodeType": "YulLiteral",
                                                        "src": "3140:2:2",
                                                        "type": "",
                                                        "value": "32"
                                                    }
                                                ],
                                                "functionName": {
                                                    "name": "add",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "3131:3:2"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "3131:12:2"
                                            },
                                            {
                                                "kind": "string",
                                                "nodeType": "YulLiteral",
                                                "src": "3145:27:2",
                                                "type": "",
                                                "value": "wer than amount requested"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "mstore",
                                            "nodeType": "YulIdentifier",
                                            "src": "3124:6:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3124:49:2"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3124:49:2"
                                },
                                {
                                    "nodeType": "YulAssignment",
                                    "src": "3183:19:2",
                                    "value": {
                                        "arguments": [
                                            {
                                                "name": "pos",
                                                "nodeType": "YulIdentifier",
                                                "src": "3194:3:2"
                                            },
                                            {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "3199:2:2",
                                                "type": "",
                                                "value": "64"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "3190:3:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3190:12:2"
                                    },
                                    "variableNames": [
                                        {
                                            "name": "end",
                                            "nodeType": "YulIdentifier",
                                            "src": "3183:3:2"
                                        }
                                    ]
                                }
                            ]
                        },
                        "name": "abi_encode_t_stringliteral_d8d39484df698fe59d78d2031639e610e556bf68a0e1f7af4e968ff763a96c6a_to_t_string_memory_ptr_fromStack",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                            {
                                "name": "pos",
                                "nodeType": "YulTypedName",
                                "src": "2953:3:2",
                                "type": ""
                            }
                        ],
                        "returnVariables": [
                            {
                                "name": "end",
                                "nodeType": "YulTypedName",
                                "src": "2961:3:2",
                                "type": ""
                            }
                        ],
                        "src": "2819:389:2"
                    },
                    {
                        "body": {
                            "nodeType": "YulBlock",
                            "src": "3279:53:2",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "name": "pos",
                                                "nodeType": "YulIdentifier",
                                                "src": "3296:3:2"
                                            },
                                            {
                                                "arguments": [
                                                    {
                                                        "name": "value",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "3319:5:2"
                                                    }
                                                ],
                                                "functionName": {
                                                    "name": "cleanup_t_uint256",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "3301:17:2"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "3301:24:2"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "mstore",
                                            "nodeType": "YulIdentifier",
                                            "src": "3289:6:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3289:37:2"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3289:37:2"
                                }
                            ]
                        },
                        "name": "abi_encode_t_uint256_to_t_uint256_fromStack",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                            {
                                "name": "value",
                                "nodeType": "YulTypedName",
                                "src": "3267:5:2",
                                "type": ""
                            },
                            {
                                "name": "pos",
                                "nodeType": "YulTypedName",
                                "src": "3274:3:2",
                                "type": ""
                            }
                        ],
                        "src": "3214:118:2"
                    },
                    {
                        "body": {
                            "nodeType": "YulBlock",
                            "src": "3399:51:2",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "name": "pos",
                                                "nodeType": "YulIdentifier",
                                                "src": "3416:3:2"
                                            },
                                            {
                                                "arguments": [
                                                    {
                                                        "name": "value",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "3437:5:2"
                                                    }
                                                ],
                                                "functionName": {
                                                    "name": "cleanup_t_uint8",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "3421:15:2"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "3421:22:2"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "mstore",
                                            "nodeType": "YulIdentifier",
                                            "src": "3409:6:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3409:35:2"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3409:35:2"
                                }
                            ]
                        },
                        "name": "abi_encode_t_uint8_to_t_uint8_fromStack",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                            {
                                "name": "value",
                                "nodeType": "YulTypedName",
                                "src": "3387:5:2",
                                "type": ""
                            },
                            {
                                "name": "pos",
                                "nodeType": "YulTypedName",
                                "src": "3394:3:2",
                                "type": ""
                            }
                        ],
                        "src": "3338:112:2"
                    },
                    {
                        "body": {
                            "nodeType": "YulBlock",
                            "src": "3548:118:2",
                            "statements": [
                                {
                                    "nodeType": "YulAssignment",
                                    "src": "3558:26:2",
                                    "value": {
                                        "arguments": [
                                            {
                                                "name": "headStart",
                                                "nodeType": "YulIdentifier",
                                                "src": "3570:9:2"
                                            },
                                            {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "3581:2:2",
                                                "type": "",
                                                "value": "32"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "3566:3:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3566:18:2"
                                    },
                                    "variableNames": [
                                        {
                                            "name": "tail",
                                            "nodeType": "YulIdentifier",
                                            "src": "3558:4:2"
                                        }
                                    ]
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "name": "value0",
                                                "nodeType": "YulIdentifier",
                                                "src": "3632:6:2"
                                            },
                                            {
                                                "arguments": [
                                                    {
                                                        "name": "headStart",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "3645:9:2"
                                                    },
                                                    {
                                                        "kind": "number",
                                                        "nodeType": "YulLiteral",
                                                        "src": "3656:1:2",
                                                        "type": "",
                                                        "value": "0"
                                                    }
                                                ],
                                                "functionName": {
                                                    "name": "add",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "3641:3:2"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "3641:17:2"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "abi_encode_t_bool_to_t_bool_fromStack",
                                            "nodeType": "YulIdentifier",
                                            "src": "3594:37:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3594:65:2"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3594:65:2"
                                }
                            ]
                        },
                        "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                            {
                                "name": "headStart",
                                "nodeType": "YulTypedName",
                                "src": "3520:9:2",
                                "type": ""
                            },
                            {
                                "name": "value0",
                                "nodeType": "YulTypedName",
                                "src": "3532:6:2",
                                "type": ""
                            }
                        ],
                        "returnVariables": [
                            {
                                "name": "tail",
                                "nodeType": "YulTypedName",
                                "src": "3543:4:2",
                                "type": ""
                            }
                        ],
                        "src": "3456:210:2"
                    },
                    {
                        "body": {
                            "nodeType": "YulBlock",
                            "src": "3790:195:2",
                            "statements": [
                                {
                                    "nodeType": "YulAssignment",
                                    "src": "3800:26:2",
                                    "value": {
                                        "arguments": [
                                            {
                                                "name": "headStart",
                                                "nodeType": "YulIdentifier",
                                                "src": "3812:9:2"
                                            },
                                            {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "3823:2:2",
                                                "type": "",
                                                "value": "32"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "3808:3:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3808:18:2"
                                    },
                                    "variableNames": [
                                        {
                                            "name": "tail",
                                            "nodeType": "YulIdentifier",
                                            "src": "3800:4:2"
                                        }
                                    ]
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "name": "headStart",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "3847:9:2"
                                                    },
                                                    {
                                                        "kind": "number",
                                                        "nodeType": "YulLiteral",
                                                        "src": "3858:1:2",
                                                        "type": "",
                                                        "value": "0"
                                                    }
                                                ],
                                                "functionName": {
                                                    "name": "add",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "3843:3:2"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "3843:17:2"
                                            },
                                            {
                                                "arguments": [
                                                    {
                                                        "name": "tail",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "3866:4:2"
                                                    },
                                                    {
                                                        "name": "headStart",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "3872:9:2"
                                                    }
                                                ],
                                                "functionName": {
                                                    "name": "sub",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "3862:3:2"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "3862:20:2"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "mstore",
                                            "nodeType": "YulIdentifier",
                                            "src": "3836:6:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3836:47:2"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3836:47:2"
                                },
                                {
                                    "nodeType": "YulAssignment",
                                    "src": "3892:86:2",
                                    "value": {
                                        "arguments": [
                                            {
                                                "name": "value0",
                                                "nodeType": "YulIdentifier",
                                                "src": "3964:6:2"
                                            },
                                            {
                                                "name": "tail",
                                                "nodeType": "YulIdentifier",
                                                "src": "3973:4:2"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack",
                                            "nodeType": "YulIdentifier",
                                            "src": "3900:63:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3900:78:2"
                                    },
                                    "variableNames": [
                                        {
                                            "name": "tail",
                                            "nodeType": "YulIdentifier",
                                            "src": "3892:4:2"
                                        }
                                    ]
                                }
                            ]
                        },
                        "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                            {
                                "name": "headStart",
                                "nodeType": "YulTypedName",
                                "src": "3762:9:2",
                                "type": ""
                            },
                            {
                                "name": "value0",
                                "nodeType": "YulTypedName",
                                "src": "3774:6:2",
                                "type": ""
                            }
                        ],
                        "returnVariables": [
                            {
                                "name": "tail",
                                "nodeType": "YulTypedName",
                                "src": "3785:4:2",
                                "type": ""
                            }
                        ],
                        "src": "3672:313:2"
                    },
                    {
                        "body": {
                            "nodeType": "YulBlock",
                            "src": "4162:248:2",
                            "statements": [
                                {
                                    "nodeType": "YulAssignment",
                                    "src": "4172:26:2",
                                    "value": {
                                        "arguments": [
                                            {
                                                "name": "headStart",
                                                "nodeType": "YulIdentifier",
                                                "src": "4184:9:2"
                                            },
                                            {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "4195:2:2",
                                                "type": "",
                                                "value": "32"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "4180:3:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "4180:18:2"
                                    },
                                    "variableNames": [
                                        {
                                            "name": "tail",
                                            "nodeType": "YulIdentifier",
                                            "src": "4172:4:2"
                                        }
                                    ]
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "name": "headStart",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "4219:9:2"
                                                    },
                                                    {
                                                        "kind": "number",
                                                        "nodeType": "YulLiteral",
                                                        "src": "4230:1:2",
                                                        "type": "",
                                                        "value": "0"
                                                    }
                                                ],
                                                "functionName": {
                                                    "name": "add",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "4215:3:2"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "4215:17:2"
                                            },
                                            {
                                                "arguments": [
                                                    {
                                                        "name": "tail",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "4238:4:2"
                                                    },
                                                    {
                                                        "name": "headStart",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "4244:9:2"
                                                    }
                                                ],
                                                "functionName": {
                                                    "name": "sub",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "4234:3:2"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "4234:20:2"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "mstore",
                                            "nodeType": "YulIdentifier",
                                            "src": "4208:6:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "4208:47:2"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4208:47:2"
                                },
                                {
                                    "nodeType": "YulAssignment",
                                    "src": "4264:139:2",
                                    "value": {
                                        "arguments": [
                                            {
                                                "name": "tail",
                                                "nodeType": "YulIdentifier",
                                                "src": "4398:4:2"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "abi_encode_t_stringliteral_1585781bcea687a18f97b1a94f6f8e11a9041130e156fda9ccf03b1c68f06452_to_t_string_memory_ptr_fromStack",
                                            "nodeType": "YulIdentifier",
                                            "src": "4272:124:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "4272:131:2"
                                    },
                                    "variableNames": [
                                        {
                                            "name": "tail",
                                            "nodeType": "YulIdentifier",
                                            "src": "4264:4:2"
                                        }
                                    ]
                                }
                            ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_1585781bcea687a18f97b1a94f6f8e11a9041130e156fda9ccf03b1c68f06452__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                            {
                                "name": "headStart",
                                "nodeType": "YulTypedName",
                                "src": "4142:9:2",
                                "type": ""
                            }
                        ],
                        "returnVariables": [
                            {
                                "name": "tail",
                                "nodeType": "YulTypedName",
                                "src": "4157:4:2",
                                "type": ""
                            }
                        ],
                        "src": "3991:419:2"
                    },
                    {
                        "body": {
                            "nodeType": "YulBlock",
                            "src": "4587:248:2",
                            "statements": [
                                {
                                    "nodeType": "YulAssignment",
                                    "src": "4597:26:2",
                                    "value": {
                                        "arguments": [
                                            {
                                                "name": "headStart",
                                                "nodeType": "YulIdentifier",
                                                "src": "4609:9:2"
                                            },
                                            {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "4620:2:2",
                                                "type": "",
                                                "value": "32"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "4605:3:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "4605:18:2"
                                    },
                                    "variableNames": [
                                        {
                                            "name": "tail",
                                            "nodeType": "YulIdentifier",
                                            "src": "4597:4:2"
                                        }
                                    ]
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "name": "headStart",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "4644:9:2"
                                                    },
                                                    {
                                                        "kind": "number",
                                                        "nodeType": "YulLiteral",
                                                        "src": "4655:1:2",
                                                        "type": "",
                                                        "value": "0"
                                                    }
                                                ],
                                                "functionName": {
                                                    "name": "add",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "4640:3:2"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "4640:17:2"
                                            },
                                            {
                                                "arguments": [
                                                    {
                                                        "name": "tail",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "4663:4:2"
                                                    },
                                                    {
                                                        "name": "headStart",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "4669:9:2"
                                                    }
                                                ],
                                                "functionName": {
                                                    "name": "sub",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "4659:3:2"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "4659:20:2"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "mstore",
                                            "nodeType": "YulIdentifier",
                                            "src": "4633:6:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "4633:47:2"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4633:47:2"
                                },
                                {
                                    "nodeType": "YulAssignment",
                                    "src": "4689:139:2",
                                    "value": {
                                        "arguments": [
                                            {
                                                "name": "tail",
                                                "nodeType": "YulIdentifier",
                                                "src": "4823:4:2"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "abi_encode_t_stringliteral_d8d39484df698fe59d78d2031639e610e556bf68a0e1f7af4e968ff763a96c6a_to_t_string_memory_ptr_fromStack",
                                            "nodeType": "YulIdentifier",
                                            "src": "4697:124:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "4697:131:2"
                                    },
                                    "variableNames": [
                                        {
                                            "name": "tail",
                                            "nodeType": "YulIdentifier",
                                            "src": "4689:4:2"
                                        }
                                    ]
                                }
                            ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_d8d39484df698fe59d78d2031639e610e556bf68a0e1f7af4e968ff763a96c6a__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                            {
                                "name": "headStart",
                                "nodeType": "YulTypedName",
                                "src": "4567:9:2",
                                "type": ""
                            }
                        ],
                        "returnVariables": [
                            {
                                "name": "tail",
                                "nodeType": "YulTypedName",
                                "src": "4582:4:2",
                                "type": ""
                            }
                        ],
                        "src": "4416:419:2"
                    },
                    {
                        "body": {
                            "nodeType": "YulBlock",
                            "src": "4939:124:2",
                            "statements": [
                                {
                                    "nodeType": "YulAssignment",
                                    "src": "4949:26:2",
                                    "value": {
                                        "arguments": [
                                            {
                                                "name": "headStart",
                                                "nodeType": "YulIdentifier",
                                                "src": "4961:9:2"
                                            },
                                            {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "4972:2:2",
                                                "type": "",
                                                "value": "32"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "4957:3:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "4957:18:2"
                                    },
                                    "variableNames": [
                                        {
                                            "name": "tail",
                                            "nodeType": "YulIdentifier",
                                            "src": "4949:4:2"
                                        }
                                    ]
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "name": "value0",
                                                "nodeType": "YulIdentifier",
                                                "src": "5029:6:2"
                                            },
                                            {
                                                "arguments": [
                                                    {
                                                        "name": "headStart",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "5042:9:2"
                                                    },
                                                    {
                                                        "kind": "number",
                                                        "nodeType": "YulLiteral",
                                                        "src": "5053:1:2",
                                                        "type": "",
                                                        "value": "0"
                                                    }
                                                ],
                                                "functionName": {
                                                    "name": "add",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "5038:3:2"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "5038:17:2"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "abi_encode_t_uint256_to_t_uint256_fromStack",
                                            "nodeType": "YulIdentifier",
                                            "src": "4985:43:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "4985:71:2"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4985:71:2"
                                }
                            ]
                        },
                        "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                            {
                                "name": "headStart",
                                "nodeType": "YulTypedName",
                                "src": "4911:9:2",
                                "type": ""
                            },
                            {
                                "name": "value0",
                                "nodeType": "YulTypedName",
                                "src": "4923:6:2",
                                "type": ""
                            }
                        ],
                        "returnVariables": [
                            {
                                "name": "tail",
                                "nodeType": "YulTypedName",
                                "src": "4934:4:2",
                                "type": ""
                            }
                        ],
                        "src": "4841:222:2"
                    },
                    {
                        "body": {
                            "nodeType": "YulBlock",
                            "src": "5163:120:2",
                            "statements": [
                                {
                                    "nodeType": "YulAssignment",
                                    "src": "5173:26:2",
                                    "value": {
                                        "arguments": [
                                            {
                                                "name": "headStart",
                                                "nodeType": "YulIdentifier",
                                                "src": "5185:9:2"
                                            },
                                            {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "5196:2:2",
                                                "type": "",
                                                "value": "32"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "5181:3:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "5181:18:2"
                                    },
                                    "variableNames": [
                                        {
                                            "name": "tail",
                                            "nodeType": "YulIdentifier",
                                            "src": "5173:4:2"
                                        }
                                    ]
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "name": "value0",
                                                "nodeType": "YulIdentifier",
                                                "src": "5249:6:2"
                                            },
                                            {
                                                "arguments": [
                                                    {
                                                        "name": "headStart",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "5262:9:2"
                                                    },
                                                    {
                                                        "kind": "number",
                                                        "nodeType": "YulLiteral",
                                                        "src": "5273:1:2",
                                                        "type": "",
                                                        "value": "0"
                                                    }
                                                ],
                                                "functionName": {
                                                    "name": "add",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "5258:3:2"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "5258:17:2"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "abi_encode_t_uint8_to_t_uint8_fromStack",
                                            "nodeType": "YulIdentifier",
                                            "src": "5209:39:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "5209:67:2"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5209:67:2"
                                }
                            ]
                        },
                        "name": "abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                            {
                                "name": "headStart",
                                "nodeType": "YulTypedName",
                                "src": "5135:9:2",
                                "type": ""
                            },
                            {
                                "name": "value0",
                                "nodeType": "YulTypedName",
                                "src": "5147:6:2",
                                "type": ""
                            }
                        ],
                        "returnVariables": [
                            {
                                "name": "tail",
                                "nodeType": "YulTypedName",
                                "src": "5158:4:2",
                                "type": ""
                            }
                        ],
                        "src": "5069:214:2"
                    },
                    {
                        "body": {
                            "nodeType": "YulBlock",
                            "src": "5348:40:2",
                            "statements": [
                                {
                                    "nodeType": "YulAssignment",
                                    "src": "5359:22:2",
                                    "value": {
                                        "arguments": [
                                            {
                                                "name": "value",
                                                "nodeType": "YulIdentifier",
                                                "src": "5375:5:2"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "5369:5:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "5369:12:2"
                                    },
                                    "variableNames": [
                                        {
                                            "name": "length",
                                            "nodeType": "YulIdentifier",
                                            "src": "5359:6:2"
                                        }
                                    ]
                                }
                            ]
                        },
                        "name": "array_length_t_string_memory_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                            {
                                "name": "value",
                                "nodeType": "YulTypedName",
                                "src": "5331:5:2",
                                "type": ""
                            }
                        ],
                        "returnVariables": [
                            {
                                "name": "length",
                                "nodeType": "YulTypedName",
                                "src": "5341:6:2",
                                "type": ""
                            }
                        ],
                        "src": "5289:99:2"
                    },
                    {
                        "body": {
                            "nodeType": "YulBlock",
                            "src": "5490:73:2",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "name": "pos",
                                                "nodeType": "YulIdentifier",
                                                "src": "5507:3:2"
                                            },
                                            {
                                                "name": "length",
                                                "nodeType": "YulIdentifier",
                                                "src": "5512:6:2"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "mstore",
                                            "nodeType": "YulIdentifier",
                                            "src": "5500:6:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "5500:19:2"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5500:19:2"
                                },
                                {
                                    "nodeType": "YulAssignment",
                                    "src": "5528:29:2",
                                    "value": {
                                        "arguments": [
                                            {
                                                "name": "pos",
                                                "nodeType": "YulIdentifier",
                                                "src": "5547:3:2"
                                            },
                                            {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "5552:4:2",
                                                "type": "",
                                                "value": "0x20"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "5543:3:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "5543:14:2"
                                    },
                                    "variableNames": [
                                        {
                                            "name": "updated_pos",
                                            "nodeType": "YulIdentifier",
                                            "src": "5528:11:2"
                                        }
                                    ]
                                }
                            ]
                        },
                        "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                            {
                                "name": "pos",
                                "nodeType": "YulTypedName",
                                "src": "5462:3:2",
                                "type": ""
                            },
                            {
                                "name": "length",
                                "nodeType": "YulTypedName",
                                "src": "5467:6:2",
                                "type": ""
                            }
                        ],
                        "returnVariables": [
                            {
                                "name": "updated_pos",
                                "nodeType": "YulTypedName",
                                "src": "5478:11:2",
                                "type": ""
                            }
                        ],
                        "src": "5394:169:2"
                    },
                    {
                        "body": {
                            "nodeType": "YulBlock",
                            "src": "5613:261:2",
                            "statements": [
                                {
                                    "nodeType": "YulAssignment",
                                    "src": "5623:25:2",
                                    "value": {
                                        "arguments": [
                                            {
                                                "name": "x",
                                                "nodeType": "YulIdentifier",
                                                "src": "5646:1:2"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "cleanup_t_uint256",
                                            "nodeType": "YulIdentifier",
                                            "src": "5628:17:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "5628:20:2"
                                    },
                                    "variableNames": [
                                        {
                                            "name": "x",
                                            "nodeType": "YulIdentifier",
                                            "src": "5623:1:2"
                                        }
                                    ]
                                },
                                {
                                    "nodeType": "YulAssignment",
                                    "src": "5657:25:2",
                                    "value": {
                                        "arguments": [
                                            {
                                                "name": "y",
                                                "nodeType": "YulIdentifier",
                                                "src": "5680:1:2"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "cleanup_t_uint256",
                                            "nodeType": "YulIdentifier",
                                            "src": "5662:17:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "5662:20:2"
                                    },
                                    "variableNames": [
                                        {
                                            "name": "y",
                                            "nodeType": "YulIdentifier",
                                            "src": "5657:1:2"
                                        }
                                    ]
                                },
                                {
                                    "body": {
                                        "nodeType": "YulBlock",
                                        "src": "5820:22:2",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "arguments": [],
                                                    "functionName": {
                                                        "name": "panic_error_0x11",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "5822:16:2"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "5822:18:2"
                                                },
                                                "nodeType": "YulExpressionStatement",
                                                "src": "5822:18:2"
                                            }
                                        ]
                                    },
                                    "condition": {
                                        "arguments": [
                                            {
                                                "name": "x",
                                                "nodeType": "YulIdentifier",
                                                "src": "5741:1:2"
                                            },
                                            {
                                                "arguments": [
                                                    {
                                                        "kind": "number",
                                                        "nodeType": "YulLiteral",
                                                        "src": "5748:66:2",
                                                        "type": "",
                                                        "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
                                                    },
                                                    {
                                                        "name": "y",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "5816:1:2"
                                                    }
                                                ],
                                                "functionName": {
                                                    "name": "sub",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "5744:3:2"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "5744:74:2"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "gt",
                                            "nodeType": "YulIdentifier",
                                            "src": "5738:2:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "5738:81:2"
                                    },
                                    "nodeType": "YulIf",
                                    "src": "5735:2:2"
                                },
                                {
                                    "nodeType": "YulAssignment",
                                    "src": "5852:16:2",
                                    "value": {
                                        "arguments": [
                                            {
                                                "name": "x",
                                                "nodeType": "YulIdentifier",
                                                "src": "5863:1:2"
                                            },
                                            {
                                                "name": "y",
                                                "nodeType": "YulIdentifier",
                                                "src": "5866:1:2"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "5859:3:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "5859:9:2"
                                    },
                                    "variableNames": [
                                        {
                                            "name": "sum",
                                            "nodeType": "YulIdentifier",
                                            "src": "5852:3:2"
                                        }
                                    ]
                                }
                            ]
                        },
                        "name": "checked_add_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                            {
                                "name": "x",
                                "nodeType": "YulTypedName",
                                "src": "5600:1:2",
                                "type": ""
                            },
                            {
                                "name": "y",
                                "nodeType": "YulTypedName",
                                "src": "5603:1:2",
                                "type": ""
                            }
                        ],
                        "returnVariables": [
                            {
                                "name": "sum",
                                "nodeType": "YulTypedName",
                                "src": "5609:3:2",
                                "type": ""
                            }
                        ],
                        "src": "5569:305:2"
                    },
                    {
                        "body": {
                            "nodeType": "YulBlock",
                            "src": "5925:146:2",
                            "statements": [
                                {
                                    "nodeType": "YulAssignment",
                                    "src": "5935:25:2",
                                    "value": {
                                        "arguments": [
                                            {
                                                "name": "x",
                                                "nodeType": "YulIdentifier",
                                                "src": "5958:1:2"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "cleanup_t_uint256",
                                            "nodeType": "YulIdentifier",
                                            "src": "5940:17:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "5940:20:2"
                                    },
                                    "variableNames": [
                                        {
                                            "name": "x",
                                            "nodeType": "YulIdentifier",
                                            "src": "5935:1:2"
                                        }
                                    ]
                                },
                                {
                                    "nodeType": "YulAssignment",
                                    "src": "5969:25:2",
                                    "value": {
                                        "arguments": [
                                            {
                                                "name": "y",
                                                "nodeType": "YulIdentifier",
                                                "src": "5992:1:2"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "cleanup_t_uint256",
                                            "nodeType": "YulIdentifier",
                                            "src": "5974:17:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "5974:20:2"
                                    },
                                    "variableNames": [
                                        {
                                            "name": "y",
                                            "nodeType": "YulIdentifier",
                                            "src": "5969:1:2"
                                        }
                                    ]
                                },
                                {
                                    "body": {
                                        "nodeType": "YulBlock",
                                        "src": "6016:22:2",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "arguments": [],
                                                    "functionName": {
                                                        "name": "panic_error_0x11",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "6018:16:2"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "6018:18:2"
                                                },
                                                "nodeType": "YulExpressionStatement",
                                                "src": "6018:18:2"
                                            }
                                        ]
                                    },
                                    "condition": {
                                        "arguments": [
                                            {
                                                "name": "x",
                                                "nodeType": "YulIdentifier",
                                                "src": "6010:1:2"
                                            },
                                            {
                                                "name": "y",
                                                "nodeType": "YulIdentifier",
                                                "src": "6013:1:2"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "lt",
                                            "nodeType": "YulIdentifier",
                                            "src": "6007:2:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "6007:8:2"
                                    },
                                    "nodeType": "YulIf",
                                    "src": "6004:2:2"
                                },
                                {
                                    "nodeType": "YulAssignment",
                                    "src": "6048:17:2",
                                    "value": {
                                        "arguments": [
                                            {
                                                "name": "x",
                                                "nodeType": "YulIdentifier",
                                                "src": "6060:1:2"
                                            },
                                            {
                                                "name": "y",
                                                "nodeType": "YulIdentifier",
                                                "src": "6063:1:2"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "sub",
                                            "nodeType": "YulIdentifier",
                                            "src": "6056:3:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "6056:9:2"
                                    },
                                    "variableNames": [
                                        {
                                            "name": "diff",
                                            "nodeType": "YulIdentifier",
                                            "src": "6048:4:2"
                                        }
                                    ]
                                }
                            ]
                        },
                        "name": "checked_sub_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                            {
                                "name": "x",
                                "nodeType": "YulTypedName",
                                "src": "5911:1:2",
                                "type": ""
                            },
                            {
                                "name": "y",
                                "nodeType": "YulTypedName",
                                "src": "5914:1:2",
                                "type": ""
                            }
                        ],
                        "returnVariables": [
                            {
                                "name": "diff",
                                "nodeType": "YulTypedName",
                                "src": "5920:4:2",
                                "type": ""
                            }
                        ],
                        "src": "5880:191:2"
                    },
                    {
                        "body": {
                            "nodeType": "YulBlock",
                            "src": "6122:51:2",
                            "statements": [
                                {
                                    "nodeType": "YulAssignment",
                                    "src": "6132:35:2",
                                    "value": {
                                        "arguments": [
                                            {
                                                "name": "value",
                                                "nodeType": "YulIdentifier",
                                                "src": "6161:5:2"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "cleanup_t_uint160",
                                            "nodeType": "YulIdentifier",
                                            "src": "6143:17:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "6143:24:2"
                                    },
                                    "variableNames": [
                                        {
                                            "name": "cleaned",
                                            "nodeType": "YulIdentifier",
                                            "src": "6132:7:2"
                                        }
                                    ]
                                }
                            ]
                        },
                        "name": "cleanup_t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                            {
                                "name": "value",
                                "nodeType": "YulTypedName",
                                "src": "6104:5:2",
                                "type": ""
                            }
                        ],
                        "returnVariables": [
                            {
                                "name": "cleaned",
                                "nodeType": "YulTypedName",
                                "src": "6114:7:2",
                                "type": ""
                            }
                        ],
                        "src": "6077:96:2"
                    },
                    {
                        "body": {
                            "nodeType": "YulBlock",
                            "src": "6221:48:2",
                            "statements": [
                                {
                                    "nodeType": "YulAssignment",
                                    "src": "6231:32:2",
                                    "value": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "name": "value",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "6256:5:2"
                                                    }
                                                ],
                                                "functionName": {
                                                    "name": "iszero",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "6249:6:2"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "6249:13:2"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "iszero",
                                            "nodeType": "YulIdentifier",
                                            "src": "6242:6:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "6242:21:2"
                                    },
                                    "variableNames": [
                                        {
                                            "name": "cleaned",
                                            "nodeType": "YulIdentifier",
                                            "src": "6231:7:2"
                                        }
                                    ]
                                }
                            ]
                        },
                        "name": "cleanup_t_bool",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                            {
                                "name": "value",
                                "nodeType": "YulTypedName",
                                "src": "6203:5:2",
                                "type": ""
                            }
                        ],
                        "returnVariables": [
                            {
                                "name": "cleaned",
                                "nodeType": "YulTypedName",
                                "src": "6213:7:2",
                                "type": ""
                            }
                        ],
                        "src": "6179:90:2"
                    },
                    {
                        "body": {
                            "nodeType": "YulBlock",
                            "src": "6320:81:2",
                            "statements": [
                                {
                                    "nodeType": "YulAssignment",
                                    "src": "6330:65:2",
                                    "value": {
                                        "arguments": [
                                            {
                                                "name": "value",
                                                "nodeType": "YulIdentifier",
                                                "src": "6345:5:2"
                                            },
                                            {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "6352:42:2",
                                                "type": "",
                                                "value": "0xffffffffffffffffffffffffffffffffffffffff"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "and",
                                            "nodeType": "YulIdentifier",
                                            "src": "6341:3:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "6341:54:2"
                                    },
                                    "variableNames": [
                                        {
                                            "name": "cleaned",
                                            "nodeType": "YulIdentifier",
                                            "src": "6330:7:2"
                                        }
                                    ]
                                }
                            ]
                        },
                        "name": "cleanup_t_uint160",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                            {
                                "name": "value",
                                "nodeType": "YulTypedName",
                                "src": "6302:5:2",
                                "type": ""
                            }
                        ],
                        "returnVariables": [
                            {
                                "name": "cleaned",
                                "nodeType": "YulTypedName",
                                "src": "6312:7:2",
                                "type": ""
                            }
                        ],
                        "src": "6275:126:2"
                    },
                    {
                        "body": {
                            "nodeType": "YulBlock",
                            "src": "6452:32:2",
                            "statements": [
                                {
                                    "nodeType": "YulAssignment",
                                    "src": "6462:16:2",
                                    "value": {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "6473:5:2"
                                    },
                                    "variableNames": [
                                        {
                                            "name": "cleaned",
                                            "nodeType": "YulIdentifier",
                                            "src": "6462:7:2"
                                        }
                                    ]
                                }
                            ]
                        },
                        "name": "cleanup_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                            {
                                "name": "value",
                                "nodeType": "YulTypedName",
                                "src": "6434:5:2",
                                "type": ""
                            }
                        ],
                        "returnVariables": [
                            {
                                "name": "cleaned",
                                "nodeType": "YulTypedName",
                                "src": "6444:7:2",
                                "type": ""
                            }
                        ],
                        "src": "6407:77:2"
                    },
                    {
                        "body": {
                            "nodeType": "YulBlock",
                            "src": "6533:43:2",
                            "statements": [
                                {
                                    "nodeType": "YulAssignment",
                                    "src": "6543:27:2",
                                    "value": {
                                        "arguments": [
                                            {
                                                "name": "value",
                                                "nodeType": "YulIdentifier",
                                                "src": "6558:5:2"
                                            },
                                            {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "6565:4:2",
                                                "type": "",
                                                "value": "0xff"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "and",
                                            "nodeType": "YulIdentifier",
                                            "src": "6554:3:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "6554:16:2"
                                    },
                                    "variableNames": [
                                        {
                                            "name": "cleaned",
                                            "nodeType": "YulIdentifier",
                                            "src": "6543:7:2"
                                        }
                                    ]
                                }
                            ]
                        },
                        "name": "cleanup_t_uint8",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                            {
                                "name": "value",
                                "nodeType": "YulTypedName",
                                "src": "6515:5:2",
                                "type": ""
                            }
                        ],
                        "returnVariables": [
                            {
                                "name": "cleaned",
                                "nodeType": "YulTypedName",
                                "src": "6525:7:2",
                                "type": ""
                            }
                        ],
                        "src": "6490:86:2"
                    },
                    {
                        "body": {
                            "nodeType": "YulBlock",
                            "src": "6631:258:2",
                            "statements": [
                                {
                                    "nodeType": "YulVariableDeclaration",
                                    "src": "6641:10:2",
                                    "value": {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6650:1:2",
                                        "type": "",
                                        "value": "0"
                                    },
                                    "variables": [
                                        {
                                            "name": "i",
                                            "nodeType": "YulTypedName",
                                            "src": "6645:1:2",
                                            "type": ""
                                        }
                                    ]
                                },
                                {
                                    "body": {
                                        "nodeType": "YulBlock",
                                        "src": "6710:63:2",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "arguments": [
                                                                {
                                                                    "name": "dst",
                                                                    "nodeType": "YulIdentifier",
                                                                    "src": "6735:3:2"
                                                                },
                                                                {
                                                                    "name": "i",
                                                                    "nodeType": "YulIdentifier",
                                                                    "src": "6740:1:2"
                                                                }
                                                            ],
                                                            "functionName": {
                                                                "name": "add",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "6731:3:2"
                                                            },
                                                            "nodeType": "YulFunctionCall",
                                                            "src": "6731:11:2"
                                                        },
                                                        {
                                                            "arguments": [
                                                                {
                                                                    "arguments": [
                                                                        {
                                                                            "name": "src",
                                                                            "nodeType": "YulIdentifier",
                                                                            "src": "6754:3:2"
                                                                        },
                                                                        {
                                                                            "name": "i",
                                                                            "nodeType": "YulIdentifier",
                                                                            "src": "6759:1:2"
                                                                        }
                                                                    ],
                                                                    "functionName": {
                                                                        "name": "add",
                                                                        "nodeType": "YulIdentifier",
                                                                        "src": "6750:3:2"
                                                                    },
                                                                    "nodeType": "YulFunctionCall",
                                                                    "src": "6750:11:2"
                                                                }
                                                            ],
                                                            "functionName": {
                                                                "name": "mload",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "6744:5:2"
                                                            },
                                                            "nodeType": "YulFunctionCall",
                                                            "src": "6744:18:2"
                                                        }
                                                    ],
                                                    "functionName": {
                                                        "name": "mstore",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "6724:6:2"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "6724:39:2"
                                                },
                                                "nodeType": "YulExpressionStatement",
                                                "src": "6724:39:2"
                                            }
                                        ]
                                    },
                                    "condition": {
                                        "arguments": [
                                            {
                                                "name": "i",
                                                "nodeType": "YulIdentifier",
                                                "src": "6671:1:2"
                                            },
                                            {
                                                "name": "length",
                                                "nodeType": "YulIdentifier",
                                                "src": "6674:6:2"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "lt",
                                            "nodeType": "YulIdentifier",
                                            "src": "6668:2:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "6668:13:2"
                                    },
                                    "nodeType": "YulForLoop",
                                    "post": {
                                        "nodeType": "YulBlock",
                                        "src": "6682:19:2",
                                        "statements": [
                                            {
                                                "nodeType": "YulAssignment",
                                                "src": "6684:15:2",
                                                "value": {
                                                    "arguments": [
                                                        {
                                                            "name": "i",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "6693:1:2"
                                                        },
                                                        {
                                                            "kind": "number",
                                                            "nodeType": "YulLiteral",
                                                            "src": "6696:2:2",
                                                            "type": "",
                                                            "value": "32"
                                                        }
                                                    ],
                                                    "functionName": {
                                                        "name": "add",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "6689:3:2"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "6689:10:2"
                                                },
                                                "variableNames": [
                                                    {
                                                        "name": "i",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "6684:1:2"
                                                    }
                                                ]
                                            }
                                        ]
                                    },
                                    "pre": {
                                        "nodeType": "YulBlock",
                                        "src": "6664:3:2",
                                        "statements": []
                                    },
                                    "src": "6660:113:2"
                                },
                                {
                                    "body": {
                                        "nodeType": "YulBlock",
                                        "src": "6807:76:2",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "arguments": [
                                                                {
                                                                    "name": "dst",
                                                                    "nodeType": "YulIdentifier",
                                                                    "src": "6857:3:2"
                                                                },
                                                                {
                                                                    "name": "length",
                                                                    "nodeType": "YulIdentifier",
                                                                    "src": "6862:6:2"
                                                                }
                                                            ],
                                                            "functionName": {
                                                                "name": "add",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "6853:3:2"
                                                            },
                                                            "nodeType": "YulFunctionCall",
                                                            "src": "6853:16:2"
                                                        },
                                                        {
                                                            "kind": "number",
                                                            "nodeType": "YulLiteral",
                                                            "src": "6871:1:2",
                                                            "type": "",
                                                            "value": "0"
                                                        }
                                                    ],
                                                    "functionName": {
                                                        "name": "mstore",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "6846:6:2"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "6846:27:2"
                                                },
                                                "nodeType": "YulExpressionStatement",
                                                "src": "6846:27:2"
                                            }
                                        ]
                                    },
                                    "condition": {
                                        "arguments": [
                                            {
                                                "name": "i",
                                                "nodeType": "YulIdentifier",
                                                "src": "6788:1:2"
                                            },
                                            {
                                                "name": "length",
                                                "nodeType": "YulIdentifier",
                                                "src": "6791:6:2"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "gt",
                                            "nodeType": "YulIdentifier",
                                            "src": "6785:2:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "6785:13:2"
                                    },
                                    "nodeType": "YulIf",
                                    "src": "6782:2:2"
                                }
                            ]
                        },
                        "name": "copy_memory_to_memory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                            {
                                "name": "src",
                                "nodeType": "YulTypedName",
                                "src": "6613:3:2",
                                "type": ""
                            },
                            {
                                "name": "dst",
                                "nodeType": "YulTypedName",
                                "src": "6618:3:2",
                                "type": ""
                            },
                            {
                                "name": "length",
                                "nodeType": "YulTypedName",
                                "src": "6623:6:2",
                                "type": ""
                            }
                        ],
                        "src": "6582:307:2"
                    },
                    {
                        "body": {
                            "nodeType": "YulBlock",
                            "src": "6946:269:2",
                            "statements": [
                                {
                                    "nodeType": "YulAssignment",
                                    "src": "6956:22:2",
                                    "value": {
                                        "arguments": [
                                            {
                                                "name": "data",
                                                "nodeType": "YulIdentifier",
                                                "src": "6970:4:2"
                                            },
                                            {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "6976:1:2",
                                                "type": "",
                                                "value": "2"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "div",
                                            "nodeType": "YulIdentifier",
                                            "src": "6966:3:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "6966:12:2"
                                    },
                                    "variableNames": [
                                        {
                                            "name": "length",
                                            "nodeType": "YulIdentifier",
                                            "src": "6956:6:2"
                                        }
                                    ]
                                },
                                {
                                    "nodeType": "YulVariableDeclaration",
                                    "src": "6987:38:2",
                                    "value": {
                                        "arguments": [
                                            {
                                                "name": "data",
                                                "nodeType": "YulIdentifier",
                                                "src": "7017:4:2"
                                            },
                                            {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "7023:1:2",
                                                "type": "",
                                                "value": "1"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "and",
                                            "nodeType": "YulIdentifier",
                                            "src": "7013:3:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "7013:12:2"
                                    },
                                    "variables": [
                                        {
                                            "name": "outOfPlaceEncoding",
                                            "nodeType": "YulTypedName",
                                            "src": "6991:18:2",
                                            "type": ""
                                        }
                                    ]
                                },
                                {
                                    "body": {
                                        "nodeType": "YulBlock",
                                        "src": "7064:51:2",
                                        "statements": [
                                            {
                                                "nodeType": "YulAssignment",
                                                "src": "7078:27:2",
                                                "value": {
                                                    "arguments": [
                                                        {
                                                            "name": "length",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "7092:6:2"
                                                        },
                                                        {
                                                            "kind": "number",
                                                            "nodeType": "YulLiteral",
                                                            "src": "7100:4:2",
                                                            "type": "",
                                                            "value": "0x7f"
                                                        }
                                                    ],
                                                    "functionName": {
                                                        "name": "and",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "7088:3:2"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "7088:17:2"
                                                },
                                                "variableNames": [
                                                    {
                                                        "name": "length",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "7078:6:2"
                                                    }
                                                ]
                                            }
                                        ]
                                    },
                                    "condition": {
                                        "arguments": [
                                            {
                                                "name": "outOfPlaceEncoding",
                                                "nodeType": "YulIdentifier",
                                                "src": "7044:18:2"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "iszero",
                                            "nodeType": "YulIdentifier",
                                            "src": "7037:6:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "7037:26:2"
                                    },
                                    "nodeType": "YulIf",
                                    "src": "7034:2:2"
                                },
                                {
                                    "body": {
                                        "nodeType": "YulBlock",
                                        "src": "7167:42:2",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "arguments": [],
                                                    "functionName": {
                                                        "name": "panic_error_0x22",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "7181:16:2"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "7181:18:2"
                                                },
                                                "nodeType": "YulExpressionStatement",
                                                "src": "7181:18:2"
                                            }
                                        ]
                                    },
                                    "condition": {
                                        "arguments": [
                                            {
                                                "name": "outOfPlaceEncoding",
                                                "nodeType": "YulIdentifier",
                                                "src": "7131:18:2"
                                            },
                                            {
                                                "arguments": [
                                                    {
                                                        "name": "length",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "7154:6:2"
                                                    },
                                                    {
                                                        "kind": "number",
                                                        "nodeType": "YulLiteral",
                                                        "src": "7162:2:2",
                                                        "type": "",
                                                        "value": "32"
                                                    }
                                                ],
                                                "functionName": {
                                                    "name": "lt",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "7151:2:2"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "7151:14:2"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "eq",
                                            "nodeType": "YulIdentifier",
                                            "src": "7128:2:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "7128:38:2"
                                    },
                                    "nodeType": "YulIf",
                                    "src": "7125:2:2"
                                }
                            ]
                        },
                        "name": "extract_byte_array_length",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                            {
                                "name": "data",
                                "nodeType": "YulTypedName",
                                "src": "6930:4:2",
                                "type": ""
                            }
                        ],
                        "returnVariables": [
                            {
                                "name": "length",
                                "nodeType": "YulTypedName",
                                "src": "6939:6:2",
                                "type": ""
                            }
                        ],
                        "src": "6895:320:2"
                    },
                    {
                        "body": {
                            "nodeType": "YulBlock",
                            "src": "7249:152:2",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "7266:1:2",
                                                "type": "",
                                                "value": "0"
                                            },
                                            {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "7269:77:2",
                                                "type": "",
                                                "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "mstore",
                                            "nodeType": "YulIdentifier",
                                            "src": "7259:6:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "7259:88:2"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "7259:88:2"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "7363:1:2",
                                                "type": "",
                                                "value": "4"
                                            },
                                            {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "7366:4:2",
                                                "type": "",
                                                "value": "0x11"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "mstore",
                                            "nodeType": "YulIdentifier",
                                            "src": "7356:6:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "7356:15:2"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "7356:15:2"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "7387:1:2",
                                                "type": "",
                                                "value": "0"
                                            },
                                            {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "7390:4:2",
                                                "type": "",
                                                "value": "0x24"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "revert",
                                            "nodeType": "YulIdentifier",
                                            "src": "7380:6:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "7380:15:2"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "7380:15:2"
                                }
                            ]
                        },
                        "name": "panic_error_0x11",
                        "nodeType": "YulFunctionDefinition",
                        "src": "7221:180:2"
                    },
                    {
                        "body": {
                            "nodeType": "YulBlock",
                            "src": "7435:152:2",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "7452:1:2",
                                                "type": "",
                                                "value": "0"
                                            },
                                            {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "7455:77:2",
                                                "type": "",
                                                "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "mstore",
                                            "nodeType": "YulIdentifier",
                                            "src": "7445:6:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "7445:88:2"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "7445:88:2"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "7549:1:2",
                                                "type": "",
                                                "value": "4"
                                            },
                                            {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "7552:4:2",
                                                "type": "",
                                                "value": "0x22"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "mstore",
                                            "nodeType": "YulIdentifier",
                                            "src": "7542:6:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "7542:15:2"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "7542:15:2"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "7573:1:2",
                                                "type": "",
                                                "value": "0"
                                            },
                                            {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "7576:4:2",
                                                "type": "",
                                                "value": "0x24"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "revert",
                                            "nodeType": "YulIdentifier",
                                            "src": "7566:6:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "7566:15:2"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "7566:15:2"
                                }
                            ]
                        },
                        "name": "panic_error_0x22",
                        "nodeType": "YulFunctionDefinition",
                        "src": "7407:180:2"
                    },
                    {
                        "body": {
                            "nodeType": "YulBlock",
                            "src": "7641:54:2",
                            "statements": [
                                {
                                    "nodeType": "YulAssignment",
                                    "src": "7651:38:2",
                                    "value": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "name": "value",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "7669:5:2"
                                                    },
                                                    {
                                                        "kind": "number",
                                                        "nodeType": "YulLiteral",
                                                        "src": "7676:2:2",
                                                        "type": "",
                                                        "value": "31"
                                                    }
                                                ],
                                                "functionName": {
                                                    "name": "add",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "7665:3:2"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "7665:14:2"
                                            },
                                            {
                                                "arguments": [
                                                    {
                                                        "kind": "number",
                                                        "nodeType": "YulLiteral",
                                                        "src": "7685:2:2",
                                                        "type": "",
                                                        "value": "31"
                                                    }
                                                ],
                                                "functionName": {
                                                    "name": "not",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "7681:3:2"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "7681:7:2"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "and",
                                            "nodeType": "YulIdentifier",
                                            "src": "7661:3:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "7661:28:2"
                                    },
                                    "variableNames": [
                                        {
                                            "name": "result",
                                            "nodeType": "YulIdentifier",
                                            "src": "7651:6:2"
                                        }
                                    ]
                                }
                            ]
                        },
                        "name": "round_up_to_mul_of_32",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                            {
                                "name": "value",
                                "nodeType": "YulTypedName",
                                "src": "7624:5:2",
                                "type": ""
                            }
                        ],
                        "returnVariables": [
                            {
                                "name": "result",
                                "nodeType": "YulTypedName",
                                "src": "7634:6:2",
                                "type": ""
                            }
                        ],
                        "src": "7593:102:2"
                    },
                    {
                        "body": {
                            "nodeType": "YulBlock",
                            "src": "7744:79:2",
                            "statements": [
                                {
                                    "body": {
                                        "nodeType": "YulBlock",
                                        "src": "7801:16:2",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "kind": "number",
                                                            "nodeType": "YulLiteral",
                                                            "src": "7810:1:2",
                                                            "type": "",
                                                            "value": "0"
                                                        },
                                                        {
                                                            "kind": "number",
                                                            "nodeType": "YulLiteral",
                                                            "src": "7813:1:2",
                                                            "type": "",
                                                            "value": "0"
                                                        }
                                                    ],
                                                    "functionName": {
                                                        "name": "revert",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "7803:6:2"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "7803:12:2"
                                                },
                                                "nodeType": "YulExpressionStatement",
                                                "src": "7803:12:2"
                                            }
                                        ]
                                    },
                                    "condition": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "name": "value",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "7767:5:2"
                                                    },
                                                    {
                                                        "arguments": [
                                                            {
                                                                "name": "value",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "7792:5:2"
                                                            }
                                                        ],
                                                        "functionName": {
                                                            "name": "cleanup_t_address",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "7774:17:2"
                                                        },
                                                        "nodeType": "YulFunctionCall",
                                                        "src": "7774:24:2"
                                                    }
                                                ],
                                                "functionName": {
                                                    "name": "eq",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "7764:2:2"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "7764:35:2"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "iszero",
                                            "nodeType": "YulIdentifier",
                                            "src": "7757:6:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "7757:43:2"
                                    },
                                    "nodeType": "YulIf",
                                    "src": "7754:2:2"
                                }
                            ]
                        },
                        "name": "validator_revert_t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                            {
                                "name": "value",
                                "nodeType": "YulTypedName",
                                "src": "7737:5:2",
                                "type": ""
                            }
                        ],
                        "src": "7701:122:2"
                    },
                    {
                        "body": {
                            "nodeType": "YulBlock",
                            "src": "7872:79:2",
                            "statements": [
                                {
                                    "body": {
                                        "nodeType": "YulBlock",
                                        "src": "7929:16:2",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "kind": "number",
                                                            "nodeType": "YulLiteral",
                                                            "src": "7938:1:2",
                                                            "type": "",
                                                            "value": "0"
                                                        },
                                                        {
                                                            "kind": "number",
                                                            "nodeType": "YulLiteral",
                                                            "src": "7941:1:2",
                                                            "type": "",
                                                            "value": "0"
                                                        }
                                                    ],
                                                    "functionName": {
                                                        "name": "revert",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "7931:6:2"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "7931:12:2"
                                                },
                                                "nodeType": "YulExpressionStatement",
                                                "src": "7931:12:2"
                                            }
                                        ]
                                    },
                                    "condition": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "name": "value",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "7895:5:2"
                                                    },
                                                    {
                                                        "arguments": [
                                                            {
                                                                "name": "value",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "7920:5:2"
                                                            }
                                                        ],
                                                        "functionName": {
                                                            "name": "cleanup_t_uint256",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "7902:17:2"
                                                        },
                                                        "nodeType": "YulFunctionCall",
                                                        "src": "7902:24:2"
                                                    }
                                                ],
                                                "functionName": {
                                                    "name": "eq",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "7892:2:2"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "7892:35:2"
                                            }
                                        ],
                                        "functionName": {
                                            "name": "iszero",
                                            "nodeType": "YulIdentifier",
                                            "src": "7885:6:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "7885:43:2"
                                    },
                                    "nodeType": "YulIf",
                                    "src": "7882:2:2"
                                }
                            ]
                        },
                        "name": "validator_revert_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                            {
                                "name": "value",
                                "nodeType": "YulTypedName",
                                "src": "7865:5:2",
                                "type": ""
                            }
                        ],
                        "src": "7829:122:2"
                    }
                ]
            },
            "contents": "{\n\n    function abi_decode_t_address(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_address(value)\n    }\n\n    function abi_decode_t_uint256(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_uint256(value)\n    }\n\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1 {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2 {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 64\n\n            value2 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1 {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_encode_t_bool_to_t_bool_fromStack(value, pos) {\n        mstore(pos, cleanup_t_bool(value))\n    }\n\n    function abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack(value, pos) -> end {\n        let length := array_length_t_string_memory_ptr(value)\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length)\n        copy_memory_to_memory(add(value, 0x20), pos, length)\n        end := add(pos, round_up_to_mul_of_32(length))\n    }\n\n    function abi_encode_t_stringliteral_1585781bcea687a18f97b1a94f6f8e11a9041130e156fda9ccf03b1c68f06452_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 47)\n\n        mstore(add(pos, 0), \"token balance is lower than the \")\n\n        mstore(add(pos, 32), \"value requested\")\n\n        end := add(pos, 64)\n    }\n\n    function abi_encode_t_stringliteral_d8d39484df698fe59d78d2031639e610e556bf68a0e1f7af4e968ff763a96c6a_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 57)\n\n        mstore(add(pos, 0), \"token balance or allowance is lo\")\n\n        mstore(add(pos, 32), \"wer than amount requested\")\n\n        end := add(pos, 64)\n    }\n\n    function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n        mstore(pos, cleanup_t_uint256(value))\n    }\n\n    function abi_encode_t_uint8_to_t_uint8_fromStack(value, pos) {\n        mstore(pos, cleanup_t_uint8(value))\n    }\n\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_bool_to_t_bool_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack(value0,  tail)\n\n    }\n\n    function abi_encode_tuple_t_stringliteral_1585781bcea687a18f97b1a94f6f8e11a9041130e156fda9ccf03b1c68f06452__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_1585781bcea687a18f97b1a94f6f8e11a9041130e156fda9ccf03b1c68f06452_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function abi_encode_tuple_t_stringliteral_d8d39484df698fe59d78d2031639e610e556bf68a0e1f7af4e968ff763a96c6a__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_d8d39484df698fe59d78d2031639e610e556bf68a0e1f7af4e968ff763a96c6a_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_uint8_to_t_uint8_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function array_length_t_string_memory_ptr(value) -> length {\n\n        length := mload(value)\n\n    }\n\n    function array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length) -> updated_pos {\n        mstore(pos, length)\n        updated_pos := add(pos, 0x20)\n    }\n\n    function checked_add_t_uint256(x, y) -> sum {\n        x := cleanup_t_uint256(x)\n        y := cleanup_t_uint256(y)\n\n        // overflow, if x > (maxValue - y)\n        if gt(x, sub(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, y)) { panic_error_0x11() }\n\n        sum := add(x, y)\n    }\n\n    function checked_sub_t_uint256(x, y) -> diff {\n        x := cleanup_t_uint256(x)\n        y := cleanup_t_uint256(y)\n\n        if lt(x, y) { panic_error_0x11() }\n\n        diff := sub(x, y)\n    }\n\n    function cleanup_t_address(value) -> cleaned {\n        cleaned := cleanup_t_uint160(value)\n    }\n\n    function cleanup_t_bool(value) -> cleaned {\n        cleaned := iszero(iszero(value))\n    }\n\n    function cleanup_t_uint160(value) -> cleaned {\n        cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n    }\n\n    function cleanup_t_uint256(value) -> cleaned {\n        cleaned := value\n    }\n\n    function cleanup_t_uint8(value) -> cleaned {\n        cleaned := and(value, 0xff)\n    }\n\n    function copy_memory_to_memory(src, dst, length) {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        if gt(i, length)\n        {\n            // clear end\n            mstore(add(dst, length), 0)\n        }\n    }\n\n    function extract_byte_array_length(data) -> length {\n        length := div(data, 2)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) {\n            length := and(length, 0x7f)\n        }\n\n        if eq(outOfPlaceEncoding, lt(length, 32)) {\n            panic_error_0x22()\n        }\n    }\n\n    function panic_error_0x11() {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n\n    function panic_error_0x22() {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x22)\n        revert(0, 0x24)\n    }\n\n    function round_up_to_mul_of_32(value) -> result {\n        result := and(add(value, 31), not(31))\n    }\n\n    function validator_revert_t_address(value) {\n        if iszero(eq(value, cleanup_t_address(value))) { revert(0, 0) }\n    }\n\n    function validator_revert_t_uint256(value) {\n        if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n    }\n\n}\n",
            "id": 2,
            "language": "Yul",
            "name": "#utility.yul"
        }
    ],
    "sourceMap": "15938:2901:1:-:0;;;16710:605;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16855:14;16832:8;:20;16841:10;16832:20;;;;;;;;;;;;;;;:37;;;;16946:14;16932:11;:28;;;;17023:10;17016:4;:17;;;;;;;;;;;;:::i;:::-;;17125:13;17114:8;;:24;;;;;;;;;;;;;;;;;;17227:12;17218:6;:21;;;;;;;;;;;;:::i;:::-;;16710:605;;;;15938:2901;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:353:2:-;;121:65;136:49;178:6;136:49;:::i;:::-;121:65;:::i;:::-;112:74;;209:6;202:5;195:21;247:4;240:5;236:16;285:3;276:6;271:3;267:16;264:25;261:2;;;302:1;299;292:12;261:2;315:39;347:6;342:3;337;315:39;:::i;:::-;102:258;;;;;;:::o;380:288::-;;496:3;489:4;481:6;477:17;473:27;463:2;;514:1;511;504:12;463:2;547:6;541:13;572:90;658:3;650:6;643:4;635:6;631:17;572:90;:::i;:::-;563:99;;453:215;;;;;:::o;674:143::-;;762:6;756:13;747:22;;778:33;805:5;778:33;:::i;:::-;737:80;;;;:::o;823:139::-;;909:6;903:13;894:22;;925:31;950:5;925:31;:::i;:::-;884:78;;;;:::o;968:961::-;;;;;1156:3;1144:9;1135:7;1131:23;1127:33;1124:2;;;1173:1;1170;1163:12;1124:2;1216:1;1241:64;1297:7;1288:6;1277:9;1273:22;1241:64;:::i;:::-;1231:74;;1187:128;1375:2;1364:9;1360:18;1354:25;1406:18;1398:6;1395:30;1392:2;;;1438:1;1435;1428:12;1392:2;1466:74;1532:7;1523:6;1512:9;1508:22;1466:74;:::i;:::-;1456:84;;1325:225;1589:2;1615:62;1669:7;1660:6;1649:9;1645:22;1615:62;:::i;:::-;1605:72;;1560:127;1747:2;1736:9;1732:18;1726:25;1778:18;1770:6;1767:30;1764:2;;;1810:1;1807;1800:12;1764:2;1838:74;1904:7;1895:6;1884:9;1880:22;1838:74;:::i;:::-;1828:84;;1697:225;1114:815;;;;;;;:::o;1935:283::-;;2001:2;1995:9;1985:19;;2043:4;2035:6;2031:17;2150:6;2138:10;2135:22;2114:18;2102:10;2099:34;2096:62;2093:2;;;2161:18;;:::i;:::-;2093:2;2201:10;2197:2;2190:22;1975:243;;;;:::o;2224:332::-;;2376:18;2368:6;2365:30;2362:2;;;2398:18;;:::i;:::-;2362:2;2483:4;2479:9;2472:4;2464:6;2460:17;2456:33;2448:41;;2544:4;2538;2534:15;2526:23;;2291:265;;;:::o;2562:77::-;;2628:5;2617:16;;2607:32;;;:::o;2645:86::-;;2720:4;2713:5;2709:16;2698:27;;2688:43;;;:::o;2737:307::-;2805:1;2815:113;2829:6;2826:1;2823:13;2815:113;;;2914:1;2909:3;2905:11;2899:18;2895:1;2890:3;2886:11;2879:39;2851:2;2848:1;2844:10;2839:15;;2815:113;;;2946:6;2943:1;2940:13;2937:2;;;3026:1;3017:6;3012:3;3008:16;3001:27;2937:2;2786:258;;;;:::o;3050:320::-;;3131:1;3125:4;3121:12;3111:22;;3178:1;3172:4;3168:12;3199:18;3189:2;;3255:4;3247:6;3243:17;3233:27;;3189:2;3317;3309:6;3306:14;3286:18;3283:38;3280:2;;;3336:18;;:::i;:::-;3280:2;3101:269;;;;:::o;3376:180::-;3424:77;3421:1;3414:88;3521:4;3518:1;3511:15;3545:4;3542:1;3535:15;3562:180;3610:77;3607:1;3600:88;3707:4;3704:1;3697:15;3731:4;3728:1;3721:15;3748:122;3821:24;3839:5;3821:24;:::i;:::-;3814:5;3811:35;3801:2;;3860:1;3857;3850:12;3801:2;3791:79;:::o;3876:118::-;3947:22;3963:5;3947:22;:::i;:::-;3940:5;3937:33;3927:2;;3984:1;3981;3974:12;3927:2;3917:77;:::o;15938:2901:1:-;;;;;;;",
    "deployedSourceMap": "15938:2901:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16501:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18415:265;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16182:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17708:573;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16062:44;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16572:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16112:64;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18287:122;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16643:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17321:381;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18686:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16501:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;18415:265::-;18491:12;18547:6;18515:7;:19;18523:10;18515:19;;;;;;;;;;;;;;;:29;18535:8;18515:29;;;;;;;;;;;;;;;:38;;;;18589:8;18568:38;;18577:10;18568:38;;;18599:6;18568:38;;;;;;:::i;:::-;;;;;;;;18669:4;18662:11;;18415:265;;;;:::o;16182:26::-;;;;:::o;17708:573::-;17799:12;17823:17;17843:7;:14;17851:5;17843:14;;;;;;;;;;;;;;;:26;17858:10;17843:26;;;;;;;;;;;;;;;;17823:46;;17906:6;17887:8;:15;17896:5;17887:15;;;;;;;;;;;;;;;;:25;;:48;;;;;17929:6;17916:9;:19;;17887:48;17879:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;18024:6;18007:8;:13;18016:3;18007:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;18059:6;18040:8;:15;18049:5;18040:15;;;;;;;;;;;;;;;;:25;;;;;;;:::i;:::-;;;;;;;;16046:10;18079:9;:23;18075:90;;;18148:6;18118:7;:14;18126:5;18118:14;;;;;;;;;;;;;;;:26;18133:10;18118:26;;;;;;;;;;;;;;;;:36;;;;;;;:::i;:::-;;;;;;;;18075:90;18195:3;18179:28;;18188:5;18179:28;;;18200:6;18179:28;;;;;;:::i;:::-;;;;;;;;18270:4;18263:11;;;17708:573;;;;;:::o;16062:44::-;;;;;;;;;;;;;;;;;:::o;16572:21::-;;;;;;;;;;;;;:::o;16112:64::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;18287:122::-;18352:15;18386:8;:16;18395:6;18386:16;;;;;;;;;;;;;;;;18379:23;;18287:122;;;:::o;16643:20::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;17321:381::-;17393:12;17449:6;17425:8;:20;17434:10;17425:20;;;;;;;;;;;;;;;;:30;;17417:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;17541:6;17517:8;:20;17526:10;17517:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;17574:6;17557:8;:13;17566:3;17557:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;17616:3;17595:33;;17604:10;17595:33;;;17621:6;17595:33;;;;;;:::i;:::-;;;;;;;;17691:4;17684:11;;17321:381;;;;:::o;18686:151::-;18769:17;18805:7;:15;18813:6;18805:15;;;;;;;;;;;;;;;:25;18821:8;18805:25;;;;;;;;;;;;;;;;18798:32;;18686:151;;;;:::o;7:139:2:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:139::-;;236:6;223:20;214:29;;252:33;279:5;252:33;:::i;:::-;204:87;;;;:::o;297:262::-;;405:2;393:9;384:7;380:23;376:32;373:2;;;421:1;418;411:12;373:2;464:1;489:53;534:7;525:6;514:9;510:22;489:53;:::i;:::-;479:63;;435:117;363:196;;;;:::o;565:407::-;;;690:2;678:9;669:7;665:23;661:32;658:2;;;706:1;703;696:12;658:2;749:1;774:53;819:7;810:6;799:9;795:22;774:53;:::i;:::-;764:63;;720:117;876:2;902:53;947:7;938:6;927:9;923:22;902:53;:::i;:::-;892:63;;847:118;648:324;;;;;:::o;978:552::-;;;;1120:2;1108:9;1099:7;1095:23;1091:32;1088:2;;;1136:1;1133;1126:12;1088:2;1179:1;1204:53;1249:7;1240:6;1229:9;1225:22;1204:53;:::i;:::-;1194:63;;1150:117;1306:2;1332:53;1377:7;1368:6;1357:9;1353:22;1332:53;:::i;:::-;1322:63;;1277:118;1434:2;1460:53;1505:7;1496:6;1485:9;1481:22;1460:53;:::i;:::-;1450:63;;1405:118;1078:452;;;;;:::o;1536:407::-;;;1661:2;1649:9;1640:7;1636:23;1632:32;1629:2;;;1677:1;1674;1667:12;1629:2;1720:1;1745:53;1790:7;1781:6;1770:9;1766:22;1745:53;:::i;:::-;1735:63;;1691:117;1847:2;1873:53;1918:7;1909:6;1898:9;1894:22;1873:53;:::i;:::-;1863:63;;1818:118;1619:324;;;;;:::o;1949:109::-;2030:21;2045:5;2030:21;:::i;:::-;2025:3;2018:34;2008:50;;:::o;2064:364::-;;2180:39;2213:5;2180:39;:::i;:::-;2235:71;2299:6;2294:3;2235:71;:::i;:::-;2228:78;;2315:52;2360:6;2355:3;2348:4;2341:5;2337:16;2315:52;:::i;:::-;2392:29;2414:6;2392:29;:::i;:::-;2387:3;2383:39;2376:46;;2156:272;;;;;:::o;2434:379::-;;2597:67;2661:2;2656:3;2597:67;:::i;:::-;2590:74;;2694:34;2690:1;2685:3;2681:11;2674:55;2760:17;2755:2;2750:3;2746:12;2739:39;2804:2;2799:3;2795:12;2788:19;;2580:233;;;:::o;2819:389::-;;2982:67;3046:2;3041:3;2982:67;:::i;:::-;2975:74;;3079:34;3075:1;3070:3;3066:11;3059:55;3145:27;3140:2;3135:3;3131:12;3124:49;3199:2;3194:3;3190:12;3183:19;;2965:243;;;:::o;3214:118::-;3301:24;3319:5;3301:24;:::i;:::-;3296:3;3289:37;3279:53;;:::o;3338:112::-;3421:22;3437:5;3421:22;:::i;:::-;3416:3;3409:35;3399:51;;:::o;3456:210::-;;3581:2;3570:9;3566:18;3558:26;;3594:65;3656:1;3645:9;3641:17;3632:6;3594:65;:::i;:::-;3548:118;;;;:::o;3672:313::-;;3823:2;3812:9;3808:18;3800:26;;3872:9;3866:4;3862:20;3858:1;3847:9;3843:17;3836:47;3900:78;3973:4;3964:6;3900:78;:::i;:::-;3892:86;;3790:195;;;;:::o;3991:419::-;;4195:2;4184:9;4180:18;4172:26;;4244:9;4238:4;4234:20;4230:1;4219:9;4215:17;4208:47;4272:131;4398:4;4272:131;:::i;:::-;4264:139;;4162:248;;;:::o;4416:419::-;;4620:2;4609:9;4605:18;4597:26;;4669:9;4663:4;4659:20;4655:1;4644:9;4640:17;4633:47;4697:131;4823:4;4697:131;:::i;:::-;4689:139;;4587:248;;;:::o;4841:222::-;;4972:2;4961:9;4957:18;4949:26;;4985:71;5053:1;5042:9;5038:17;5029:6;4985:71;:::i;:::-;4939:124;;;;:::o;5069:214::-;;5196:2;5185:9;5181:18;5173:26;;5209:67;5273:1;5262:9;5258:17;5249:6;5209:67;:::i;:::-;5163:120;;;;:::o;5289:99::-;;5375:5;5369:12;5359:22;;5348:40;;;:::o;5394:169::-;;5512:6;5507:3;5500:19;5552:4;5547:3;5543:14;5528:29;;5490:73;;;;:::o;5569:305::-;;5628:20;5646:1;5628:20;:::i;:::-;5623:25;;5662:20;5680:1;5662:20;:::i;:::-;5657:25;;5816:1;5748:66;5744:74;5741:1;5738:81;5735:2;;;5822:18;;:::i;:::-;5735:2;5866:1;5863;5859:9;5852:16;;5613:261;;;;:::o;5880:191::-;;5940:20;5958:1;5940:20;:::i;:::-;5935:25;;5974:20;5992:1;5974:20;:::i;:::-;5969:25;;6013:1;6010;6007:8;6004:2;;;6018:18;;:::i;:::-;6004:2;6063:1;6060;6056:9;6048:17;;5925:146;;;;:::o;6077:96::-;;6143:24;6161:5;6143:24;:::i;:::-;6132:35;;6122:51;;;:::o;6179:90::-;;6256:5;6249:13;6242:21;6231:32;;6221:48;;;:::o;6275:126::-;;6352:42;6345:5;6341:54;6330:65;;6320:81;;;:::o;6407:77::-;;6473:5;6462:16;;6452:32;;;:::o;6490:86::-;;6565:4;6558:5;6554:16;6543:27;;6533:43;;;:::o;6582:307::-;6650:1;6660:113;6674:6;6671:1;6668:13;6660:113;;;6759:1;6754:3;6750:11;6744:18;6740:1;6735:3;6731:11;6724:39;6696:2;6693:1;6689:10;6684:15;;6660:113;;;6791:6;6788:1;6785:13;6782:2;;;6871:1;6862:6;6857:3;6853:16;6846:27;6782:2;6631:258;;;;:::o;6895:320::-;;6976:1;6970:4;6966:12;6956:22;;7023:1;7017:4;7013:12;7044:18;7034:2;;7100:4;7092:6;7088:17;7078:27;;7034:2;7162;7154:6;7151:14;7131:18;7128:38;7125:2;;;7181:18;;:::i;:::-;7125:2;6946:269;;;;:::o;7221:180::-;7269:77;7266:1;7259:88;7366:4;7363:1;7356:15;7390:4;7387:1;7380:15;7407:180;7455:77;7452:1;7445:88;7552:4;7549:1;7542:15;7576:4;7573:1;7566:15;7593:102;;7685:2;7681:7;7676:2;7669:5;7665:14;7661:28;7651:38;;7641:54;;;:::o;7701:122::-;7774:24;7792:5;7774:24;:::i;:::-;7767:5;7764:35;7754:2;;7813:1;7810;7803:12;7754:2;7744:79;:::o;7829:122::-;7902:24;7920:5;7902:24;:::i;:::-;7895:5;7892:35;7882:2;;7941:1;7938;7931:12;7882:2;7872:79;:::o",
    "source": "// https://eips.ethereum.org/EIPS/eip-20\n// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n    /**\n     * @dev Returns true if `account` is a contract.\n     *\n     * [IMPORTANT]\n     * ====\n     * It is unsafe to assume that an address for which this function returns\n     * false is an externally-owned account (EOA) and not a contract.\n     *\n     * Among others, `isContract` will return false for the following\n     * types of addresses:\n     *\n     *  - an externally-owned account\n     *  - a contract in construction\n     *  - an address where a contract will be created\n     *  - an address where a contract lived, but was destroyed\n     * ====\n     */\n    function isContract(address account) internal view returns (bool) {\n        // This method relies on extcodesize, which returns 0 for contracts in\n        // construction, since the code is only stored at the end of the\n        // constructor execution.\n\n        uint256 size;\n        // solhint-disable-next-line no-inline-assembly\n        assembly { size := extcodesize(account) }\n        return size > 0;\n    }\n\n    /**\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n     * `recipient`, forwarding all available gas and reverting on errors.\n     *\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\n     * imposed by `transfer`, making them unable to receive funds via\n     * `transfer`. {sendValue} removes this limitation.\n     *\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n     *\n     * IMPORTANT: because control is transferred to `recipient`, care must be\n     * taken to not create reentrancy vulnerabilities. Consider using\n     * {ReentrancyGuard} or the\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n     */\n    function sendValue(address payable recipient, uint256 amount) internal {\n        require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value\n        (bool success, ) = recipient.call{ value: amount }(\"\");\n        require(success, \"Address: unable to send value, recipient may have reverted\");\n    }\n\n    /**\n     * @dev Performs a Solidity function call using a low level `call`. A\n     * plain`call` is an unsafe replacement for a function call: use this\n     * function instead.\n     *\n     * If `target` reverts with a revert reason, it is bubbled up by this\n     * function (like regular Solidity function calls).\n     *\n     * Returns the raw returned data. To convert to the expected return value,\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n     *\n     * Requirements:\n     *\n     * - `target` must be a contract.\n     * - calling `target` with `data` must not revert.\n     *\n     * _Available since v3.1._\n     */\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n      return functionCall(target, data, \"Address: low-level call failed\");\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n     * `errorMessage` as a fallback revert reason when `target` reverts.\n     *\n     * _Available since v3.1._\n     */\n    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\n        return functionCallWithValue(target, data, 0, errorMessage);\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n     * but also transferring `value` wei to `target`.\n     *\n     * Requirements:\n     *\n     * - the calling contract must have an ETH balance of at least `value`.\n     * - the called Solidity function must be `payable`.\n     *\n     * _Available since v3.1._\n     */\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n        return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\n     *\n     * _Available since v3.1._\n     */\n    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\n        require(address(this).balance >= value, \"Address: insufficient balance for call\");\n        require(isContract(target), \"Address: call to non-contract\");\n\n        // solhint-disable-next-line avoid-low-level-calls\n        (bool success, bytes memory returndata) = target.call{ value: value }(data);\n        return _verifyCallResult(success, returndata, errorMessage);\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n     * but performing a static call.\n     *\n     * _Available since v3.3._\n     */\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n        return functionStaticCall(target, data, \"Address: low-level static call failed\");\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n     * but performing a static call.\n     *\n     * _Available since v3.3._\n     */\n    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\n        require(isContract(target), \"Address: static call to non-contract\");\n\n        // solhint-disable-next-line avoid-low-level-calls\n        (bool success, bytes memory returndata) = target.staticcall(data);\n        return _verifyCallResult(success, returndata, errorMessage);\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n     * but performing a delegate call.\n     *\n     * _Available since v3.4._\n     */\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n        return functionDelegateCall(target, data, \"Address: low-level delegate call failed\");\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n     * but performing a delegate call.\n     *\n     * _Available since v3.4._\n     */\n    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\n        require(isContract(target), \"Address: delegate call to non-contract\");\n\n        // solhint-disable-next-line avoid-low-level-calls\n        (bool success, bytes memory returndata) = target.delegatecall(data);\n        return _verifyCallResult(success, returndata, errorMessage);\n    }\n\n    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\n        if (success) {\n            return returndata;\n        } else {\n            // Look for revert reason and bubble it up if present\n            if (returndata.length > 0) {\n                // The easiest way to bubble the revert reason is using memory via assembly\n\n                // solhint-disable-next-line no-inline-assembly\n                assembly {\n                    let returndata_size := mload(returndata)\n                    revert(add(32, returndata), returndata_size)\n                }\n            } else {\n                revert(errorMessage);\n            }\n        }\n    }\n}\n\n/**\n * @dev Interface of the ERC20 standard as defined in the EIP.\n */\ninterface IERC20 {\n    /**\n     * @dev Returns the amount of tokens in existence.\n     */\n    function totalSupply() external view returns (uint256);\n\n    /**\n     * @dev Returns the amount of tokens owned by `account`.\n     */\n    function balanceOf(address account) external view returns (uint256);\n\n    /**\n     * @dev Moves `amount` tokens from the caller's account to `recipient`.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * Emits a {Transfer} event.\n     */\n    function transfer(address recipient, uint256 amount) external returns (bool);\n\n    /**\n     * @dev Returns the remaining number of tokens that `spender` will be\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\n     * zero by default.\n     *\n     * This value changes when {approve} or {transferFrom} are called.\n     */\n    function allowance(address owner, address spender) external view returns (uint256);\n\n    /**\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\n     * that someone may use both the old and the new allowance by unfortunate\n     * transaction ordering. One possible solution to mitigate this race\n     * condition is to first reduce the spender's allowance to 0 and set the\n     * desired value afterwards:\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n     *\n     * Emits an {Approval} event.\n     */\n    function approve(address spender, uint256 amount) external returns (bool);\n\n    /**\n     * @dev Moves `amount` tokens from `sender` to `recipient` using the\n     * allowance mechanism. `amount` is then deducted from the caller's\n     * allowance.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * Emits a {Transfer} event.\n     */\n    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\n\n    /**\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\n     * another (`to`).\n     *\n     * Note that `value` may be zero.\n     */\n    event Transfer(address indexed from, address indexed to, uint256 value);\n\n    /**\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n     * a call to {approve}. `value` is the new allowance.\n     */\n    event Approval(address indexed owner, address indexed spender, uint256 value);\n}\n\n/**\n * @title SafeERC20\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\n * contract returns false). Tokens that return no value (and instead revert or\n * throw on failure) are also supported, non-reverting calls are assumed to be\n * successful.\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\n */\nlibrary SafeERC20 {\n    using Address for address;\n\n    function safeTransfer(IERC20 token, address to, uint256 value) internal {\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\n    }\n\n    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\n    }\n\n    /**\n     * @dev Deprecated. This function has issues similar to the ones found in\n     * {IERC20-approve}, and its usage is discouraged.\n     *\n     * Whenever possible, use {safeIncreaseAllowance} and\n     * {safeDecreaseAllowance} instead.\n     */\n    function safeApprove(IERC20 token, address spender, uint256 value) internal {\n        // safeApprove should only be called when setting an initial allowance,\n        // or when resetting it to zero. To increase and decrease it, use\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\n        // solhint-disable-next-line max-line-length\n        require((value == 0) || (token.allowance(address(this), spender) == 0),\n            \"SafeERC20: approve from non-zero to non-zero allowance\"\n        );\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\n    }\n\n    function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {\n        uint256 newAllowance = token.allowance(address(this), spender) + value;\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\n    }\n\n    function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {\n            uint256 oldAllowance = token.allowance(address(this), spender);\n            require(oldAllowance >= value, \"SafeERC20: decreased allowance below zero\");\n            uint256 newAllowance = oldAllowance - value;\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\n    }\n\n    /**\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\n     * @param token The token targeted by the call.\n     * @param data The call data (encoded using abi.encode or one of its variants).\n     */\n    function _callOptionalReturn(IERC20 token, bytes memory data) private {\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\n        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that\n        // the target address contains contract code and also asserts for success in the low-level call.\n\n        bytes memory returndata = address(token).functionCall(data, \"SafeERC20: low-level call failed\");\n        if (returndata.length > 0) { // Return data is optional\n            // solhint-disable-next-line max-line-length\n            require(abi.decode(returndata, (bool)), \"SafeERC20: ERC20 operation did not succeed\");\n        }\n    }\n}\ninterface iToken {\n\n    /// @param _owner The address from which the balance will be retrieved\n    /// @return balance the balance\n    function balanceOf(address _owner) external view returns (uint256 balance);\n\n    /// @notice send `_value` token to `_to` from `msg.sender`\n    /// @param _to The address of the recipient\n    /// @param _value The amount of token to be transferred\n    /// @return success Whether the transfer was successful or not\n    function transfer(address _to, uint256 _value)  external returns (bool success);\n\n    /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from`\n    /// @param _from The address of the sender\n    /// @param _to The address of the recipient\n    /// @param _value The amount of token to be transferred\n    /// @return success Whether the transfer was successful or not\n    function transferFrom(address _from, address _to, uint256 _value) external returns (bool success);\n\n    /// @notice `msg.sender` approves `_addr` to spend `_value` tokens\n    /// @param _spender The address of the account able to transfer the tokens\n    /// @param _value The amount of wei to be approved for transfer\n    /// @return success Whether the approval was successful or not\n    function approve(address _spender  , uint256 _value) external returns (bool success);\n\n    /// @param _owner The address of the account owning tokens\n    /// @param _spender The address of the account able to transfer the tokens\n    /// @return remaining Amount of remaining tokens allowed to spent\n    function allowance(address _owner, address _spender) external view returns (uint256 remaining);\n\n    event Transfer(address indexed _from, address indexed _to, uint256 _value);\n    event Approval(address indexed _owner, address indexed _spender, uint256 _value);\n}\n\ncontract Test_Token is iToken {\n    using SafeERC20 for iToken;\n\n    uint256 constant private MAX_UINT256 = 2**256 - 1;\n    mapping (address => uint256) public balances;\n    mapping (address => mapping (address => uint256)) public allowed;\n    uint256 public totalSupply;\n    /*\n    NOTE:\n    The following variables are OPTIONAL vanities. One does not have to include them.\n    They allow one to customise the token contract & in no way influences the core functionality.\n    Some wallets/interfaces might not even bother to look at this information.\n    */\n    string public name;                   //fancy name: eg Simon Bucks\n    uint8 public decimals;                //How many decimals to show.\n    string public symbol;                 //An identifier: eg SBX\n\n    constructor(uint256 _initialAmount, string memory _tokenName, uint8 _decimalUnits, string  memory _tokenSymbol) {\n        balances[msg.sender] = _initialAmount;               // Give the creator all initial tokens\n        totalSupply = _initialAmount;                        // Update total supply\n        name = _tokenName;                                   // Set the name for display purposes\n        decimals = _decimalUnits;                            // Amount of decimals for display purposes\n        symbol = _tokenSymbol;                               // Set the symbol for display purposes\n    }\n\n    function transfer(address _to, uint256 _value) public override returns (bool success) {\n        require(balances[msg.sender] >= _value, \"token balance is lower than the value requested\");\n        balances[msg.sender] -= _value;\n        balances[_to] += _value;\n        emit Transfer(msg.sender, _to, _value); //solhint-disable-line indent, no-unused-vars\n        return true;\n    }\n\n    function transferFrom(address _from, address _to, uint256 _value) public override returns (bool success) {\n        uint256 allowance = allowed[_from][msg.sender];\n        require(balances[_from] >= _value && allowance >= _value, \"token balance or allowance is lower than amount requested\");\n        balances[_to] += _value;\n        balances[_from] -= _value;\n        if (allowance < MAX_UINT256) {\n            allowed[_from][msg.sender] -= _value;\n        }\n        emit Transfer(_from, _to, _value); //solhint-disable-line indent, no-unused-vars\n        return true;\n    }\n\n    function balanceOf(address _owner) public override view returns (uint256 balance) {\n        return balances[_owner];\n    }\n\n    function approve(address _spender, uint256 _value) public override returns (bool success) {\n        allowed[msg.sender][_spender] = _value;\n        emit Approval(msg.sender, _spender, _value); //solhint-disable-line indent, no-unused-vars\n        return true;\n    }\n\n    function allowance(address _owner, address _spender) public override view returns (uint256 remaining) {\n        return allowed[_owner][_spender];\n    }\n}",
    "sourcePath": "/Users/jordigironamezcua/pruebas/contracts/Token.sol",
    "ast": {
        "absolutePath": "/Users/jordigironamezcua/pruebas/contracts/Token.sol",
        "exportedSymbols": {
            "Address": [
                328
            ],
            "IERC20": [
                404
            ],
            "SafeERC20": [
                623
            ],
            "Test_Token": [
                928
            ],
            "iToken": [
                690
            ]
        },
        "id": 929,
        "license": "MIT",
        "nodeType": "SourceUnit",
        "nodes": [
            {
                "id": 34,
                "literals": [
                    "solidity",
                    "^",
                    "0.8",
                    ".0"
                ],
                "nodeType": "PragmaDirective",
                "src": "73:23:1"
            },
            {
                "abstract": false,
                "baseContracts": [],
                "contractDependencies": [],
                "contractKind": "library",
                "documentation": {
                    "id": 35,
                    "nodeType": "StructuredDocumentation",
                    "src": "98:67:1",
                    "text": " @dev Collection of functions related to the address type"
                },
                "fullyImplemented": true,
                "id": 328,
                "linearizedBaseContracts": [
                    328
                ],
                "name": "Address",
                "nodeType": "ContractDefinition",
                "nodes": [
                    {
                        "body": {
                            "id": 51,
                            "nodeType": "Block",
                            "src": "824:347:1",
                            "statements": [
                                {
                                    "assignments": [
                                        44
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 44,
                                            "mutability": "mutable",
                                            "name": "size",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 51,
                                            "src": "1021:12:1",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 43,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "1021:7:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 45,
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "1021:12:1"
                                },
                                {
                                    "AST": {
                                        "nodeType": "YulBlock",
                                        "src": "1108:32:1",
                                        "statements": [
                                            {
                                                "nodeType": "YulAssignment",
                                                "src": "1110:28:1",
                                                "value": {
                                                    "arguments": [
                                                        {
                                                            "name": "account",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "1130:7:1"
                                                        }
                                                    ],
                                                    "functionName": {
                                                        "name": "extcodesize",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "1118:11:1"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "1118:20:1"
                                                },
                                                "variableNames": [
                                                    {
                                                        "name": "size",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "1110:4:1"
                                                    }
                                                ]
                                            }
                                        ]
                                    },
                                    "evmVersion": "istanbul",
                                    "externalReferences": [
                                        {
                                            "declaration": 38,
                                            "isOffset": false,
                                            "isSlot": false,
                                            "src": "1130:7:1",
                                            "valueSize": 1
                                        },
                                        {
                                            "declaration": 44,
                                            "isOffset": false,
                                            "isSlot": false,
                                            "src": "1110:4:1",
                                            "valueSize": 1
                                        }
                                    ],
                                    "id": 46,
                                    "nodeType": "InlineAssembly",
                                    "src": "1099:41:1"
                                },
                                {
                                    "expression": {
                                        "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        },
                                        "id": 49,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "id": 47,
                                            "name": "size",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 44,
                                            "src": "1156:4:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": ">",
                                        "rightExpression": {
                                            "hexValue": "30",
                                            "id": 48,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "1163:1:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_rational_0_by_1",
                                                "typeString": "int_const 0"
                                            },
                                            "value": "0"
                                        },
                                        "src": "1156:8:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "functionReturnParameters": 42,
                                    "id": 50,
                                    "nodeType": "Return",
                                    "src": "1149:15:1"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 36,
                            "nodeType": "StructuredDocumentation",
                            "src": "188:565:1",
                            "text": " @dev Returns true if `account` is a contract.\n [IMPORTANT]\n ====\n It is unsafe to assume that an address for which this function returns\n false is an externally-owned account (EOA) and not a contract.\n Among others, `isContract` will return false for the following\n types of addresses:\n  - an externally-owned account\n  - a contract in construction\n  - an address where a contract will be created\n  - an address where a contract lived, but was destroyed\n ===="
                        },
                        "id": 52,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "isContract",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 39,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 38,
                                    "mutability": "mutable",
                                    "name": "account",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 52,
                                    "src": "778:15:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 37,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "778:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "777:17:1"
                        },
                        "returnParameters": {
                            "id": 42,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 41,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 52,
                                    "src": "818:4:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 40,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "818:4:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "817:6:1"
                        },
                        "scope": 328,
                        "src": "758:413:1",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 85,
                            "nodeType": "Block",
                            "src": "2159:320:1",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 67,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "arguments": [
                                                            {
                                                                "id": 63,
                                                                "name": "this",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 4294967268,
                                                                "src": "2185:4:1",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_contract$_Address_$328",
                                                                    "typeString": "library Address"
                                                                }
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_contract$_Address_$328",
                                                                    "typeString": "library Address"
                                                                }
                                                            ],
                                                            "id": 62,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "nodeType": "ElementaryTypeNameExpression",
                                                            "src": "2177:7:1",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_type$_t_address_$",
                                                                "typeString": "type(address)"
                                                            },
                                                            "typeName": {
                                                                "id": 61,
                                                                "name": "address",
                                                                "nodeType": "ElementaryTypeName",
                                                                "src": "2177:7:1",
                                                                "typeDescriptions": {}
                                                            }
                                                        },
                                                        "id": 64,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "typeConversion",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "2177:13:1",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "id": 65,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "balance",
                                                    "nodeType": "MemberAccess",
                                                    "src": "2177:21:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": ">=",
                                                "rightExpression": {
                                                    "id": 66,
                                                    "name": "amount",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 57,
                                                    "src": "2202:6:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "2177:31:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "416464726573733a20696e73756666696369656e742062616c616e6365",
                                                "id": 68,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "2210:31:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9",
                                                    "typeString": "literal_string \"Address: insufficient balance\""
                                                },
                                                "value": "Address: insufficient balance"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9",
                                                    "typeString": "literal_string \"Address: insufficient balance\""
                                                }
                                            ],
                                            "id": 60,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "2169:7:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 69,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2169:73:1",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 70,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2169:73:1"
                                },
                                {
                                    "assignments": [
                                        72,
                                        null
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 72,
                                            "mutability": "mutable",
                                            "name": "success",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 85,
                                            "src": "2331:12:1",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            },
                                            "typeName": {
                                                "id": 71,
                                                "name": "bool",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "2331:4:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "visibility": "internal"
                                        },
                                        null
                                    ],
                                    "id": 79,
                                    "initialValue": {
                                        "arguments": [
                                            {
                                                "hexValue": "",
                                                "id": 77,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "2381:2:1",
                                                "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": {
                                                    "id": 73,
                                                    "name": "recipient",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 55,
                                                    "src": "2349:9:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address_payable",
                                                        "typeString": "address payable"
                                                    }
                                                },
                                                "id": 74,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "call",
                                                "nodeType": "MemberAccess",
                                                "src": "2349:14:1",
                                                "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": 76,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "names": [
                                                "value"
                                            ],
                                            "nodeType": "FunctionCallOptions",
                                            "options": [
                                                {
                                                    "id": 75,
                                                    "name": "amount",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 57,
                                                    "src": "2372:6:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                }
                                            ],
                                            "src": "2349:31:1",
                                            "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": 78,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2349:35:1",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                                            "typeString": "tuple(bool,bytes memory)"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "2330:54:1"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 81,
                                                "name": "success",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 72,
                                                "src": "2402:7:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d61792068617665207265766572746564",
                                                "id": 82,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "2411:60:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae",
                                                    "typeString": "literal_string \"Address: unable to send value, recipient may have reverted\""
                                                },
                                                "value": "Address: unable to send value, recipient may have reverted"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae",
                                                    "typeString": "literal_string \"Address: unable to send value, recipient may have reverted\""
                                                }
                                            ],
                                            "id": 80,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "2394:7:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 83,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2394:78:1",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 84,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2394:78:1"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 53,
                            "nodeType": "StructuredDocumentation",
                            "src": "1177:906:1",
                            "text": " @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n `recipient`, forwarding all available gas and reverting on errors.\n https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n of certain opcodes, possibly making contracts go over the 2300 gas limit\n imposed by `transfer`, making them unable to receive funds via\n `transfer`. {sendValue} removes this limitation.\n https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n IMPORTANT: because control is transferred to `recipient`, care must be\n taken to not create reentrancy vulnerabilities. Consider using\n {ReentrancyGuard} or the\n https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]."
                        },
                        "id": 86,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "sendValue",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 58,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 55,
                                    "mutability": "mutable",
                                    "name": "recipient",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 86,
                                    "src": "2107:25:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address_payable",
                                        "typeString": "address payable"
                                    },
                                    "typeName": {
                                        "id": 54,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2107:15:1",
                                        "stateMutability": "payable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address_payable",
                                            "typeString": "address payable"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 57,
                                    "mutability": "mutable",
                                    "name": "amount",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 86,
                                    "src": "2134:14:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 56,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2134:7:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2106:43:1"
                        },
                        "returnParameters": {
                            "id": 59,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "2159:0:1"
                        },
                        "scope": 328,
                        "src": "2088:391:1",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 102,
                            "nodeType": "Block",
                            "src": "3309:82:1",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 97,
                                                "name": "target",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 89,
                                                "src": "3337:6:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 98,
                                                "name": "data",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 91,
                                                "src": "3345:4:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            },
                                            {
                                                "hexValue": "416464726573733a206c6f772d6c6576656c2063616c6c206661696c6564",
                                                "id": 99,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "3351:32:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_24d7ab5d382116e64324f19950ca9340b8af1ddeb09a8d026e0a3c6a01dcc9df",
                                                    "typeString": "literal_string \"Address: low-level call failed\""
                                                },
                                                "value": "Address: low-level call failed"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_24d7ab5d382116e64324f19950ca9340b8af1ddeb09a8d026e0a3c6a01dcc9df",
                                                    "typeString": "literal_string \"Address: low-level call failed\""
                                                }
                                            ],
                                            "id": 96,
                                            "name": "functionCall",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                103,
                                                123
                                            ],
                                            "referencedDeclaration": 123,
                                            "src": "3324:12:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                                                "typeString": "function (address,bytes memory,string memory) returns (bytes memory)"
                                            }
                                        },
                                        "id": 100,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3324:60:1",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                        }
                                    },
                                    "functionReturnParameters": 95,
                                    "id": 101,
                                    "nodeType": "Return",
                                    "src": "3317:67:1"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 87,
                            "nodeType": "StructuredDocumentation",
                            "src": "2485:730:1",
                            "text": " @dev Performs a Solidity function call using a low level `call`. A\n plain`call` is an unsafe replacement for a function call: use this\n function instead.\n If `target` reverts with a revert reason, it is bubbled up by this\n function (like regular Solidity function calls).\n Returns the raw returned data. To convert to the expected return value,\n use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n Requirements:\n - `target` must be a contract.\n - calling `target` with `data` must not revert.\n _Available since v3.1._"
                        },
                        "id": 103,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "functionCall",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 92,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 89,
                                    "mutability": "mutable",
                                    "name": "target",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 103,
                                    "src": "3242:14:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 88,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3242:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 91,
                                    "mutability": "mutable",
                                    "name": "data",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 103,
                                    "src": "3258:17:1",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 90,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3258:5:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3241:35:1"
                        },
                        "returnParameters": {
                            "id": 95,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 94,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 103,
                                    "src": "3295:12:1",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 93,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3295:5:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3294:14:1"
                        },
                        "scope": 328,
                        "src": "3220:171:1",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 122,
                            "nodeType": "Block",
                            "src": "3730:76:1",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 116,
                                                "name": "target",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 106,
                                                "src": "3769:6:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 117,
                                                "name": "data",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 108,
                                                "src": "3777:4:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            },
                                            {
                                                "hexValue": "30",
                                                "id": 118,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "number",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "3783:1:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_rational_0_by_1",
                                                    "typeString": "int_const 0"
                                                },
                                                "value": "0"
                                            },
                                            {
                                                "id": 119,
                                                "name": "errorMessage",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 110,
                                                "src": "3786:12:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_string_memory_ptr",
                                                    "typeString": "string memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                },
                                                {
                                                    "typeIdentifier": "t_rational_0_by_1",
                                                    "typeString": "int_const 0"
                                                },
                                                {
                                                    "typeIdentifier": "t_string_memory_ptr",
                                                    "typeString": "string memory"
                                                }
                                            ],
                                            "id": 115,
                                            "name": "functionCallWithValue",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                143,
                                                193
                                            ],
                                            "referencedDeclaration": 193,
                                            "src": "3747:21:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                                                "typeString": "function (address,bytes memory,uint256,string memory) returns (bytes memory)"
                                            }
                                        },
                                        "id": 120,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3747:52:1",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                        }
                                    },
                                    "functionReturnParameters": 114,
                                    "id": 121,
                                    "nodeType": "Return",
                                    "src": "3740:59:1"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 104,
                            "nodeType": "StructuredDocumentation",
                            "src": "3397:211:1",
                            "text": " @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n `errorMessage` as a fallback revert reason when `target` reverts.\n _Available since v3.1._"
                        },
                        "id": 123,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "functionCall",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 111,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 106,
                                    "mutability": "mutable",
                                    "name": "target",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 123,
                                    "src": "3635:14:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 105,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3635:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 108,
                                    "mutability": "mutable",
                                    "name": "data",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 123,
                                    "src": "3651:17:1",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 107,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3651:5:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 110,
                                    "mutability": "mutable",
                                    "name": "errorMessage",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 123,
                                    "src": "3670:26:1",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_memory_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 109,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3670:6:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3634:63:1"
                        },
                        "returnParameters": {
                            "id": 114,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 113,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 123,
                                    "src": "3716:12:1",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 112,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3716:5:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3715:14:1"
                        },
                        "scope": 328,
                        "src": "3613:193:1",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 142,
                            "nodeType": "Block",
                            "src": "4281:111:1",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 136,
                                                "name": "target",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 126,
                                                "src": "4320:6:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 137,
                                                "name": "data",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 128,
                                                "src": "4328:4:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            },
                                            {
                                                "id": 138,
                                                "name": "value",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 130,
                                                "src": "4334:5:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            {
                                                "hexValue": "416464726573733a206c6f772d6c6576656c2063616c6c20776974682076616c7565206661696c6564",
                                                "id": 139,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "4341:43:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_88a4a0b5e975840320a0475d4027005235904fdb5ece94df156f3d717cb2dbfc",
                                                    "typeString": "literal_string \"Address: low-level call with value failed\""
                                                },
                                                "value": "Address: low-level call with value failed"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_88a4a0b5e975840320a0475d4027005235904fdb5ece94df156f3d717cb2dbfc",
                                                    "typeString": "literal_string \"Address: low-level call with value failed\""
                                                }
                                            ],
                                            "id": 135,
                                            "name": "functionCallWithValue",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                143,
                                                193
                                            ],
                                            "referencedDeclaration": 193,
                                            "src": "4298:21:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                                                "typeString": "function (address,bytes memory,uint256,string memory) returns (bytes memory)"
                                            }
                                        },
                                        "id": 140,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4298:87:1",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                        }
                                    },
                                    "functionReturnParameters": 134,
                                    "id": 141,
                                    "nodeType": "Return",
                                    "src": "4291:94:1"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 124,
                            "nodeType": "StructuredDocumentation",
                            "src": "3812:351:1",
                            "text": " @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but also transferring `value` wei to `target`.\n Requirements:\n - the calling contract must have an ETH balance of at least `value`.\n - the called Solidity function must be `payable`.\n _Available since v3.1._"
                        },
                        "id": 143,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "functionCallWithValue",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 131,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 126,
                                    "mutability": "mutable",
                                    "name": "target",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 143,
                                    "src": "4199:14:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 125,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4199:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 128,
                                    "mutability": "mutable",
                                    "name": "data",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 143,
                                    "src": "4215:17:1",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 127,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4215:5:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 130,
                                    "mutability": "mutable",
                                    "name": "value",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 143,
                                    "src": "4234:13:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 129,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4234:7:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4198:50:1"
                        },
                        "returnParameters": {
                            "id": 134,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 133,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 143,
                                    "src": "4267:12:1",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 132,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4267:5:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4266:14:1"
                        },
                        "scope": 328,
                        "src": "4168:224:1",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 192,
                            "nodeType": "Block",
                            "src": "4781:382:1",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 164,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "arguments": [
                                                            {
                                                                "id": 160,
                                                                "name": "this",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 4294967268,
                                                                "src": "4807:4:1",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_contract$_Address_$328",
                                                                    "typeString": "library Address"
                                                                }
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_contract$_Address_$328",
                                                                    "typeString": "library Address"
                                                                }
                                                            ],
                                                            "id": 159,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "nodeType": "ElementaryTypeNameExpression",
                                                            "src": "4799:7:1",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_type$_t_address_$",
                                                                "typeString": "type(address)"
                                                            },
                                                            "typeName": {
                                                                "id": 158,
                                                                "name": "address",
                                                                "nodeType": "ElementaryTypeName",
                                                                "src": "4799:7:1",
                                                                "typeDescriptions": {}
                                                            }
                                                        },
                                                        "id": 161,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "typeConversion",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "4799:13:1",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "id": 162,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "balance",
                                                    "nodeType": "MemberAccess",
                                                    "src": "4799:21:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": ">=",
                                                "rightExpression": {
                                                    "id": 163,
                                                    "name": "value",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 150,
                                                    "src": "4824:5:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "4799:30:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c",
                                                "id": 165,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "4831:40:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c",
                                                    "typeString": "literal_string \"Address: insufficient balance for call\""
                                                },
                                                "value": "Address: insufficient balance for call"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c",
                                                    "typeString": "literal_string \"Address: insufficient balance for call\""
                                                }
                                            ],
                                            "id": 157,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "4791:7:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 166,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4791:81:1",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 167,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4791:81:1"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "id": 170,
                                                        "name": "target",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 146,
                                                        "src": "4901:6:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    ],
                                                    "id": 169,
                                                    "name": "isContract",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 52,
                                                    "src": "4890:10:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                                                        "typeString": "function (address) view returns (bool)"
                                                    }
                                                },
                                                "id": 171,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "4890:18:1",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374",
                                                "id": 172,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "4910:31:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad",
                                                    "typeString": "literal_string \"Address: call to non-contract\""
                                                },
                                                "value": "Address: call to non-contract"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad",
                                                    "typeString": "literal_string \"Address: call to non-contract\""
                                                }
                                            ],
                                            "id": 168,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "4882:7:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 173,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4882:60:1",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 174,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4882:60:1"
                                },
                                {
                                    "assignments": [
                                        176,
                                        178
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 176,
                                            "mutability": "mutable",
                                            "name": "success",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 192,
                                            "src": "5013:12:1",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            },
                                            "typeName": {
                                                "id": 175,
                                                "name": "bool",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "5013:4:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "visibility": "internal"
                                        },
                                        {
                                            "constant": false,
                                            "id": 178,
                                            "mutability": "mutable",
                                            "name": "returndata",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 192,
                                            "src": "5027:23:1",
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                "typeString": "bytes"
                                            },
                                            "typeName": {
                                                "id": 177,
                                                "name": "bytes",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "5027:5:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_storage_ptr",
                                                    "typeString": "bytes"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 185,
                                    "initialValue": {
                                        "arguments": [
                                            {
                                                "id": 183,
                                                "name": "data",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 148,
                                                "src": "5082:4:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                        "typeString": "bytes memory"
                                                    }
                                                ],
                                                "expression": {
                                                    "id": 179,
                                                    "name": "target",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 146,
                                                    "src": "5054:6:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "id": 180,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "call",
                                                "nodeType": "MemberAccess",
                                                "src": "5054:11:1",
                                                "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": 182,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "names": [
                                                "value"
                                            ],
                                            "nodeType": "FunctionCallOptions",
                                            "options": [
                                                {
                                                    "id": 181,
                                                    "name": "value",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 150,
                                                    "src": "5074:5:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                }
                                            ],
                                            "src": "5054:27:1",
                                            "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": 184,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5054:33:1",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                                            "typeString": "tuple(bool,bytes memory)"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "5012:75:1"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 187,
                                                "name": "success",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 176,
                                                "src": "5122:7:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "id": 188,
                                                "name": "returndata",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 178,
                                                "src": "5131:10:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            },
                                            {
                                                "id": 189,
                                                "name": "errorMessage",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 152,
                                                "src": "5143:12:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_string_memory_ptr",
                                                    "typeString": "string memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                },
                                                {
                                                    "typeIdentifier": "t_string_memory_ptr",
                                                    "typeString": "string memory"
                                                }
                                            ],
                                            "id": 186,
                                            "name": "_verifyCallResult",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 327,
                                            "src": "5104:17:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                                                "typeString": "function (bool,bytes memory,string memory) pure returns (bytes memory)"
                                            }
                                        },
                                        "id": 190,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5104:52:1",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                        }
                                    },
                                    "functionReturnParameters": 156,
                                    "id": 191,
                                    "nodeType": "Return",
                                    "src": "5097:59:1"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 144,
                            "nodeType": "StructuredDocumentation",
                            "src": "4398:237:1",
                            "text": " @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n with `errorMessage` as a fallback revert reason when `target` reverts.\n _Available since v3.1._"
                        },
                        "id": 193,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "functionCallWithValue",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 153,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 146,
                                    "mutability": "mutable",
                                    "name": "target",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 193,
                                    "src": "4671:14:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 145,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4671:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 148,
                                    "mutability": "mutable",
                                    "name": "data",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 193,
                                    "src": "4687:17:1",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 147,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4687:5:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 150,
                                    "mutability": "mutable",
                                    "name": "value",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 193,
                                    "src": "4706:13:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 149,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4706:7:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 152,
                                    "mutability": "mutable",
                                    "name": "errorMessage",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 193,
                                    "src": "4721:26:1",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_memory_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 151,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4721:6:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4670:78:1"
                        },
                        "returnParameters": {
                            "id": 156,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 155,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 193,
                                    "src": "4767:12:1",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 154,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4767:5:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4766:14:1"
                        },
                        "scope": 328,
                        "src": "4640:523:1",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 209,
                            "nodeType": "Block",
                            "src": "5440:97:1",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 204,
                                                "name": "target",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 196,
                                                "src": "5476:6:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 205,
                                                "name": "data",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 198,
                                                "src": "5484:4:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            },
                                            {
                                                "hexValue": "416464726573733a206c6f772d6c6576656c207374617469632063616c6c206661696c6564",
                                                "id": 206,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "5490:39:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_90ec82aa826a536a4cbfae44ecfa384680faa9a4b77344bce96aa761ad904df0",
                                                    "typeString": "literal_string \"Address: low-level static call failed\""
                                                },
                                                "value": "Address: low-level static call failed"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_90ec82aa826a536a4cbfae44ecfa384680faa9a4b77344bce96aa761ad904df0",
                                                    "typeString": "literal_string \"Address: low-level static call failed\""
                                                }
                                            ],
                                            "id": 203,
                                            "name": "functionStaticCall",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                210,
                                                245
                                            ],
                                            "referencedDeclaration": 245,
                                            "src": "5457:18:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                                                "typeString": "function (address,bytes memory,string memory) view returns (bytes memory)"
                                            }
                                        },
                                        "id": 207,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5457:73:1",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                        }
                                    },
                                    "functionReturnParameters": 202,
                                    "id": 208,
                                    "nodeType": "Return",
                                    "src": "5450:80:1"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 194,
                            "nodeType": "StructuredDocumentation",
                            "src": "5169:166:1",
                            "text": " @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a static call.\n _Available since v3.3._"
                        },
                        "id": 210,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "functionStaticCall",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 199,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 196,
                                    "mutability": "mutable",
                                    "name": "target",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 210,
                                    "src": "5368:14:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 195,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5368:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 198,
                                    "mutability": "mutable",
                                    "name": "data",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 210,
                                    "src": "5384:17:1",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 197,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5384:5:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "5367:35:1"
                        },
                        "returnParameters": {
                            "id": 202,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 201,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 210,
                                    "src": "5426:12:1",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 200,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5426:5:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "5425:14:1"
                        },
                        "scope": 328,
                        "src": "5340:197:1",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 244,
                            "nodeType": "Block",
                            "src": "5849:288:1",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "id": 224,
                                                        "name": "target",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 213,
                                                        "src": "5878:6:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    ],
                                                    "id": 223,
                                                    "name": "isContract",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 52,
                                                    "src": "5867:10:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                                                        "typeString": "function (address) view returns (bool)"
                                                    }
                                                },
                                                "id": 225,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "5867:18:1",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "416464726573733a207374617469632063616c6c20746f206e6f6e2d636f6e7472616374",
                                                "id": 226,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "5887:38:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_c79cc78e4f16ce3933a42b84c73868f93bb4a59c031a0acf576679de98c608a9",
                                                    "typeString": "literal_string \"Address: static call to non-contract\""
                                                },
                                                "value": "Address: static call to non-contract"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_c79cc78e4f16ce3933a42b84c73868f93bb4a59c031a0acf576679de98c608a9",
                                                    "typeString": "literal_string \"Address: static call to non-contract\""
                                                }
                                            ],
                                            "id": 222,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "5859:7:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 227,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5859:67:1",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 228,
                                    "nodeType": "ExpressionStatement",
                                    "src": "5859:67:1"
                                },
                                {
                                    "assignments": [
                                        230,
                                        232
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 230,
                                            "mutability": "mutable",
                                            "name": "success",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 244,
                                            "src": "5997:12:1",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            },
                                            "typeName": {
                                                "id": 229,
                                                "name": "bool",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "5997:4:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "visibility": "internal"
                                        },
                                        {
                                            "constant": false,
                                            "id": 232,
                                            "mutability": "mutable",
                                            "name": "returndata",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 244,
                                            "src": "6011:23:1",
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                "typeString": "bytes"
                                            },
                                            "typeName": {
                                                "id": 231,
                                                "name": "bytes",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "6011:5:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_storage_ptr",
                                                    "typeString": "bytes"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 237,
                                    "initialValue": {
                                        "arguments": [
                                            {
                                                "id": 235,
                                                "name": "data",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 215,
                                                "src": "6056:4:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "expression": {
                                                "id": 233,
                                                "name": "target",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 213,
                                                "src": "6038:6:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "id": 234,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "staticcall",
                                            "nodeType": "MemberAccess",
                                            "src": "6038:17:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                                                "typeString": "function (bytes memory) view returns (bool,bytes memory)"
                                            }
                                        },
                                        "id": 236,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "6038:23:1",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                                            "typeString": "tuple(bool,bytes memory)"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "5996:65:1"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 239,
                                                "name": "success",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 230,
                                                "src": "6096:7:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "id": 240,
                                                "name": "returndata",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 232,
                                                "src": "6105:10:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            },
                                            {
                                                "id": 241,
                                                "name": "errorMessage",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 217,
                                                "src": "6117:12:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_string_memory_ptr",
                                                    "typeString": "string memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                },
                                                {
                                                    "typeIdentifier": "t_string_memory_ptr",
                                                    "typeString": "string memory"
                                                }
                                            ],
                                            "id": 238,
                                            "name": "_verifyCallResult",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 327,
                                            "src": "6078:17:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                                                "typeString": "function (bool,bytes memory,string memory) pure returns (bytes memory)"
                                            }
                                        },
                                        "id": 242,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "6078:52:1",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                        }
                                    },
                                    "functionReturnParameters": 221,
                                    "id": 243,
                                    "nodeType": "Return",
                                    "src": "6071:59:1"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 211,
                            "nodeType": "StructuredDocumentation",
                            "src": "5543:173:1",
                            "text": " @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n but performing a static call.\n _Available since v3.3._"
                        },
                        "id": 245,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "functionStaticCall",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 218,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 213,
                                    "mutability": "mutable",
                                    "name": "target",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 245,
                                    "src": "5749:14:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 212,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5749:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 215,
                                    "mutability": "mutable",
                                    "name": "data",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 245,
                                    "src": "5765:17:1",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 214,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5765:5:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 217,
                                    "mutability": "mutable",
                                    "name": "errorMessage",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 245,
                                    "src": "5784:26:1",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_memory_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 216,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5784:6:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "5748:63:1"
                        },
                        "returnParameters": {
                            "id": 221,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 220,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 245,
                                    "src": "5835:12:1",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 219,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5835:5:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "5834:14:1"
                        },
                        "scope": 328,
                        "src": "5721:416:1",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 261,
                            "nodeType": "Block",
                            "src": "6413:101:1",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 256,
                                                "name": "target",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 248,
                                                "src": "6451:6:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 257,
                                                "name": "data",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 250,
                                                "src": "6459:4:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            },
                                            {
                                                "hexValue": "416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564",
                                                "id": 258,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "6465:41:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_9fdcd12e4b726339b32a442b0a448365d5d85c96b2d2cff917b4f66c63110398",
                                                    "typeString": "literal_string \"Address: low-level delegate call failed\""
                                                },
                                                "value": "Address: low-level delegate call failed"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_9fdcd12e4b726339b32a442b0a448365d5d85c96b2d2cff917b4f66c63110398",
                                                    "typeString": "literal_string \"Address: low-level delegate call failed\""
                                                }
                                            ],
                                            "id": 255,
                                            "name": "functionDelegateCall",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                262,
                                                297
                                            ],
                                            "referencedDeclaration": 297,
                                            "src": "6430:20:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                                                "typeString": "function (address,bytes memory,string memory) returns (bytes memory)"
                                            }
                                        },
                                        "id": 259,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "6430:77:1",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                        }
                                    },
                                    "functionReturnParameters": 254,
                                    "id": 260,
                                    "nodeType": "Return",
                                    "src": "6423:84:1"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 246,
                            "nodeType": "StructuredDocumentation",
                            "src": "6143:168:1",
                            "text": " @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a delegate call.\n _Available since v3.4._"
                        },
                        "id": 262,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "functionDelegateCall",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 251,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 248,
                                    "mutability": "mutable",
                                    "name": "target",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 262,
                                    "src": "6346:14:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 247,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6346:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 250,
                                    "mutability": "mutable",
                                    "name": "data",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 262,
                                    "src": "6362:17:1",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 249,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6362:5:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "6345:35:1"
                        },
                        "returnParameters": {
                            "id": 254,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 253,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 262,
                                    "src": "6399:12:1",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 252,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6399:5:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "6398:14:1"
                        },
                        "scope": 328,
                        "src": "6316:198:1",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 296,
                            "nodeType": "Block",
                            "src": "6825:292:1",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "id": 276,
                                                        "name": "target",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 265,
                                                        "src": "6854:6:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    ],
                                                    "id": 275,
                                                    "name": "isContract",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 52,
                                                    "src": "6843:10:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                                                        "typeString": "function (address) view returns (bool)"
                                                    }
                                                },
                                                "id": 277,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "6843:18:1",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374",
                                                "id": 278,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "6863:40:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520",
                                                    "typeString": "literal_string \"Address: delegate call to non-contract\""
                                                },
                                                "value": "Address: delegate call to non-contract"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520",
                                                    "typeString": "literal_string \"Address: delegate call to non-contract\""
                                                }
                                            ],
                                            "id": 274,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "6835:7:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 279,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "6835:69:1",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 280,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6835:69:1"
                                },
                                {
                                    "assignments": [
                                        282,
                                        284
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 282,
                                            "mutability": "mutable",
                                            "name": "success",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 296,
                                            "src": "6975:12:1",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            },
                                            "typeName": {
                                                "id": 281,
                                                "name": "bool",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "6975:4:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "visibility": "internal"
                                        },
                                        {
                                            "constant": false,
                                            "id": 284,
                                            "mutability": "mutable",
                                            "name": "returndata",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 296,
                                            "src": "6989:23:1",
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                "typeString": "bytes"
                                            },
                                            "typeName": {
                                                "id": 283,
                                                "name": "bytes",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "6989:5:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_storage_ptr",
                                                    "typeString": "bytes"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 289,
                                    "initialValue": {
                                        "arguments": [
                                            {
                                                "id": 287,
                                                "name": "data",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 267,
                                                "src": "7036:4:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "expression": {
                                                "id": 285,
                                                "name": "target",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 265,
                                                "src": "7016:6:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "id": 286,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "delegatecall",
                                            "nodeType": "MemberAccess",
                                            "src": "7016:19:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_baredelegatecall_nonpayable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                                                "typeString": "function (bytes memory) returns (bool,bytes memory)"
                                            }
                                        },
                                        "id": 288,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "7016:25:1",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                                            "typeString": "tuple(bool,bytes memory)"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "6974:67:1"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 291,
                                                "name": "success",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 282,
                                                "src": "7076:7:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "id": 292,
                                                "name": "returndata",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 284,
                                                "src": "7085:10:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            },
                                            {
                                                "id": 293,
                                                "name": "errorMessage",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 269,
                                                "src": "7097:12:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_string_memory_ptr",
                                                    "typeString": "string memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                },
                                                {
                                                    "typeIdentifier": "t_string_memory_ptr",
                                                    "typeString": "string memory"
                                                }
                                            ],
                                            "id": 290,
                                            "name": "_verifyCallResult",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 327,
                                            "src": "7058:17:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                                                "typeString": "function (bool,bytes memory,string memory) pure returns (bytes memory)"
                                            }
                                        },
                                        "id": 294,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "7058:52:1",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                        }
                                    },
                                    "functionReturnParameters": 273,
                                    "id": 295,
                                    "nodeType": "Return",
                                    "src": "7051:59:1"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 263,
                            "nodeType": "StructuredDocumentation",
                            "src": "6520:175:1",
                            "text": " @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n but performing a delegate call.\n _Available since v3.4._"
                        },
                        "id": 297,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "functionDelegateCall",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 270,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 265,
                                    "mutability": "mutable",
                                    "name": "target",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 297,
                                    "src": "6730:14:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 264,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6730:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 267,
                                    "mutability": "mutable",
                                    "name": "data",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 297,
                                    "src": "6746:17:1",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 266,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6746:5:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 269,
                                    "mutability": "mutable",
                                    "name": "errorMessage",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 297,
                                    "src": "6765:26:1",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_memory_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 268,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6765:6:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "6729:63:1"
                        },
                        "returnParameters": {
                            "id": 273,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 272,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 297,
                                    "src": "6811:12:1",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 271,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6811:5:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "6810:14:1"
                        },
                        "scope": 328,
                        "src": "6700:417:1",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 326,
                            "nodeType": "Block",
                            "src": "7252:596:1",
                            "statements": [
                                {
                                    "condition": {
                                        "id": 308,
                                        "name": "success",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 299,
                                        "src": "7266:7:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "falseBody": {
                                        "id": 324,
                                        "nodeType": "Block",
                                        "src": "7323:519:1",
                                        "statements": [
                                            {
                                                "condition": {
                                                    "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    "id": 315,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "expression": {
                                                            "id": 312,
                                                            "name": "returndata",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 301,
                                                            "src": "7407:10:1",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            }
                                                        },
                                                        "id": 313,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "length",
                                                        "nodeType": "MemberAccess",
                                                        "src": "7407:17:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": ">",
                                                    "rightExpression": {
                                                        "hexValue": "30",
                                                        "id": 314,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "number",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "7427:1:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_rational_0_by_1",
                                                            "typeString": "int_const 0"
                                                        },
                                                        "value": "0"
                                                    },
                                                    "src": "7407:21:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "falseBody": {
                                                    "id": 322,
                                                    "nodeType": "Block",
                                                    "src": "7779:53:1",
                                                    "statements": [
                                                        {
                                                            "expression": {
                                                                "arguments": [
                                                                    {
                                                                        "id": 319,
                                                                        "name": "errorMessage",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 303,
                                                                        "src": "7804:12:1",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_string_memory_ptr",
                                                                            "typeString": "string memory"
                                                                        }
                                                                    }
                                                                ],
                                                                "expression": {
                                                                    "argumentTypes": [
                                                                        {
                                                                            "typeIdentifier": "t_string_memory_ptr",
                                                                            "typeString": "string memory"
                                                                        }
                                                                    ],
                                                                    "id": 318,
                                                                    "name": "revert",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [
                                                                        4294967277,
                                                                        4294967277
                                                                    ],
                                                                    "referencedDeclaration": 4294967277,
                                                                    "src": "7797:6:1",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                                                        "typeString": "function (string memory) pure"
                                                                    }
                                                                },
                                                                "id": 320,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "kind": "functionCall",
                                                                "lValueRequested": false,
                                                                "names": [],
                                                                "nodeType": "FunctionCall",
                                                                "src": "7797:20:1",
                                                                "tryCall": false,
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_tuple$__$",
                                                                    "typeString": "tuple()"
                                                                }
                                                            },
                                                            "id": 321,
                                                            "nodeType": "ExpressionStatement",
                                                            "src": "7797:20:1"
                                                        }
                                                    ]
                                                },
                                                "id": 323,
                                                "nodeType": "IfStatement",
                                                "src": "7403:429:1",
                                                "trueBody": {
                                                    "id": 317,
                                                    "nodeType": "Block",
                                                    "src": "7430:343:1",
                                                    "statements": [
                                                        {
                                                            "AST": {
                                                                "nodeType": "YulBlock",
                                                                "src": "7614:145:1",
                                                                "statements": [
                                                                    {
                                                                        "nodeType": "YulVariableDeclaration",
                                                                        "src": "7636:40:1",
                                                                        "value": {
                                                                            "arguments": [
                                                                                {
                                                                                    "name": "returndata",
                                                                                    "nodeType": "YulIdentifier",
                                                                                    "src": "7665:10:1"
                                                                                }
                                                                            ],
                                                                            "functionName": {
                                                                                "name": "mload",
                                                                                "nodeType": "YulIdentifier",
                                                                                "src": "7659:5:1"
                                                                            },
                                                                            "nodeType": "YulFunctionCall",
                                                                            "src": "7659:17:1"
                                                                        },
                                                                        "variables": [
                                                                            {
                                                                                "name": "returndata_size",
                                                                                "nodeType": "YulTypedName",
                                                                                "src": "7640:15:1",
                                                                                "type": ""
                                                                            }
                                                                        ]
                                                                    },
                                                                    {
                                                                        "expression": {
                                                                            "arguments": [
                                                                                {
                                                                                    "arguments": [
                                                                                        {
                                                                                            "kind": "number",
                                                                                            "nodeType": "YulLiteral",
                                                                                            "src": "7708:2:1",
                                                                                            "type": "",
                                                                                            "value": "32"
                                                                                        },
                                                                                        {
                                                                                            "name": "returndata",
                                                                                            "nodeType": "YulIdentifier",
                                                                                            "src": "7712:10:1"
                                                                                        }
                                                                                    ],
                                                                                    "functionName": {
                                                                                        "name": "add",
                                                                                        "nodeType": "YulIdentifier",
                                                                                        "src": "7704:3:1"
                                                                                    },
                                                                                    "nodeType": "YulFunctionCall",
                                                                                    "src": "7704:19:1"
                                                                                },
                                                                                {
                                                                                    "name": "returndata_size",
                                                                                    "nodeType": "YulIdentifier",
                                                                                    "src": "7725:15:1"
                                                                                }
                                                                            ],
                                                                            "functionName": {
                                                                                "name": "revert",
                                                                                "nodeType": "YulIdentifier",
                                                                                "src": "7697:6:1"
                                                                            },
                                                                            "nodeType": "YulFunctionCall",
                                                                            "src": "7697:44:1"
                                                                        },
                                                                        "nodeType": "YulExpressionStatement",
                                                                        "src": "7697:44:1"
                                                                    }
                                                                ]
                                                            },
                                                            "evmVersion": "istanbul",
                                                            "externalReferences": [
                                                                {
                                                                    "declaration": 301,
                                                                    "isOffset": false,
                                                                    "isSlot": false,
                                                                    "src": "7665:10:1",
                                                                    "valueSize": 1
                                                                },
                                                                {
                                                                    "declaration": 301,
                                                                    "isOffset": false,
                                                                    "isSlot": false,
                                                                    "src": "7712:10:1",
                                                                    "valueSize": 1
                                                                }
                                                            ],
                                                            "id": 316,
                                                            "nodeType": "InlineAssembly",
                                                            "src": "7605:154:1"
                                                        }
                                                    ]
                                                }
                                            }
                                        ]
                                    },
                                    "id": 325,
                                    "nodeType": "IfStatement",
                                    "src": "7262:580:1",
                                    "trueBody": {
                                        "id": 311,
                                        "nodeType": "Block",
                                        "src": "7275:42:1",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "id": 309,
                                                    "name": "returndata",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 301,
                                                    "src": "7296:10:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                        "typeString": "bytes memory"
                                                    }
                                                },
                                                "functionReturnParameters": 307,
                                                "id": 310,
                                                "nodeType": "Return",
                                                "src": "7289:17:1"
                                            }
                                        ]
                                    }
                                }
                            ]
                        },
                        "id": 327,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "_verifyCallResult",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 304,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 299,
                                    "mutability": "mutable",
                                    "name": "success",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 327,
                                    "src": "7150:12:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 298,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "7150:4:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 301,
                                    "mutability": "mutable",
                                    "name": "returndata",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 327,
                                    "src": "7164:23:1",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 300,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "7164:5:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 303,
                                    "mutability": "mutable",
                                    "name": "errorMessage",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 327,
                                    "src": "7189:26:1",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_memory_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 302,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "7189:6:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "7149:67:1"
                        },
                        "returnParameters": {
                            "id": 307,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 306,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 327,
                                    "src": "7238:12:1",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 305,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "7238:5:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "7237:14:1"
                        },
                        "scope": 328,
                        "src": "7123:725:1",
                        "stateMutability": "pure",
                        "virtual": false,
                        "visibility": "private"
                    }
                ],
                "scope": 929,
                "src": "166:7684:1"
            },
            {
                "abstract": false,
                "baseContracts": [],
                "contractDependencies": [],
                "contractKind": "interface",
                "documentation": {
                    "id": 329,
                    "nodeType": "StructuredDocumentation",
                    "src": "7852:70:1",
                    "text": " @dev Interface of the ERC20 standard as defined in the EIP."
                },
                "fullyImplemented": false,
                "id": 404,
                "linearizedBaseContracts": [
                    404
                ],
                "name": "IERC20",
                "nodeType": "ContractDefinition",
                "nodes": [
                    {
                        "documentation": {
                            "id": 330,
                            "nodeType": "StructuredDocumentation",
                            "src": "7946:66:1",
                            "text": " @dev Returns the amount of tokens in existence."
                        },
                        "functionSelector": "18160ddd",
                        "id": 335,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "totalSupply",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 331,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "8037:2:1"
                        },
                        "returnParameters": {
                            "id": 334,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 333,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 335,
                                    "src": "8063:7:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 332,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "8063:7:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "8062:9:1"
                        },
                        "scope": 404,
                        "src": "8017:55:1",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 336,
                            "nodeType": "StructuredDocumentation",
                            "src": "8078:72:1",
                            "text": " @dev Returns the amount of tokens owned by `account`."
                        },
                        "functionSelector": "70a08231",
                        "id": 343,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "balanceOf",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 339,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 338,
                                    "mutability": "mutable",
                                    "name": "account",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 343,
                                    "src": "8174:15:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 337,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "8174:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "8173:17:1"
                        },
                        "returnParameters": {
                            "id": 342,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 341,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 343,
                                    "src": "8214:7:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 340,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "8214:7:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "8213:9:1"
                        },
                        "scope": 404,
                        "src": "8155:68:1",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 344,
                            "nodeType": "StructuredDocumentation",
                            "src": "8229:209:1",
                            "text": " @dev Moves `amount` tokens from the caller's account to `recipient`.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event."
                        },
                        "functionSelector": "a9059cbb",
                        "id": 353,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "transfer",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 349,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 346,
                                    "mutability": "mutable",
                                    "name": "recipient",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 353,
                                    "src": "8461:17:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 345,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "8461:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 348,
                                    "mutability": "mutable",
                                    "name": "amount",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 353,
                                    "src": "8480:14:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 347,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "8480:7:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "8460:35:1"
                        },
                        "returnParameters": {
                            "id": 352,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 351,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 353,
                                    "src": "8514:4:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 350,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "8514:4:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "8513:6:1"
                        },
                        "scope": 404,
                        "src": "8443:77:1",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 354,
                            "nodeType": "StructuredDocumentation",
                            "src": "8526:264:1",
                            "text": " @dev Returns the remaining number of tokens that `spender` will be\n allowed to spend on behalf of `owner` through {transferFrom}. This is\n zero by default.\n This value changes when {approve} or {transferFrom} are called."
                        },
                        "functionSelector": "dd62ed3e",
                        "id": 363,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "allowance",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 359,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 356,
                                    "mutability": "mutable",
                                    "name": "owner",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 363,
                                    "src": "8814:13:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 355,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "8814:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 358,
                                    "mutability": "mutable",
                                    "name": "spender",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 363,
                                    "src": "8829:15:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 357,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "8829:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "8813:32:1"
                        },
                        "returnParameters": {
                            "id": 362,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 361,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 363,
                                    "src": "8869:7:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 360,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "8869:7:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "8868:9:1"
                        },
                        "scope": 404,
                        "src": "8795:83:1",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 364,
                            "nodeType": "StructuredDocumentation",
                            "src": "8884:642:1",
                            "text": " @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\n Returns a boolean value indicating whether the operation succeeded.\n IMPORTANT: Beware that changing an allowance with this method brings the risk\n that someone may use both the old and the new allowance by unfortunate\n transaction ordering. One possible solution to mitigate this race\n condition is to first reduce the spender's allowance to 0 and set the\n desired value afterwards:\n https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n Emits an {Approval} event."
                        },
                        "functionSelector": "095ea7b3",
                        "id": 373,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "approve",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 369,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 366,
                                    "mutability": "mutable",
                                    "name": "spender",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 373,
                                    "src": "9548:15:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 365,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "9548:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 368,
                                    "mutability": "mutable",
                                    "name": "amount",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 373,
                                    "src": "9565:14:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 367,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "9565:7:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "9547:33:1"
                        },
                        "returnParameters": {
                            "id": 372,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 371,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 373,
                                    "src": "9599:4:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 370,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "9599:4:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "9598:6:1"
                        },
                        "scope": 404,
                        "src": "9531:74:1",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 374,
                            "nodeType": "StructuredDocumentation",
                            "src": "9611:296:1",
                            "text": " @dev Moves `amount` tokens from `sender` to `recipient` using the\n allowance mechanism. `amount` is then deducted from the caller's\n allowance.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event."
                        },
                        "functionSelector": "23b872dd",
                        "id": 385,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "transferFrom",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 381,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 376,
                                    "mutability": "mutable",
                                    "name": "sender",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 385,
                                    "src": "9934:14:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 375,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "9934:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 378,
                                    "mutability": "mutable",
                                    "name": "recipient",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 385,
                                    "src": "9950:17:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 377,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "9950:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 380,
                                    "mutability": "mutable",
                                    "name": "amount",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 385,
                                    "src": "9969:14:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 379,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "9969:7:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "9933:51:1"
                        },
                        "returnParameters": {
                            "id": 384,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 383,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 385,
                                    "src": "10003:4:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 382,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "10003:4:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "10002:6:1"
                        },
                        "scope": 404,
                        "src": "9912:97:1",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "anonymous": false,
                        "documentation": {
                            "id": 386,
                            "nodeType": "StructuredDocumentation",
                            "src": "10015:158:1",
                            "text": " @dev Emitted when `value` tokens are moved from one account (`from`) to\n another (`to`).\n Note that `value` may be zero."
                        },
                        "id": 394,
                        "name": "Transfer",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 393,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 388,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "from",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 394,
                                    "src": "10193:20:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 387,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "10193:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 390,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "to",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 394,
                                    "src": "10215:18:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 389,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "10215:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 392,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "value",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 394,
                                    "src": "10235:13:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 391,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "10235:7:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "10192:57:1"
                        },
                        "src": "10178:72:1"
                    },
                    {
                        "anonymous": false,
                        "documentation": {
                            "id": 395,
                            "nodeType": "StructuredDocumentation",
                            "src": "10256:148:1",
                            "text": " @dev Emitted when the allowance of a `spender` for an `owner` is set by\n a call to {approve}. `value` is the new allowance."
                        },
                        "id": 403,
                        "name": "Approval",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 402,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 397,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "owner",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 403,
                                    "src": "10424:21:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 396,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "10424:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 399,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "spender",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 403,
                                    "src": "10447:23:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 398,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "10447:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 401,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "value",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 403,
                                    "src": "10472:13:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 400,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "10472:7:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "10423:63:1"
                        },
                        "src": "10409:78:1"
                    }
                ],
                "scope": 929,
                "src": "7923:2566:1"
            },
            {
                "abstract": false,
                "baseContracts": [],
                "contractDependencies": [],
                "contractKind": "library",
                "documentation": {
                    "id": 405,
                    "nodeType": "StructuredDocumentation",
                    "src": "10491:457:1",
                    "text": " @title SafeERC20\n @dev Wrappers around ERC20 operations that throw on failure (when the token\n contract returns false). Tokens that return no value (and instead revert or\n throw on failure) are also supported, non-reverting calls are assumed to be\n successful.\n To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\n which allows you to call the safe operations as `token.safeTransfer(...)`, etc."
                },
                "fullyImplemented": true,
                "id": 623,
                "linearizedBaseContracts": [
                    623
                ],
                "name": "SafeERC20",
                "nodeType": "ContractDefinition",
                "nodes": [
                    {
                        "id": 408,
                        "libraryName": {
                            "id": 406,
                            "name": "Address",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 328,
                            "src": "10979:7:1"
                        },
                        "nodeType": "UsingForDirective",
                        "src": "10973:26:1",
                        "typeName": {
                            "id": 407,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "10991:7:1",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                            }
                        }
                    },
                    {
                        "body": {
                            "id": 430,
                            "nodeType": "Block",
                            "src": "11077:103:1",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 419,
                                                "name": "token",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 411,
                                                "src": "11107:5:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_IERC20_$404",
                                                    "typeString": "contract IERC20"
                                                }
                                            },
                                            {
                                                "arguments": [
                                                    {
                                                        "expression": {
                                                            "expression": {
                                                                "id": 422,
                                                                "name": "token",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 411,
                                                                "src": "11137:5:1",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_contract$_IERC20_$404",
                                                                    "typeString": "contract IERC20"
                                                                }
                                                            },
                                                            "id": 423,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "transfer",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 353,
                                                            "src": "11137:14:1",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                                                "typeString": "function (address,uint256) external returns (bool)"
                                                            }
                                                        },
                                                        "id": 424,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "selector",
                                                        "nodeType": "MemberAccess",
                                                        "src": "11137:23:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes4",
                                                            "typeString": "bytes4"
                                                        }
                                                    },
                                                    {
                                                        "id": 425,
                                                        "name": "to",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 413,
                                                        "src": "11162:2:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    {
                                                        "id": 426,
                                                        "name": "value",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 415,
                                                        "src": "11166:5:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_bytes4",
                                                            "typeString": "bytes4"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "id": 420,
                                                        "name": "abi",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967295,
                                                        "src": "11114:3:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_abi",
                                                            "typeString": "abi"
                                                        }
                                                    },
                                                    "id": 421,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "memberName": "encodeWithSelector",
                                                    "nodeType": "MemberAccess",
                                                    "src": "11114:22:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                                                        "typeString": "function (bytes4) pure returns (bytes memory)"
                                                    }
                                                },
                                                "id": 427,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "11114:58:1",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_contract$_IERC20_$404",
                                                    "typeString": "contract IERC20"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "id": 418,
                                            "name": "_callOptionalReturn",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 622,
                                            "src": "11087:19:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$404_$_t_bytes_memory_ptr_$returns$__$",
                                                "typeString": "function (contract IERC20,bytes memory)"
                                            }
                                        },
                                        "id": 428,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "11087:86:1",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 429,
                                    "nodeType": "ExpressionStatement",
                                    "src": "11087:86:1"
                                }
                            ]
                        },
                        "id": 431,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "safeTransfer",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 416,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 411,
                                    "mutability": "mutable",
                                    "name": "token",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 431,
                                    "src": "11027:12:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IERC20_$404",
                                        "typeString": "contract IERC20"
                                    },
                                    "typeName": {
                                        "id": 410,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 409,
                                            "name": "IERC20",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 404,
                                            "src": "11027:6:1"
                                        },
                                        "referencedDeclaration": 404,
                                        "src": "11027:6:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IERC20_$404",
                                            "typeString": "contract IERC20"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 413,
                                    "mutability": "mutable",
                                    "name": "to",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 431,
                                    "src": "11041:10:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 412,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "11041:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 415,
                                    "mutability": "mutable",
                                    "name": "value",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 431,
                                    "src": "11053:13:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 414,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "11053:7:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "11026:41:1"
                        },
                        "returnParameters": {
                            "id": 417,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "11077:0:1"
                        },
                        "scope": 623,
                        "src": "11005:175:1",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 456,
                            "nodeType": "Block",
                            "src": "11276:113:1",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 444,
                                                "name": "token",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 434,
                                                "src": "11306:5:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_IERC20_$404",
                                                    "typeString": "contract IERC20"
                                                }
                                            },
                                            {
                                                "arguments": [
                                                    {
                                                        "expression": {
                                                            "expression": {
                                                                "id": 447,
                                                                "name": "token",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 434,
                                                                "src": "11336:5:1",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_contract$_IERC20_$404",
                                                                    "typeString": "contract IERC20"
                                                                }
                                                            },
                                                            "id": 448,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "transferFrom",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 385,
                                                            "src": "11336:18:1",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                                                                "typeString": "function (address,address,uint256) external returns (bool)"
                                                            }
                                                        },
                                                        "id": 449,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "selector",
                                                        "nodeType": "MemberAccess",
                                                        "src": "11336:27:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes4",
                                                            "typeString": "bytes4"
                                                        }
                                                    },
                                                    {
                                                        "id": 450,
                                                        "name": "from",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 436,
                                                        "src": "11365:4:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    {
                                                        "id": 451,
                                                        "name": "to",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 438,
                                                        "src": "11371:2:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    {
                                                        "id": 452,
                                                        "name": "value",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 440,
                                                        "src": "11375:5:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_bytes4",
                                                            "typeString": "bytes4"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "id": 445,
                                                        "name": "abi",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967295,
                                                        "src": "11313:3:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_abi",
                                                            "typeString": "abi"
                                                        }
                                                    },
                                                    "id": 446,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "memberName": "encodeWithSelector",
                                                    "nodeType": "MemberAccess",
                                                    "src": "11313:22:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                                                        "typeString": "function (bytes4) pure returns (bytes memory)"
                                                    }
                                                },
                                                "id": 453,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "11313:68:1",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_contract$_IERC20_$404",
                                                    "typeString": "contract IERC20"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "id": 443,
                                            "name": "_callOptionalReturn",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 622,
                                            "src": "11286:19:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$404_$_t_bytes_memory_ptr_$returns$__$",
                                                "typeString": "function (contract IERC20,bytes memory)"
                                            }
                                        },
                                        "id": 454,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "11286:96:1",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 455,
                                    "nodeType": "ExpressionStatement",
                                    "src": "11286:96:1"
                                }
                            ]
                        },
                        "id": 457,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "safeTransferFrom",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 441,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 434,
                                    "mutability": "mutable",
                                    "name": "token",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 457,
                                    "src": "11212:12:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IERC20_$404",
                                        "typeString": "contract IERC20"
                                    },
                                    "typeName": {
                                        "id": 433,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 432,
                                            "name": "IERC20",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 404,
                                            "src": "11212:6:1"
                                        },
                                        "referencedDeclaration": 404,
                                        "src": "11212:6:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IERC20_$404",
                                            "typeString": "contract IERC20"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 436,
                                    "mutability": "mutable",
                                    "name": "from",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 457,
                                    "src": "11226:12:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 435,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "11226:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 438,
                                    "mutability": "mutable",
                                    "name": "to",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 457,
                                    "src": "11240:10:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 437,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "11240:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 440,
                                    "mutability": "mutable",
                                    "name": "value",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 457,
                                    "src": "11252:13:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 439,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "11252:7:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "11211:55:1"
                        },
                        "returnParameters": {
                            "id": 442,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "11276:0:1"
                        },
                        "scope": 623,
                        "src": "11186:203:1",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 500,
                            "nodeType": "Block",
                            "src": "11725:537:1",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                "id": 484,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "components": [
                                                        {
                                                            "commonType": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            },
                                                            "id": 471,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "leftExpression": {
                                                                "id": 469,
                                                                "name": "value",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 465,
                                                                "src": "12014:5:1",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            },
                                                            "nodeType": "BinaryOperation",
                                                            "operator": "==",
                                                            "rightExpression": {
                                                                "hexValue": "30",
                                                                "id": 470,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "kind": "number",
                                                                "lValueRequested": false,
                                                                "nodeType": "Literal",
                                                                "src": "12023:1:1",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_rational_0_by_1",
                                                                    "typeString": "int_const 0"
                                                                },
                                                                "value": "0"
                                                            },
                                                            "src": "12014:10:1",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            }
                                                        }
                                                    ],
                                                    "id": 472,
                                                    "isConstant": false,
                                                    "isInlineArray": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "TupleExpression",
                                                    "src": "12013:12:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "||",
                                                "rightExpression": {
                                                    "components": [
                                                        {
                                                            "commonType": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            },
                                                            "id": 482,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "leftExpression": {
                                                                "arguments": [
                                                                    {
                                                                        "arguments": [
                                                                            {
                                                                                "id": 477,
                                                                                "name": "this",
                                                                                "nodeType": "Identifier",
                                                                                "overloadedDeclarations": [],
                                                                                "referencedDeclaration": 4294967268,
                                                                                "src": "12054:4:1",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_contract$_SafeERC20_$623",
                                                                                    "typeString": "library SafeERC20"
                                                                                }
                                                                            }
                                                                        ],
                                                                        "expression": {
                                                                            "argumentTypes": [
                                                                                {
                                                                                    "typeIdentifier": "t_contract$_SafeERC20_$623",
                                                                                    "typeString": "library SafeERC20"
                                                                                }
                                                                            ],
                                                                            "id": 476,
                                                                            "isConstant": false,
                                                                            "isLValue": false,
                                                                            "isPure": true,
                                                                            "lValueRequested": false,
                                                                            "nodeType": "ElementaryTypeNameExpression",
                                                                            "src": "12046:7:1",
                                                                            "typeDescriptions": {
                                                                                "typeIdentifier": "t_type$_t_address_$",
                                                                                "typeString": "type(address)"
                                                                            },
                                                                            "typeName": {
                                                                                "id": 475,
                                                                                "name": "address",
                                                                                "nodeType": "ElementaryTypeName",
                                                                                "src": "12046:7:1",
                                                                                "typeDescriptions": {}
                                                                            }
                                                                        },
                                                                        "id": 478,
                                                                        "isConstant": false,
                                                                        "isLValue": false,
                                                                        "isPure": false,
                                                                        "kind": "typeConversion",
                                                                        "lValueRequested": false,
                                                                        "names": [],
                                                                        "nodeType": "FunctionCall",
                                                                        "src": "12046:13:1",
                                                                        "tryCall": false,
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_address",
                                                                            "typeString": "address"
                                                                        }
                                                                    },
                                                                    {
                                                                        "id": 479,
                                                                        "name": "spender",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 463,
                                                                        "src": "12061:7:1",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_address",
                                                                            "typeString": "address"
                                                                        }
                                                                    }
                                                                ],
                                                                "expression": {
                                                                    "argumentTypes": [
                                                                        {
                                                                            "typeIdentifier": "t_address",
                                                                            "typeString": "address"
                                                                        },
                                                                        {
                                                                            "typeIdentifier": "t_address",
                                                                            "typeString": "address"
                                                                        }
                                                                    ],
                                                                    "expression": {
                                                                        "id": 473,
                                                                        "name": "token",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 461,
                                                                        "src": "12030:5:1",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_contract$_IERC20_$404",
                                                                            "typeString": "contract IERC20"
                                                                        }
                                                                    },
                                                                    "id": 474,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "memberName": "allowance",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 363,
                                                                    "src": "12030:15:1",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$",
                                                                        "typeString": "function (address,address) view external returns (uint256)"
                                                                    }
                                                                },
                                                                "id": 480,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "kind": "functionCall",
                                                                "lValueRequested": false,
                                                                "names": [],
                                                                "nodeType": "FunctionCall",
                                                                "src": "12030:39:1",
                                                                "tryCall": false,
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            },
                                                            "nodeType": "BinaryOperation",
                                                            "operator": "==",
                                                            "rightExpression": {
                                                                "hexValue": "30",
                                                                "id": 481,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "kind": "number",
                                                                "lValueRequested": false,
                                                                "nodeType": "Literal",
                                                                "src": "12073:1:1",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_rational_0_by_1",
                                                                    "typeString": "int_const 0"
                                                                },
                                                                "value": "0"
                                                            },
                                                            "src": "12030:44:1",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            }
                                                        }
                                                    ],
                                                    "id": 483,
                                                    "isConstant": false,
                                                    "isInlineArray": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "TupleExpression",
                                                    "src": "12029:46:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "src": "12013:62:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365",
                                                "id": 485,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "12089:56:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25",
                                                    "typeString": "literal_string \"SafeERC20: approve from non-zero to non-zero allowance\""
                                                },
                                                "value": "SafeERC20: approve from non-zero to non-zero allowance"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25",
                                                    "typeString": "literal_string \"SafeERC20: approve from non-zero to non-zero allowance\""
                                                }
                                            ],
                                            "id": 468,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "12005:7:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 486,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "12005:150:1",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 487,
                                    "nodeType": "ExpressionStatement",
                                    "src": "12005:150:1"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 489,
                                                "name": "token",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 461,
                                                "src": "12185:5:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_IERC20_$404",
                                                    "typeString": "contract IERC20"
                                                }
                                            },
                                            {
                                                "arguments": [
                                                    {
                                                        "expression": {
                                                            "expression": {
                                                                "id": 492,
                                                                "name": "token",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 461,
                                                                "src": "12215:5:1",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_contract$_IERC20_$404",
                                                                    "typeString": "contract IERC20"
                                                                }
                                                            },
                                                            "id": 493,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "approve",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 373,
                                                            "src": "12215:13:1",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                                                "typeString": "function (address,uint256) external returns (bool)"
                                                            }
                                                        },
                                                        "id": 494,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "selector",
                                                        "nodeType": "MemberAccess",
                                                        "src": "12215:22:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes4",
                                                            "typeString": "bytes4"
                                                        }
                                                    },
                                                    {
                                                        "id": 495,
                                                        "name": "spender",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 463,
                                                        "src": "12239:7:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    {
                                                        "id": 496,
                                                        "name": "value",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 465,
                                                        "src": "12248:5:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_bytes4",
                                                            "typeString": "bytes4"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "id": 490,
                                                        "name": "abi",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967295,
                                                        "src": "12192:3:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_abi",
                                                            "typeString": "abi"
                                                        }
                                                    },
                                                    "id": 491,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "memberName": "encodeWithSelector",
                                                    "nodeType": "MemberAccess",
                                                    "src": "12192:22:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                                                        "typeString": "function (bytes4) pure returns (bytes memory)"
                                                    }
                                                },
                                                "id": 497,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "12192:62:1",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_contract$_IERC20_$404",
                                                    "typeString": "contract IERC20"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "id": 488,
                                            "name": "_callOptionalReturn",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 622,
                                            "src": "12165:19:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$404_$_t_bytes_memory_ptr_$returns$__$",
                                                "typeString": "function (contract IERC20,bytes memory)"
                                            }
                                        },
                                        "id": 498,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "12165:90:1",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 499,
                                    "nodeType": "ExpressionStatement",
                                    "src": "12165:90:1"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 458,
                            "nodeType": "StructuredDocumentation",
                            "src": "11395:249:1",
                            "text": " @dev Deprecated. This function has issues similar to the ones found in\n {IERC20-approve}, and its usage is discouraged.\n Whenever possible, use {safeIncreaseAllowance} and\n {safeDecreaseAllowance} instead."
                        },
                        "id": 501,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "safeApprove",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 466,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 461,
                                    "mutability": "mutable",
                                    "name": "token",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 501,
                                    "src": "11670:12:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IERC20_$404",
                                        "typeString": "contract IERC20"
                                    },
                                    "typeName": {
                                        "id": 460,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 459,
                                            "name": "IERC20",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 404,
                                            "src": "11670:6:1"
                                        },
                                        "referencedDeclaration": 404,
                                        "src": "11670:6:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IERC20_$404",
                                            "typeString": "contract IERC20"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 463,
                                    "mutability": "mutable",
                                    "name": "spender",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 501,
                                    "src": "11684:15:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 462,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "11684:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 465,
                                    "mutability": "mutable",
                                    "name": "value",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 501,
                                    "src": "11701:13:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 464,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "11701:7:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "11669:46:1"
                        },
                        "returnParameters": {
                            "id": 467,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "11725:0:1"
                        },
                        "scope": 623,
                        "src": "11649:613:1",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 536,
                            "nodeType": "Block",
                            "src": "12354:194:1",
                            "statements": [
                                {
                                    "assignments": [
                                        512
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 512,
                                            "mutability": "mutable",
                                            "name": "newAllowance",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 536,
                                            "src": "12364:20:1",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 511,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "12364:7:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 523,
                                    "initialValue": {
                                        "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        },
                                        "id": 522,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "arguments": [
                                                {
                                                    "arguments": [
                                                        {
                                                            "id": 517,
                                                            "name": "this",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 4294967268,
                                                            "src": "12411:4:1",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_contract$_SafeERC20_$623",
                                                                "typeString": "library SafeERC20"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_contract$_SafeERC20_$623",
                                                                "typeString": "library SafeERC20"
                                                            }
                                                        ],
                                                        "id": 516,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "ElementaryTypeNameExpression",
                                                        "src": "12403:7:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_address_$",
                                                            "typeString": "type(address)"
                                                        },
                                                        "typeName": {
                                                            "id": 515,
                                                            "name": "address",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "12403:7:1",
                                                            "typeDescriptions": {}
                                                        }
                                                    },
                                                    "id": 518,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "typeConversion",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "12403:13:1",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                {
                                                    "id": 519,
                                                    "name": "spender",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 506,
                                                    "src": "12418:7:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    },
                                                    {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                ],
                                                "expression": {
                                                    "id": 513,
                                                    "name": "token",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 504,
                                                    "src": "12387:5:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_contract$_IERC20_$404",
                                                        "typeString": "contract IERC20"
                                                    }
                                                },
                                                "id": 514,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "allowance",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 363,
                                                "src": "12387:15:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$",
                                                    "typeString": "function (address,address) view external returns (uint256)"
                                                }
                                            },
                                            "id": 520,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "12387:39:1",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "+",
                                        "rightExpression": {
                                            "id": 521,
                                            "name": "value",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 508,
                                            "src": "12429:5:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "12387:47:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "12364:70:1"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 525,
                                                "name": "token",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 504,
                                                "src": "12464:5:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_IERC20_$404",
                                                    "typeString": "contract IERC20"
                                                }
                                            },
                                            {
                                                "arguments": [
                                                    {
                                                        "expression": {
                                                            "expression": {
                                                                "id": 528,
                                                                "name": "token",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 504,
                                                                "src": "12494:5:1",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_contract$_IERC20_$404",
                                                                    "typeString": "contract IERC20"
                                                                }
                                                            },
                                                            "id": 529,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "approve",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 373,
                                                            "src": "12494:13:1",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                                                "typeString": "function (address,uint256) external returns (bool)"
                                                            }
                                                        },
                                                        "id": 530,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "selector",
                                                        "nodeType": "MemberAccess",
                                                        "src": "12494:22:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes4",
                                                            "typeString": "bytes4"
                                                        }
                                                    },
                                                    {
                                                        "id": 531,
                                                        "name": "spender",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 506,
                                                        "src": "12518:7:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    {
                                                        "id": 532,
                                                        "name": "newAllowance",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 512,
                                                        "src": "12527:12:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_bytes4",
                                                            "typeString": "bytes4"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "id": 526,
                                                        "name": "abi",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967295,
                                                        "src": "12471:3:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_abi",
                                                            "typeString": "abi"
                                                        }
                                                    },
                                                    "id": 527,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "memberName": "encodeWithSelector",
                                                    "nodeType": "MemberAccess",
                                                    "src": "12471:22:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                                                        "typeString": "function (bytes4) pure returns (bytes memory)"
                                                    }
                                                },
                                                "id": 533,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "12471:69:1",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_contract$_IERC20_$404",
                                                    "typeString": "contract IERC20"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "id": 524,
                                            "name": "_callOptionalReturn",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 622,
                                            "src": "12444:19:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$404_$_t_bytes_memory_ptr_$returns$__$",
                                                "typeString": "function (contract IERC20,bytes memory)"
                                            }
                                        },
                                        "id": 534,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "12444:97:1",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 535,
                                    "nodeType": "ExpressionStatement",
                                    "src": "12444:97:1"
                                }
                            ]
                        },
                        "id": 537,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "safeIncreaseAllowance",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 509,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 504,
                                    "mutability": "mutable",
                                    "name": "token",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 537,
                                    "src": "12299:12:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IERC20_$404",
                                        "typeString": "contract IERC20"
                                    },
                                    "typeName": {
                                        "id": 503,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 502,
                                            "name": "IERC20",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 404,
                                            "src": "12299:6:1"
                                        },
                                        "referencedDeclaration": 404,
                                        "src": "12299:6:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IERC20_$404",
                                            "typeString": "contract IERC20"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 506,
                                    "mutability": "mutable",
                                    "name": "spender",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 537,
                                    "src": "12313:15:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 505,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "12313:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 508,
                                    "mutability": "mutable",
                                    "name": "value",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 537,
                                    "src": "12330:13:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 507,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "12330:7:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "12298:46:1"
                        },
                        "returnParameters": {
                            "id": 510,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "12354:0:1"
                        },
                        "scope": 623,
                        "src": "12268:280:1",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 583,
                            "nodeType": "Block",
                            "src": "12640:340:1",
                            "statements": [
                                {
                                    "assignments": [
                                        548
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 548,
                                            "mutability": "mutable",
                                            "name": "oldAllowance",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 583,
                                            "src": "12654:20:1",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 547,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "12654:7:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 557,
                                    "initialValue": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "id": 553,
                                                        "name": "this",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967268,
                                                        "src": "12701:4:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_contract$_SafeERC20_$623",
                                                            "typeString": "library SafeERC20"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_contract$_SafeERC20_$623",
                                                            "typeString": "library SafeERC20"
                                                        }
                                                    ],
                                                    "id": 552,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "ElementaryTypeNameExpression",
                                                    "src": "12693:7:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_address_$",
                                                        "typeString": "type(address)"
                                                    },
                                                    "typeName": {
                                                        "id": 551,
                                                        "name": "address",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "12693:7:1",
                                                        "typeDescriptions": {}
                                                    }
                                                },
                                                "id": 554,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "typeConversion",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "12693:13:1",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 555,
                                                "name": "spender",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 542,
                                                "src": "12708:7:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "expression": {
                                                "id": 549,
                                                "name": "token",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 540,
                                                "src": "12677:5:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_IERC20_$404",
                                                    "typeString": "contract IERC20"
                                                }
                                            },
                                            "id": 550,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "allowance",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 363,
                                            "src": "12677:15:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$",
                                                "typeString": "function (address,address) view external returns (uint256)"
                                            }
                                        },
                                        "id": 556,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "12677:39:1",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "12654:62:1"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 561,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "id": 559,
                                                    "name": "oldAllowance",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 548,
                                                    "src": "12738:12:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": ">=",
                                                "rightExpression": {
                                                    "id": 560,
                                                    "name": "value",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 544,
                                                    "src": "12754:5:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "12738:21:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "5361666545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f",
                                                "id": 562,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "12761:43:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_2c3af60974a758b7e72e108c9bf0943ecc9e4f2e8af4695da5f52fbf57a63d3a",
                                                    "typeString": "literal_string \"SafeERC20: decreased allowance below zero\""
                                                },
                                                "value": "SafeERC20: decreased allowance below zero"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_2c3af60974a758b7e72e108c9bf0943ecc9e4f2e8af4695da5f52fbf57a63d3a",
                                                    "typeString": "literal_string \"SafeERC20: decreased allowance below zero\""
                                                }
                                            ],
                                            "id": 558,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "12730:7:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 563,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "12730:75:1",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 564,
                                    "nodeType": "ExpressionStatement",
                                    "src": "12730:75:1"
                                },
                                {
                                    "assignments": [
                                        566
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 566,
                                            "mutability": "mutable",
                                            "name": "newAllowance",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 583,
                                            "src": "12819:20:1",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 565,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "12819:7:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 570,
                                    "initialValue": {
                                        "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        },
                                        "id": 569,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "id": 567,
                                            "name": "oldAllowance",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 548,
                                            "src": "12842:12:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "-",
                                        "rightExpression": {
                                            "id": 568,
                                            "name": "value",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 544,
                                            "src": "12857:5:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "12842:20:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "12819:43:1"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 572,
                                                "name": "token",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 540,
                                                "src": "12896:5:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_IERC20_$404",
                                                    "typeString": "contract IERC20"
                                                }
                                            },
                                            {
                                                "arguments": [
                                                    {
                                                        "expression": {
                                                            "expression": {
                                                                "id": 575,
                                                                "name": "token",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 540,
                                                                "src": "12926:5:1",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_contract$_IERC20_$404",
                                                                    "typeString": "contract IERC20"
                                                                }
                                                            },
                                                            "id": 576,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "approve",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 373,
                                                            "src": "12926:13:1",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                                                "typeString": "function (address,uint256) external returns (bool)"
                                                            }
                                                        },
                                                        "id": 577,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "selector",
                                                        "nodeType": "MemberAccess",
                                                        "src": "12926:22:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes4",
                                                            "typeString": "bytes4"
                                                        }
                                                    },
                                                    {
                                                        "id": 578,
                                                        "name": "spender",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 542,
                                                        "src": "12950:7:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    {
                                                        "id": 579,
                                                        "name": "newAllowance",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 566,
                                                        "src": "12959:12:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_bytes4",
                                                            "typeString": "bytes4"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "id": 573,
                                                        "name": "abi",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967295,
                                                        "src": "12903:3:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_abi",
                                                            "typeString": "abi"
                                                        }
                                                    },
                                                    "id": 574,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "memberName": "encodeWithSelector",
                                                    "nodeType": "MemberAccess",
                                                    "src": "12903:22:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                                                        "typeString": "function (bytes4) pure returns (bytes memory)"
                                                    }
                                                },
                                                "id": 580,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "12903:69:1",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_contract$_IERC20_$404",
                                                    "typeString": "contract IERC20"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "id": 571,
                                            "name": "_callOptionalReturn",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 622,
                                            "src": "12876:19:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$404_$_t_bytes_memory_ptr_$returns$__$",
                                                "typeString": "function (contract IERC20,bytes memory)"
                                            }
                                        },
                                        "id": 581,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "12876:97:1",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 582,
                                    "nodeType": "ExpressionStatement",
                                    "src": "12876:97:1"
                                }
                            ]
                        },
                        "id": 584,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "safeDecreaseAllowance",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 545,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 540,
                                    "mutability": "mutable",
                                    "name": "token",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 584,
                                    "src": "12585:12:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IERC20_$404",
                                        "typeString": "contract IERC20"
                                    },
                                    "typeName": {
                                        "id": 539,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 538,
                                            "name": "IERC20",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 404,
                                            "src": "12585:6:1"
                                        },
                                        "referencedDeclaration": 404,
                                        "src": "12585:6:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IERC20_$404",
                                            "typeString": "contract IERC20"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 542,
                                    "mutability": "mutable",
                                    "name": "spender",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 584,
                                    "src": "12599:15:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 541,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "12599:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 544,
                                    "mutability": "mutable",
                                    "name": "value",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 584,
                                    "src": "12616:13:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 543,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "12616:7:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "12584:46:1"
                        },
                        "returnParameters": {
                            "id": 546,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "12640:0:1"
                        },
                        "scope": 623,
                        "src": "12554:426:1",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 621,
                            "nodeType": "Block",
                            "src": "13433:681:1",
                            "statements": [
                                {
                                    "assignments": [
                                        594
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 594,
                                            "mutability": "mutable",
                                            "name": "returndata",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 621,
                                            "src": "13782:23:1",
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                "typeString": "bytes"
                                            },
                                            "typeName": {
                                                "id": 593,
                                                "name": "bytes",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "13782:5:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_storage_ptr",
                                                    "typeString": "bytes"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 603,
                                    "initialValue": {
                                        "arguments": [
                                            {
                                                "id": 600,
                                                "name": "data",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 590,
                                                "src": "13836:4:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            },
                                            {
                                                "hexValue": "5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564",
                                                "id": 601,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "13842:34:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_47fb62c2c272651d2f0f342bac006756b8ba07f21cc5cb87e0fbb9d50c0c585b",
                                                    "typeString": "literal_string \"SafeERC20: low-level call failed\""
                                                },
                                                "value": "SafeERC20: low-level call failed"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_47fb62c2c272651d2f0f342bac006756b8ba07f21cc5cb87e0fbb9d50c0c585b",
                                                    "typeString": "literal_string \"SafeERC20: low-level call failed\""
                                                }
                                            ],
                                            "expression": {
                                                "arguments": [
                                                    {
                                                        "id": 597,
                                                        "name": "token",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 588,
                                                        "src": "13816:5:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_contract$_IERC20_$404",
                                                            "typeString": "contract IERC20"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_contract$_IERC20_$404",
                                                            "typeString": "contract IERC20"
                                                        }
                                                    ],
                                                    "id": 596,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "ElementaryTypeNameExpression",
                                                    "src": "13808:7:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_address_$",
                                                        "typeString": "type(address)"
                                                    },
                                                    "typeName": {
                                                        "id": 595,
                                                        "name": "address",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "13808:7:1",
                                                        "typeDescriptions": {}
                                                    }
                                                },
                                                "id": 598,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "typeConversion",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "13808:14:1",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "id": 599,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "functionCall",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 123,
                                            "src": "13808:27:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_address_$",
                                                "typeString": "function (address,bytes memory,string memory) returns (bytes memory)"
                                            }
                                        },
                                        "id": 602,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "13808:69:1",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "13782:95:1"
                                },
                                {
                                    "condition": {
                                        "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        },
                                        "id": 607,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "expression": {
                                                "id": 604,
                                                "name": "returndata",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 594,
                                                "src": "13891:10:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            },
                                            "id": 605,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "length",
                                            "nodeType": "MemberAccess",
                                            "src": "13891:17:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": ">",
                                        "rightExpression": {
                                            "hexValue": "30",
                                            "id": 606,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "13911:1:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_rational_0_by_1",
                                                "typeString": "int_const 0"
                                            },
                                            "value": "0"
                                        },
                                        "src": "13891:21:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 620,
                                    "nodeType": "IfStatement",
                                    "src": "13887:221:1",
                                    "trueBody": {
                                        "id": 619,
                                        "nodeType": "Block",
                                        "src": "13914:194:1",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "arguments": [
                                                                {
                                                                    "id": 611,
                                                                    "name": "returndata",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 594,
                                                                    "src": "14031:10:1",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                                        "typeString": "bytes memory"
                                                                    }
                                                                },
                                                                {
                                                                    "components": [
                                                                        {
                                                                            "id": 613,
                                                                            "isConstant": false,
                                                                            "isLValue": false,
                                                                            "isPure": true,
                                                                            "lValueRequested": false,
                                                                            "nodeType": "ElementaryTypeNameExpression",
                                                                            "src": "14044:4:1",
                                                                            "typeDescriptions": {
                                                                                "typeIdentifier": "t_type$_t_bool_$",
                                                                                "typeString": "type(bool)"
                                                                            },
                                                                            "typeName": {
                                                                                "id": 612,
                                                                                "name": "bool",
                                                                                "nodeType": "ElementaryTypeName",
                                                                                "src": "14044:4:1",
                                                                                "typeDescriptions": {}
                                                                            }
                                                                        }
                                                                    ],
                                                                    "id": 614,
                                                                    "isConstant": false,
                                                                    "isInlineArray": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "nodeType": "TupleExpression",
                                                                    "src": "14043:6:1",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_type$_t_bool_$",
                                                                        "typeString": "type(bool)"
                                                                    }
                                                                }
                                                            ],
                                                            "expression": {
                                                                "argumentTypes": [
                                                                    {
                                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                                        "typeString": "bytes memory"
                                                                    },
                                                                    {
                                                                        "typeIdentifier": "t_type$_t_bool_$",
                                                                        "typeString": "type(bool)"
                                                                    }
                                                                ],
                                                                "expression": {
                                                                    "id": 609,
                                                                    "name": "abi",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 4294967295,
                                                                    "src": "14020:3:1",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_magic_abi",
                                                                        "typeString": "abi"
                                                                    }
                                                                },
                                                                "id": 610,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "lValueRequested": false,
                                                                "memberName": "decode",
                                                                "nodeType": "MemberAccess",
                                                                "src": "14020:10:1",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                                                                    "typeString": "function () pure"
                                                                }
                                                            },
                                                            "id": 615,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "kind": "functionCall",
                                                            "lValueRequested": false,
                                                            "names": [],
                                                            "nodeType": "FunctionCall",
                                                            "src": "14020:30:1",
                                                            "tryCall": false,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            }
                                                        },
                                                        {
                                                            "hexValue": "5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564",
                                                            "id": 616,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "string",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "14052:44:1",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd",
                                                                "typeString": "literal_string \"SafeERC20: ERC20 operation did not succeed\""
                                                            },
                                                            "value": "SafeERC20: ERC20 operation did not succeed"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd",
                                                                "typeString": "literal_string \"SafeERC20: ERC20 operation did not succeed\""
                                                            }
                                                        ],
                                                        "id": 608,
                                                        "name": "require",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [
                                                            4294967278,
                                                            4294967278
                                                        ],
                                                        "referencedDeclaration": 4294967278,
                                                        "src": "14012:7:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                            "typeString": "function (bool,string memory) pure"
                                                        }
                                                    },
                                                    "id": 617,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "14012:85:1",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$__$",
                                                        "typeString": "tuple()"
                                                    }
                                                },
                                                "id": 618,
                                                "nodeType": "ExpressionStatement",
                                                "src": "14012:85:1"
                                            }
                                        ]
                                    }
                                }
                            ]
                        },
                        "documentation": {
                            "id": 585,
                            "nodeType": "StructuredDocumentation",
                            "src": "12986:372:1",
                            "text": " @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n on the return value: the return value is optional (but if data is returned, it must not be false).\n @param token The token targeted by the call.\n @param data The call data (encoded using abi.encode or one of its variants)."
                        },
                        "id": 622,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "_callOptionalReturn",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 591,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 588,
                                    "mutability": "mutable",
                                    "name": "token",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 622,
                                    "src": "13392:12:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IERC20_$404",
                                        "typeString": "contract IERC20"
                                    },
                                    "typeName": {
                                        "id": 587,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 586,
                                            "name": "IERC20",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 404,
                                            "src": "13392:6:1"
                                        },
                                        "referencedDeclaration": 404,
                                        "src": "13392:6:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IERC20_$404",
                                            "typeString": "contract IERC20"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 590,
                                    "mutability": "mutable",
                                    "name": "data",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 622,
                                    "src": "13406:17:1",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 589,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "13406:5:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "13391:33:1"
                        },
                        "returnParameters": {
                            "id": 592,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "13433:0:1"
                        },
                        "scope": 623,
                        "src": "13363:751:1",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "private"
                    }
                ],
                "scope": 929,
                "src": "10949:3167:1"
            },
            {
                "abstract": false,
                "baseContracts": [],
                "contractDependencies": [],
                "contractKind": "interface",
                "fullyImplemented": false,
                "id": 690,
                "linearizedBaseContracts": [
                    690
                ],
                "name": "iToken",
                "nodeType": "ContractDefinition",
                "nodes": [
                    {
                        "documentation": {
                            "id": 624,
                            "nodeType": "StructuredDocumentation",
                            "src": "14141:106:1",
                            "text": "@param _owner The address from which the balance will be retrieved\n @return balance the balance"
                        },
                        "functionSelector": "70a08231",
                        "id": 631,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "balanceOf",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 627,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 626,
                                    "mutability": "mutable",
                                    "name": "_owner",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 631,
                                    "src": "14271:14:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 625,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "14271:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "14270:16:1"
                        },
                        "returnParameters": {
                            "id": 630,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 629,
                                    "mutability": "mutable",
                                    "name": "balance",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 631,
                                    "src": "14310:15:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 628,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "14310:7:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "14309:17:1"
                        },
                        "scope": 690,
                        "src": "14252:75:1",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 632,
                            "nodeType": "StructuredDocumentation",
                            "src": "14333:233:1",
                            "text": "@notice send `_value` token to `_to` from `msg.sender`\n @param _to The address of the recipient\n @param _value The amount of token to be transferred\n @return success Whether the transfer was successful or not"
                        },
                        "functionSelector": "a9059cbb",
                        "id": 641,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "transfer",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 637,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 634,
                                    "mutability": "mutable",
                                    "name": "_to",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 641,
                                    "src": "14589:11:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 633,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "14589:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 636,
                                    "mutability": "mutable",
                                    "name": "_value",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 641,
                                    "src": "14602:14:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 635,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "14602:7:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "14588:29:1"
                        },
                        "returnParameters": {
                            "id": 640,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 639,
                                    "mutability": "mutable",
                                    "name": "success",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 641,
                                    "src": "14637:12:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 638,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "14637:4:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "14636:14:1"
                        },
                        "scope": 690,
                        "src": "14571:80:1",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 642,
                            "nodeType": "StructuredDocumentation",
                            "src": "14657:318:1",
                            "text": "@notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from`\n @param _from The address of the sender\n @param _to The address of the recipient\n @param _value The amount of token to be transferred\n @return success Whether the transfer was successful or not"
                        },
                        "functionSelector": "23b872dd",
                        "id": 653,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "transferFrom",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 649,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 644,
                                    "mutability": "mutable",
                                    "name": "_from",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 653,
                                    "src": "15002:13:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 643,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "15002:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 646,
                                    "mutability": "mutable",
                                    "name": "_to",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 653,
                                    "src": "15017:11:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 645,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "15017:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 648,
                                    "mutability": "mutable",
                                    "name": "_value",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 653,
                                    "src": "15030:14:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 647,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "15030:7:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "15001:44:1"
                        },
                        "returnParameters": {
                            "id": 652,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 651,
                                    "mutability": "mutable",
                                    "name": "success",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 653,
                                    "src": "15064:12:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 650,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "15064:4:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "15063:14:1"
                        },
                        "scope": 690,
                        "src": "14980:98:1",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 654,
                            "nodeType": "StructuredDocumentation",
                            "src": "15084:280:1",
                            "text": "@notice `msg.sender` approves `_addr` to spend `_value` tokens\n @param _spender The address of the account able to transfer the tokens\n @param _value The amount of wei to be approved for transfer\n @return success Whether the approval was successful or not"
                        },
                        "functionSelector": "095ea7b3",
                        "id": 663,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "approve",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 659,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 656,
                                    "mutability": "mutable",
                                    "name": "_spender",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 663,
                                    "src": "15386:16:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 655,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "15386:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 658,
                                    "mutability": "mutable",
                                    "name": "_value",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 663,
                                    "src": "15406:14:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 657,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "15406:7:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "15385:36:1"
                        },
                        "returnParameters": {
                            "id": 662,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 661,
                                    "mutability": "mutable",
                                    "name": "success",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 663,
                                    "src": "15440:12:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 660,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "15440:4:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "15439:14:1"
                        },
                        "scope": 690,
                        "src": "15369:85:1",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 664,
                            "nodeType": "StructuredDocumentation",
                            "src": "15460:207:1",
                            "text": "@param _owner The address of the account owning tokens\n @param _spender The address of the account able to transfer the tokens\n @return remaining Amount of remaining tokens allowed to spent"
                        },
                        "functionSelector": "dd62ed3e",
                        "id": 673,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "allowance",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 669,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 666,
                                    "mutability": "mutable",
                                    "name": "_owner",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 673,
                                    "src": "15691:14:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 665,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "15691:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 668,
                                    "mutability": "mutable",
                                    "name": "_spender",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 673,
                                    "src": "15707:16:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 667,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "15707:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "15690:34:1"
                        },
                        "returnParameters": {
                            "id": 672,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 671,
                                    "mutability": "mutable",
                                    "name": "remaining",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 673,
                                    "src": "15748:17:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 670,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "15748:7:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "15747:19:1"
                        },
                        "scope": 690,
                        "src": "15672:95:1",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "anonymous": false,
                        "id": 681,
                        "name": "Transfer",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 680,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 675,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "_from",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 681,
                                    "src": "15788:21:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 674,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "15788:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 677,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "_to",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 681,
                                    "src": "15811:19:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 676,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "15811:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 679,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "_value",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 681,
                                    "src": "15832:14:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 678,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "15832:7:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "15787:60:1"
                        },
                        "src": "15773:75:1"
                    },
                    {
                        "anonymous": false,
                        "id": 689,
                        "name": "Approval",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 688,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 683,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "_owner",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 689,
                                    "src": "15868:22:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 682,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "15868:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 685,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "_spender",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 689,
                                    "src": "15892:24:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 684,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "15892:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 687,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "_value",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 689,
                                    "src": "15918:14:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 686,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "15918:7:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "15867:66:1"
                        },
                        "src": "15853:81:1"
                    }
                ],
                "scope": 929,
                "src": "14117:1819:1"
            },
            {
                "abstract": false,
                "baseContracts": [
                    {
                        "baseName": {
                            "id": 691,
                            "name": "iToken",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 690,
                            "src": "15961:6:1"
                        },
                        "id": 692,
                        "nodeType": "InheritanceSpecifier",
                        "src": "15961:6:1"
                    }
                ],
                "contractDependencies": [
                    690
                ],
                "contractKind": "contract",
                "fullyImplemented": true,
                "id": 928,
                "linearizedBaseContracts": [
                    928,
                    690
                ],
                "name": "Test_Token",
                "nodeType": "ContractDefinition",
                "nodes": [
                    {
                        "id": 696,
                        "libraryName": {
                            "id": 693,
                            "name": "SafeERC20",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 623,
                            "src": "15980:9:1"
                        },
                        "nodeType": "UsingForDirective",
                        "src": "15974:27:1",
                        "typeName": {
                            "id": 695,
                            "nodeType": "UserDefinedTypeName",
                            "pathNode": {
                                "id": 694,
                                "name": "iToken",
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 690,
                                "src": "15994:6:1"
                            },
                            "referencedDeclaration": 690,
                            "src": "15994:6:1",
                            "typeDescriptions": {
                                "typeIdentifier": "t_contract$_iToken_$690",
                                "typeString": "contract iToken"
                            }
                        }
                    },
                    {
                        "constant": true,
                        "id": 703,
                        "mutability": "constant",
                        "name": "MAX_UINT256",
                        "nodeType": "VariableDeclaration",
                        "scope": 928,
                        "src": "16007:49:1",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                        },
                        "typeName": {
                            "id": 697,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "16007:7:1",
                            "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                            }
                        },
                        "value": {
                            "commonType": {
                                "typeIdentifier": "t_rational_115792089237316195423570985008687907853269984665640564039457584007913129639935_by_1",
                                "typeString": "int_const 1157...(70 digits omitted)...9935"
                            },
                            "id": 702,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "leftExpression": {
                                "commonType": {
                                    "typeIdentifier": "t_rational_115792089237316195423570985008687907853269984665640564039457584007913129639936_by_1",
                                    "typeString": "int_const 1157...(70 digits omitted)...9936"
                                },
                                "id": 700,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "leftExpression": {
                                    "hexValue": "32",
                                    "id": 698,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "16046:1:1",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_rational_2_by_1",
                                        "typeString": "int_const 2"
                                    },
                                    "value": "2"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "**",
                                "rightExpression": {
                                    "hexValue": "323536",
                                    "id": 699,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "16049:3:1",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_rational_256_by_1",
                                        "typeString": "int_const 256"
                                    },
                                    "value": "256"
                                },
                                "src": "16046:6:1",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_rational_115792089237316195423570985008687907853269984665640564039457584007913129639936_by_1",
                                    "typeString": "int_const 1157...(70 digits omitted)...9936"
                                }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                                "hexValue": "31",
                                "id": 701,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "16055:1:1",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                },
                                "value": "1"
                            },
                            "src": "16046:10:1",
                            "typeDescriptions": {
                                "typeIdentifier": "t_rational_115792089237316195423570985008687907853269984665640564039457584007913129639935_by_1",
                                "typeString": "int_const 1157...(70 digits omitted)...9935"
                            }
                        },
                        "visibility": "private"
                    },
                    {
                        "constant": false,
                        "functionSelector": "27e235e3",
                        "id": 707,
                        "mutability": "mutable",
                        "name": "balances",
                        "nodeType": "VariableDeclaration",
                        "scope": 928,
                        "src": "16062:44:1",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                            "typeString": "mapping(address => uint256)"
                        },
                        "typeName": {
                            "id": 706,
                            "keyType": {
                                "id": 704,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "16071:7:1",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                }
                            },
                            "nodeType": "Mapping",
                            "src": "16062:28:1",
                            "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                            },
                            "valueType": {
                                "id": 705,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "16082:7:1",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                }
                            }
                        },
                        "visibility": "public"
                    },
                    {
                        "constant": false,
                        "functionSelector": "5c658165",
                        "id": 713,
                        "mutability": "mutable",
                        "name": "allowed",
                        "nodeType": "VariableDeclaration",
                        "scope": 928,
                        "src": "16112:64:1",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                            "typeString": "mapping(address => mapping(address => uint256))"
                        },
                        "typeName": {
                            "id": 712,
                            "keyType": {
                                "id": 708,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "16121:7:1",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                }
                            },
                            "nodeType": "Mapping",
                            "src": "16112:49:1",
                            "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                "typeString": "mapping(address => mapping(address => uint256))"
                            },
                            "valueType": {
                                "id": 711,
                                "keyType": {
                                    "id": 709,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "16141:7:1",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    }
                                },
                                "nodeType": "Mapping",
                                "src": "16132:28:1",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                },
                                "valueType": {
                                    "id": 710,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "16152:7:1",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    }
                                }
                            }
                        },
                        "visibility": "public"
                    },
                    {
                        "constant": false,
                        "functionSelector": "18160ddd",
                        "id": 715,
                        "mutability": "mutable",
                        "name": "totalSupply",
                        "nodeType": "VariableDeclaration",
                        "scope": 928,
                        "src": "16182:26:1",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                        },
                        "typeName": {
                            "id": 714,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "16182:7:1",
                            "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                            }
                        },
                        "visibility": "public"
                    },
                    {
                        "constant": false,
                        "functionSelector": "06fdde03",
                        "id": 717,
                        "mutability": "mutable",
                        "name": "name",
                        "nodeType": "VariableDeclaration",
                        "scope": 928,
                        "src": "16501:18:1",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string"
                        },
                        "typeName": {
                            "id": 716,
                            "name": "string",
                            "nodeType": "ElementaryTypeName",
                            "src": "16501:6:1",
                            "typeDescriptions": {
                                "typeIdentifier": "t_string_storage_ptr",
                                "typeString": "string"
                            }
                        },
                        "visibility": "public"
                    },
                    {
                        "constant": false,
                        "functionSelector": "313ce567",
                        "id": 719,
                        "mutability": "mutable",
                        "name": "decimals",
                        "nodeType": "VariableDeclaration",
                        "scope": 928,
                        "src": "16572:21:1",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                        },
                        "typeName": {
                            "id": 718,
                            "name": "uint8",
                            "nodeType": "ElementaryTypeName",
                            "src": "16572:5:1",
                            "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                            }
                        },
                        "visibility": "public"
                    },
                    {
                        "constant": false,
                        "functionSelector": "95d89b41",
                        "id": 721,
                        "mutability": "mutable",
                        "name": "symbol",
                        "nodeType": "VariableDeclaration",
                        "scope": 928,
                        "src": "16643:20:1",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string"
                        },
                        "typeName": {
                            "id": 720,
                            "name": "string",
                            "nodeType": "ElementaryTypeName",
                            "src": "16643:6:1",
                            "typeDescriptions": {
                                "typeIdentifier": "t_string_storage_ptr",
                                "typeString": "string"
                            }
                        },
                        "visibility": "public"
                    },
                    {
                        "body": {
                            "id": 755,
                            "nodeType": "Block",
                            "src": "16822:493:1",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 737,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "baseExpression": {
                                                "id": 732,
                                                "name": "balances",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 707,
                                                "src": "16832:8:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                    "typeString": "mapping(address => uint256)"
                                                }
                                            },
                                            "id": 735,
                                            "indexExpression": {
                                                "expression": {
                                                    "id": 733,
                                                    "name": "msg",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967281,
                                                    "src": "16841:3:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_message",
                                                        "typeString": "msg"
                                                    }
                                                },
                                                "id": 734,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "sender",
                                                "nodeType": "MemberAccess",
                                                "src": "16841:10:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "IndexAccess",
                                            "src": "16832:20:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 736,
                                            "name": "_initialAmount",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 723,
                                            "src": "16855:14:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "16832:37:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 738,
                                    "nodeType": "ExpressionStatement",
                                    "src": "16832:37:1"
                                },
                                {
                                    "expression": {
                                        "id": 741,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 739,
                                            "name": "totalSupply",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 715,
                                            "src": "16932:11:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 740,
                                            "name": "_initialAmount",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 723,
                                            "src": "16946:14:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "16932:28:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 742,
                                    "nodeType": "ExpressionStatement",
                                    "src": "16932:28:1"
                                },
                                {
                                    "expression": {
                                        "id": 745,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 743,
                                            "name": "name",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 717,
                                            "src": "17016:4:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_string_storage",
                                                "typeString": "string storage ref"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 744,
                                            "name": "_tokenName",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 725,
                                            "src": "17023:10:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_string_memory_ptr",
                                                "typeString": "string memory"
                                            }
                                        },
                                        "src": "17016:17:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage",
                                            "typeString": "string storage ref"
                                        }
                                    },
                                    "id": 746,
                                    "nodeType": "ExpressionStatement",
                                    "src": "17016:17:1"
                                },
                                {
                                    "expression": {
                                        "id": 749,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 747,
                                            "name": "decimals",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 719,
                                            "src": "17114:8:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint8",
                                                "typeString": "uint8"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 748,
                                            "name": "_decimalUnits",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 727,
                                            "src": "17125:13:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint8",
                                                "typeString": "uint8"
                                            }
                                        },
                                        "src": "17114:24:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint8",
                                            "typeString": "uint8"
                                        }
                                    },
                                    "id": 750,
                                    "nodeType": "ExpressionStatement",
                                    "src": "17114:24:1"
                                },
                                {
                                    "expression": {
                                        "id": 753,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 751,
                                            "name": "symbol",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 721,
                                            "src": "17218:6:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_string_storage",
                                                "typeString": "string storage ref"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 752,
                                            "name": "_tokenSymbol",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 729,
                                            "src": "17227:12:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_string_memory_ptr",
                                                "typeString": "string memory"
                                            }
                                        },
                                        "src": "17218:21:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage",
                                            "typeString": "string storage ref"
                                        }
                                    },
                                    "id": 754,
                                    "nodeType": "ExpressionStatement",
                                    "src": "17218:21:1"
                                }
                            ]
                        },
                        "id": 756,
                        "implemented": true,
                        "kind": "constructor",
                        "modifiers": [],
                        "name": "",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 730,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 723,
                                    "mutability": "mutable",
                                    "name": "_initialAmount",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 756,
                                    "src": "16722:22:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 722,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "16722:7:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 725,
                                    "mutability": "mutable",
                                    "name": "_tokenName",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 756,
                                    "src": "16746:24:1",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_memory_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 724,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "16746:6:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 727,
                                    "mutability": "mutable",
                                    "name": "_decimalUnits",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 756,
                                    "src": "16772:19:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                    },
                                    "typeName": {
                                        "id": 726,
                                        "name": "uint8",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "16772:5:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint8",
                                            "typeString": "uint8"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 729,
                                    "mutability": "mutable",
                                    "name": "_tokenSymbol",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 756,
                                    "src": "16793:27:1",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_memory_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 728,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "16793:6:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "16721:100:1"
                        },
                        "returnParameters": {
                            "id": 731,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "16822:0:1"
                        },
                        "scope": 928,
                        "src": "16710:605:1",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            641
                        ],
                        "body": {
                            "id": 798,
                            "nodeType": "Block",
                            "src": "17407:295:1",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 772,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "baseExpression": {
                                                        "id": 767,
                                                        "name": "balances",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 707,
                                                        "src": "17425:8:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                            "typeString": "mapping(address => uint256)"
                                                        }
                                                    },
                                                    "id": 770,
                                                    "indexExpression": {
                                                        "expression": {
                                                            "id": 768,
                                                            "name": "msg",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 4294967281,
                                                            "src": "17434:3:1",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_magic_message",
                                                                "typeString": "msg"
                                                            }
                                                        },
                                                        "id": 769,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "sender",
                                                        "nodeType": "MemberAccess",
                                                        "src": "17434:10:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "17425:20:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": ">=",
                                                "rightExpression": {
                                                    "id": 771,
                                                    "name": "_value",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 760,
                                                    "src": "17449:6:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "17425:30:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "746f6b656e2062616c616e6365206973206c6f776572207468616e207468652076616c756520726571756573746564",
                                                "id": 773,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "17457:49:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_1585781bcea687a18f97b1a94f6f8e11a9041130e156fda9ccf03b1c68f06452",
                                                    "typeString": "literal_string \"token balance is lower than the value requested\""
                                                },
                                                "value": "token balance is lower than the value requested"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_1585781bcea687a18f97b1a94f6f8e11a9041130e156fda9ccf03b1c68f06452",
                                                    "typeString": "literal_string \"token balance is lower than the value requested\""
                                                }
                                            ],
                                            "id": 766,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "17417:7:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 774,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "17417:90:1",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 775,
                                    "nodeType": "ExpressionStatement",
                                    "src": "17417:90:1"
                                },
                                {
                                    "expression": {
                                        "id": 781,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "baseExpression": {
                                                "id": 776,
                                                "name": "balances",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 707,
                                                "src": "17517:8:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                    "typeString": "mapping(address => uint256)"
                                                }
                                            },
                                            "id": 779,
                                            "indexExpression": {
                                                "expression": {
                                                    "id": 777,
                                                    "name": "msg",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967281,
                                                    "src": "17526:3:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_message",
                                                        "typeString": "msg"
                                                    }
                                                },
                                                "id": 778,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "sender",
                                                "nodeType": "MemberAccess",
                                                "src": "17526:10:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "IndexAccess",
                                            "src": "17517:20:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "-=",
                                        "rightHandSide": {
                                            "id": 780,
                                            "name": "_value",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 760,
                                            "src": "17541:6:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "17517:30:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 782,
                                    "nodeType": "ExpressionStatement",
                                    "src": "17517:30:1"
                                },
                                {
                                    "expression": {
                                        "id": 787,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "baseExpression": {
                                                "id": 783,
                                                "name": "balances",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 707,
                                                "src": "17557:8:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                    "typeString": "mapping(address => uint256)"
                                                }
                                            },
                                            "id": 785,
                                            "indexExpression": {
                                                "id": 784,
                                                "name": "_to",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 758,
                                                "src": "17566:3:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "IndexAccess",
                                            "src": "17557:13:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "+=",
                                        "rightHandSide": {
                                            "id": 786,
                                            "name": "_value",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 760,
                                            "src": "17574:6:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "17557:23:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 788,
                                    "nodeType": "ExpressionStatement",
                                    "src": "17557:23:1"
                                },
                                {
                                    "eventCall": {
                                        "arguments": [
                                            {
                                                "expression": {
                                                    "id": 790,
                                                    "name": "msg",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967281,
                                                    "src": "17604:3:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_message",
                                                        "typeString": "msg"
                                                    }
                                                },
                                                "id": 791,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "sender",
                                                "nodeType": "MemberAccess",
                                                "src": "17604:10:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 792,
                                                "name": "_to",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 758,
                                                "src": "17616:3:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 793,
                                                "name": "_value",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 760,
                                                "src": "17621:6:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 789,
                                            "name": "Transfer",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 681,
                                            "src": "17595:8:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,address,uint256)"
                                            }
                                        },
                                        "id": 794,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "17595:33:1",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 795,
                                    "nodeType": "EmitStatement",
                                    "src": "17590:38:1"
                                },
                                {
                                    "expression": {
                                        "hexValue": "74727565",
                                        "id": 796,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "bool",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "17691:4:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        },
                                        "value": "true"
                                    },
                                    "functionReturnParameters": 765,
                                    "id": 797,
                                    "nodeType": "Return",
                                    "src": "17684:11:1"
                                }
                            ]
                        },
                        "functionSelector": "a9059cbb",
                        "id": 799,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "transfer",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 762,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "17375:8:1"
                        },
                        "parameters": {
                            "id": 761,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 758,
                                    "mutability": "mutable",
                                    "name": "_to",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 799,
                                    "src": "17339:11:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 757,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "17339:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 760,
                                    "mutability": "mutable",
                                    "name": "_value",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 799,
                                    "src": "17352:14:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 759,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "17352:7:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "17338:29:1"
                        },
                        "returnParameters": {
                            "id": 765,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 764,
                                    "mutability": "mutable",
                                    "name": "success",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 799,
                                    "src": "17393:12:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 763,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "17393:4:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "17392:14:1"
                        },
                        "scope": 928,
                        "src": "17321:381:1",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            653
                        ],
                        "body": {
                            "id": 867,
                            "nodeType": "Block",
                            "src": "17813:468:1",
                            "statements": [
                                {
                                    "assignments": [
                                        812
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 812,
                                            "mutability": "mutable",
                                            "name": "allowance",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 867,
                                            "src": "17823:17:1",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 811,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "17823:7:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 819,
                                    "initialValue": {
                                        "baseExpression": {
                                            "baseExpression": {
                                                "id": 813,
                                                "name": "allowed",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 713,
                                                "src": "17843:7:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                                    "typeString": "mapping(address => mapping(address => uint256))"
                                                }
                                            },
                                            "id": 815,
                                            "indexExpression": {
                                                "id": 814,
                                                "name": "_from",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 801,
                                                "src": "17851:5:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "17843:14:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                "typeString": "mapping(address => uint256)"
                                            }
                                        },
                                        "id": 818,
                                        "indexExpression": {
                                            "expression": {
                                                "id": 816,
                                                "name": "msg",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4294967281,
                                                "src": "17858:3:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_magic_message",
                                                    "typeString": "msg"
                                                }
                                            },
                                            "id": 817,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "sender",
                                            "nodeType": "MemberAccess",
                                            "src": "17858:10:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "17843:26:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "17823:46:1"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                "id": 829,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    "id": 825,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "baseExpression": {
                                                            "id": 821,
                                                            "name": "balances",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 707,
                                                            "src": "17887:8:1",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                                "typeString": "mapping(address => uint256)"
                                                            }
                                                        },
                                                        "id": 823,
                                                        "indexExpression": {
                                                            "id": 822,
                                                            "name": "_from",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 801,
                                                            "src": "17896:5:1",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        },
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "nodeType": "IndexAccess",
                                                        "src": "17887:15:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": ">=",
                                                    "rightExpression": {
                                                        "id": 824,
                                                        "name": "_value",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 805,
                                                        "src": "17906:6:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "src": "17887:25:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "&&",
                                                "rightExpression": {
                                                    "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    "id": 828,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "id": 826,
                                                        "name": "allowance",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 812,
                                                        "src": "17916:9:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": ">=",
                                                    "rightExpression": {
                                                        "id": 827,
                                                        "name": "_value",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 805,
                                                        "src": "17929:6:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "src": "17916:19:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "src": "17887:48:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "746f6b656e2062616c616e6365206f7220616c6c6f77616e6365206973206c6f776572207468616e20616d6f756e7420726571756573746564",
                                                "id": 830,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "17937:59:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_d8d39484df698fe59d78d2031639e610e556bf68a0e1f7af4e968ff763a96c6a",
                                                    "typeString": "literal_string \"token balance or allowance is lower than amount requested\""
                                                },
                                                "value": "token balance or allowance is lower than amount requested"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_d8d39484df698fe59d78d2031639e610e556bf68a0e1f7af4e968ff763a96c6a",
                                                    "typeString": "literal_string \"token balance or allowance is lower than amount requested\""
                                                }
                                            ],
                                            "id": 820,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "17879:7:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 831,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "17879:118:1",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 832,
                                    "nodeType": "ExpressionStatement",
                                    "src": "17879:118:1"
                                },
                                {
                                    "expression": {
                                        "id": 837,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "baseExpression": {
                                                "id": 833,
                                                "name": "balances",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 707,
                                                "src": "18007:8:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                    "typeString": "mapping(address => uint256)"
                                                }
                                            },
                                            "id": 835,
                                            "indexExpression": {
                                                "id": 834,
                                                "name": "_to",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 803,
                                                "src": "18016:3:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "IndexAccess",
                                            "src": "18007:13:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "+=",
                                        "rightHandSide": {
                                            "id": 836,
                                            "name": "_value",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 805,
                                            "src": "18024:6:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "18007:23:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 838,
                                    "nodeType": "ExpressionStatement",
                                    "src": "18007:23:1"
                                },
                                {
                                    "expression": {
                                        "id": 843,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "baseExpression": {
                                                "id": 839,
                                                "name": "balances",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 707,
                                                "src": "18040:8:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                    "typeString": "mapping(address => uint256)"
                                                }
                                            },
                                            "id": 841,
                                            "indexExpression": {
                                                "id": 840,
                                                "name": "_from",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 801,
                                                "src": "18049:5:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "IndexAccess",
                                            "src": "18040:15:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "-=",
                                        "rightHandSide": {
                                            "id": 842,
                                            "name": "_value",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 805,
                                            "src": "18059:6:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "18040:25:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 844,
                                    "nodeType": "ExpressionStatement",
                                    "src": "18040:25:1"
                                },
                                {
                                    "condition": {
                                        "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        },
                                        "id": 847,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "id": 845,
                                            "name": "allowance",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 812,
                                            "src": "18079:9:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "<",
                                        "rightExpression": {
                                            "id": 846,
                                            "name": "MAX_UINT256",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 703,
                                            "src": "18091:11:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "18079:23:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 858,
                                    "nodeType": "IfStatement",
                                    "src": "18075:90:1",
                                    "trueBody": {
                                        "id": 857,
                                        "nodeType": "Block",
                                        "src": "18104:61:1",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "id": 855,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftHandSide": {
                                                        "baseExpression": {
                                                            "baseExpression": {
                                                                "id": 848,
                                                                "name": "allowed",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 713,
                                                                "src": "18118:7:1",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                                                    "typeString": "mapping(address => mapping(address => uint256))"
                                                                }
                                                            },
                                                            "id": 852,
                                                            "indexExpression": {
                                                                "id": 849,
                                                                "name": "_from",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 801,
                                                                "src": "18126:5:1",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "nodeType": "IndexAccess",
                                                            "src": "18118:14:1",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                                "typeString": "mapping(address => uint256)"
                                                            }
                                                        },
                                                        "id": 853,
                                                        "indexExpression": {
                                                            "expression": {
                                                                "id": 850,
                                                                "name": "msg",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 4294967281,
                                                                "src": "18133:3:1",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_magic_message",
                                                                    "typeString": "msg"
                                                                }
                                                            },
                                                            "id": 851,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "sender",
                                                            "nodeType": "MemberAccess",
                                                            "src": "18133:10:1",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        },
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": true,
                                                        "nodeType": "IndexAccess",
                                                        "src": "18118:26:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "nodeType": "Assignment",
                                                    "operator": "-=",
                                                    "rightHandSide": {
                                                        "id": 854,
                                                        "name": "_value",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 805,
                                                        "src": "18148:6:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "src": "18118:36:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "id": 856,
                                                "nodeType": "ExpressionStatement",
                                                "src": "18118:36:1"
                                            }
                                        ]
                                    }
                                },
                                {
                                    "eventCall": {
                                        "arguments": [
                                            {
                                                "id": 860,
                                                "name": "_from",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 801,
                                                "src": "18188:5:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 861,
                                                "name": "_to",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 803,
                                                "src": "18195:3:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 862,
                                                "name": "_value",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 805,
                                                "src": "18200:6:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 859,
                                            "name": "Transfer",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 681,
                                            "src": "18179:8:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,address,uint256)"
                                            }
                                        },
                                        "id": 863,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "18179:28:1",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 864,
                                    "nodeType": "EmitStatement",
                                    "src": "18174:33:1"
                                },
                                {
                                    "expression": {
                                        "hexValue": "74727565",
                                        "id": 865,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "bool",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "18270:4:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        },
                                        "value": "true"
                                    },
                                    "functionReturnParameters": 810,
                                    "id": 866,
                                    "nodeType": "Return",
                                    "src": "18263:11:1"
                                }
                            ]
                        },
                        "functionSelector": "23b872dd",
                        "id": 868,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "transferFrom",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 807,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "17781:8:1"
                        },
                        "parameters": {
                            "id": 806,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 801,
                                    "mutability": "mutable",
                                    "name": "_from",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 868,
                                    "src": "17730:13:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 800,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "17730:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 803,
                                    "mutability": "mutable",
                                    "name": "_to",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 868,
                                    "src": "17745:11:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 802,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "17745:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 805,
                                    "mutability": "mutable",
                                    "name": "_value",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 868,
                                    "src": "17758:14:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 804,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "17758:7:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "17729:44:1"
                        },
                        "returnParameters": {
                            "id": 810,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 809,
                                    "mutability": "mutable",
                                    "name": "success",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 868,
                                    "src": "17799:12:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 808,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "17799:4:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "17798:14:1"
                        },
                        "scope": 928,
                        "src": "17708:573:1",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            631
                        ],
                        "body": {
                            "id": 880,
                            "nodeType": "Block",
                            "src": "18369:40:1",
                            "statements": [
                                {
                                    "expression": {
                                        "baseExpression": {
                                            "id": 876,
                                            "name": "balances",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 707,
                                            "src": "18386:8:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                "typeString": "mapping(address => uint256)"
                                            }
                                        },
                                        "id": 878,
                                        "indexExpression": {
                                            "id": 877,
                                            "name": "_owner",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 870,
                                            "src": "18395:6:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "18386:16:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "functionReturnParameters": 875,
                                    "id": 879,
                                    "nodeType": "Return",
                                    "src": "18379:23:1"
                                }
                            ]
                        },
                        "functionSelector": "70a08231",
                        "id": 881,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "balanceOf",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 872,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "18329:8:1"
                        },
                        "parameters": {
                            "id": 871,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 870,
                                    "mutability": "mutable",
                                    "name": "_owner",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 881,
                                    "src": "18306:14:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 869,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "18306:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "18305:16:1"
                        },
                        "returnParameters": {
                            "id": 875,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 874,
                                    "mutability": "mutable",
                                    "name": "balance",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 881,
                                    "src": "18352:15:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 873,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "18352:7:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "18351:17:1"
                        },
                        "scope": 928,
                        "src": "18287:122:1",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            663
                        ],
                        "body": {
                            "id": 909,
                            "nodeType": "Block",
                            "src": "18505:175:1",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 898,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "baseExpression": {
                                                "baseExpression": {
                                                    "id": 891,
                                                    "name": "allowed",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 713,
                                                    "src": "18515:7:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                                        "typeString": "mapping(address => mapping(address => uint256))"
                                                    }
                                                },
                                                "id": 895,
                                                "indexExpression": {
                                                    "expression": {
                                                        "id": 892,
                                                        "name": "msg",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967281,
                                                        "src": "18523:3:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_message",
                                                            "typeString": "msg"
                                                        }
                                                    },
                                                    "id": 893,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "sender",
                                                    "nodeType": "MemberAccess",
                                                    "src": "18523:10:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "IndexAccess",
                                                "src": "18515:19:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                    "typeString": "mapping(address => uint256)"
                                                }
                                            },
                                            "id": 896,
                                            "indexExpression": {
                                                "id": 894,
                                                "name": "_spender",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 883,
                                                "src": "18535:8:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "IndexAccess",
                                            "src": "18515:29:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 897,
                                            "name": "_value",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 885,
                                            "src": "18547:6:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "18515:38:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 899,
                                    "nodeType": "ExpressionStatement",
                                    "src": "18515:38:1"
                                },
                                {
                                    "eventCall": {
                                        "arguments": [
                                            {
                                                "expression": {
                                                    "id": 901,
                                                    "name": "msg",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967281,
                                                    "src": "18577:3:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_message",
                                                        "typeString": "msg"
                                                    }
                                                },
                                                "id": 902,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "sender",
                                                "nodeType": "MemberAccess",
                                                "src": "18577:10:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 903,
                                                "name": "_spender",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 883,
                                                "src": "18589:8:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 904,
                                                "name": "_value",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 885,
                                                "src": "18599:6:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 900,
                                            "name": "Approval",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 689,
                                            "src": "18568:8:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,address,uint256)"
                                            }
                                        },
                                        "id": 905,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "18568:38:1",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 906,
                                    "nodeType": "EmitStatement",
                                    "src": "18563:43:1"
                                },
                                {
                                    "expression": {
                                        "hexValue": "74727565",
                                        "id": 907,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "bool",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "18669:4:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        },
                                        "value": "true"
                                    },
                                    "functionReturnParameters": 890,
                                    "id": 908,
                                    "nodeType": "Return",
                                    "src": "18662:11:1"
                                }
                            ]
                        },
                        "functionSelector": "095ea7b3",
                        "id": 910,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "approve",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 887,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "18473:8:1"
                        },
                        "parameters": {
                            "id": 886,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 883,
                                    "mutability": "mutable",
                                    "name": "_spender",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 910,
                                    "src": "18432:16:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 882,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "18432:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 885,
                                    "mutability": "mutable",
                                    "name": "_value",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 910,
                                    "src": "18450:14:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 884,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "18450:7:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "18431:34:1"
                        },
                        "returnParameters": {
                            "id": 890,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 889,
                                    "mutability": "mutable",
                                    "name": "success",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 910,
                                    "src": "18491:12:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 888,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "18491:4:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "18490:14:1"
                        },
                        "scope": 928,
                        "src": "18415:265:1",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            673
                        ],
                        "body": {
                            "id": 926,
                            "nodeType": "Block",
                            "src": "18788:49:1",
                            "statements": [
                                {
                                    "expression": {
                                        "baseExpression": {
                                            "baseExpression": {
                                                "id": 920,
                                                "name": "allowed",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 713,
                                                "src": "18805:7:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                                    "typeString": "mapping(address => mapping(address => uint256))"
                                                }
                                            },
                                            "id": 922,
                                            "indexExpression": {
                                                "id": 921,
                                                "name": "_owner",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 912,
                                                "src": "18813:6:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "18805:15:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                "typeString": "mapping(address => uint256)"
                                            }
                                        },
                                        "id": 924,
                                        "indexExpression": {
                                            "id": 923,
                                            "name": "_spender",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 914,
                                            "src": "18821:8:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "18805:25:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "functionReturnParameters": 919,
                                    "id": 925,
                                    "nodeType": "Return",
                                    "src": "18798:32:1"
                                }
                            ]
                        },
                        "functionSelector": "dd62ed3e",
                        "id": 927,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "allowance",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 916,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "18746:8:1"
                        },
                        "parameters": {
                            "id": 915,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 912,
                                    "mutability": "mutable",
                                    "name": "_owner",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 927,
                                    "src": "18705:14:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 911,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "18705:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 914,
                                    "mutability": "mutable",
                                    "name": "_spender",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 927,
                                    "src": "18721:16:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 913,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "18721:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "18704:34:1"
                        },
                        "returnParameters": {
                            "id": 919,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 918,
                                    "mutability": "mutable",
                                    "name": "remaining",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 927,
                                    "src": "18769:17:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 917,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "18769:7:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "18768:19:1"
                        },
                        "scope": 928,
                        "src": "18686:151:1",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "public"
                    }
                ],
                "scope": 929,
                "src": "15938:2901:1"
            }
        ],
        "src": "73:18766:1"
    },
    "legacyAST": {
        "absolutePath": "/Users/jordigironamezcua/pruebas/contracts/Token.sol",
        "exportedSymbols": {
            "Address": [
                328
            ],
            "IERC20": [
                404
            ],
            "SafeERC20": [
                623
            ],
            "Test_Token": [
                928
            ],
            "iToken": [
                690
            ]
        },
        "id": 929,
        "license": "MIT",
        "nodeType": "SourceUnit",
        "nodes": [
            {
                "id": 34,
                "literals": [
                    "solidity",
                    "^",
                    "0.8",
                    ".0"
                ],
                "nodeType": "PragmaDirective",
                "src": "73:23:1"
            },
            {
                "abstract": false,
                "baseContracts": [],
                "contractDependencies": [],
                "contractKind": "library",
                "documentation": {
                    "id": 35,
                    "nodeType": "StructuredDocumentation",
                    "src": "98:67:1",
                    "text": " @dev Collection of functions related to the address type"
                },
                "fullyImplemented": true,
                "id": 328,
                "linearizedBaseContracts": [
                    328
                ],
                "name": "Address",
                "nodeType": "ContractDefinition",
                "nodes": [
                    {
                        "body": {
                            "id": 51,
                            "nodeType": "Block",
                            "src": "824:347:1",
                            "statements": [
                                {
                                    "assignments": [
                                        44
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 44,
                                            "mutability": "mutable",
                                            "name": "size",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 51,
                                            "src": "1021:12:1",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 43,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "1021:7:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 45,
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "1021:12:1"
                                },
                                {
                                    "AST": {
                                        "nodeType": "YulBlock",
                                        "src": "1108:32:1",
                                        "statements": [
                                            {
                                                "nodeType": "YulAssignment",
                                                "src": "1110:28:1",
                                                "value": {
                                                    "arguments": [
                                                        {
                                                            "name": "account",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "1130:7:1"
                                                        }
                                                    ],
                                                    "functionName": {
                                                        "name": "extcodesize",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "1118:11:1"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "1118:20:1"
                                                },
                                                "variableNames": [
                                                    {
                                                        "name": "size",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "1110:4:1"
                                                    }
                                                ]
                                            }
                                        ]
                                    },
                                    "evmVersion": "istanbul",
                                    "externalReferences": [
                                        {
                                            "declaration": 38,
                                            "isOffset": false,
                                            "isSlot": false,
                                            "src": "1130:7:1",
                                            "valueSize": 1
                                        },
                                        {
                                            "declaration": 44,
                                            "isOffset": false,
                                            "isSlot": false,
                                            "src": "1110:4:1",
                                            "valueSize": 1
                                        }
                                    ],
                                    "id": 46,
                                    "nodeType": "InlineAssembly",
                                    "src": "1099:41:1"
                                },
                                {
                                    "expression": {
                                        "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        },
                                        "id": 49,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "id": 47,
                                            "name": "size",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 44,
                                            "src": "1156:4:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": ">",
                                        "rightExpression": {
                                            "hexValue": "30",
                                            "id": 48,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "1163:1:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_rational_0_by_1",
                                                "typeString": "int_const 0"
                                            },
                                            "value": "0"
                                        },
                                        "src": "1156:8:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "functionReturnParameters": 42,
                                    "id": 50,
                                    "nodeType": "Return",
                                    "src": "1149:15:1"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 36,
                            "nodeType": "StructuredDocumentation",
                            "src": "188:565:1",
                            "text": " @dev Returns true if `account` is a contract.\n [IMPORTANT]\n ====\n It is unsafe to assume that an address for which this function returns\n false is an externally-owned account (EOA) and not a contract.\n Among others, `isContract` will return false for the following\n types of addresses:\n  - an externally-owned account\n  - a contract in construction\n  - an address where a contract will be created\n  - an address where a contract lived, but was destroyed\n ===="
                        },
                        "id": 52,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "isContract",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 39,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 38,
                                    "mutability": "mutable",
                                    "name": "account",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 52,
                                    "src": "778:15:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 37,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "778:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "777:17:1"
                        },
                        "returnParameters": {
                            "id": 42,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 41,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 52,
                                    "src": "818:4:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 40,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "818:4:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "817:6:1"
                        },
                        "scope": 328,
                        "src": "758:413:1",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 85,
                            "nodeType": "Block",
                            "src": "2159:320:1",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 67,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "arguments": [
                                                            {
                                                                "id": 63,
                                                                "name": "this",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 4294967268,
                                                                "src": "2185:4:1",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_contract$_Address_$328",
                                                                    "typeString": "library Address"
                                                                }
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_contract$_Address_$328",
                                                                    "typeString": "library Address"
                                                                }
                                                            ],
                                                            "id": 62,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "nodeType": "ElementaryTypeNameExpression",
                                                            "src": "2177:7:1",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_type$_t_address_$",
                                                                "typeString": "type(address)"
                                                            },
                                                            "typeName": {
                                                                "id": 61,
                                                                "name": "address",
                                                                "nodeType": "ElementaryTypeName",
                                                                "src": "2177:7:1",
                                                                "typeDescriptions": {}
                                                            }
                                                        },
                                                        "id": 64,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "typeConversion",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "2177:13:1",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "id": 65,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "balance",
                                                    "nodeType": "MemberAccess",
                                                    "src": "2177:21:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": ">=",
                                                "rightExpression": {
                                                    "id": 66,
                                                    "name": "amount",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 57,
                                                    "src": "2202:6:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "2177:31:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "416464726573733a20696e73756666696369656e742062616c616e6365",
                                                "id": 68,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "2210:31:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9",
                                                    "typeString": "literal_string \"Address: insufficient balance\""
                                                },
                                                "value": "Address: insufficient balance"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9",
                                                    "typeString": "literal_string \"Address: insufficient balance\""
                                                }
                                            ],
                                            "id": 60,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "2169:7:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 69,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2169:73:1",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 70,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2169:73:1"
                                },
                                {
                                    "assignments": [
                                        72,
                                        null
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 72,
                                            "mutability": "mutable",
                                            "name": "success",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 85,
                                            "src": "2331:12:1",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            },
                                            "typeName": {
                                                "id": 71,
                                                "name": "bool",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "2331:4:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "visibility": "internal"
                                        },
                                        null
                                    ],
                                    "id": 79,
                                    "initialValue": {
                                        "arguments": [
                                            {
                                                "hexValue": "",
                                                "id": 77,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "2381:2:1",
                                                "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": {
                                                    "id": 73,
                                                    "name": "recipient",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 55,
                                                    "src": "2349:9:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address_payable",
                                                        "typeString": "address payable"
                                                    }
                                                },
                                                "id": 74,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "call",
                                                "nodeType": "MemberAccess",
                                                "src": "2349:14:1",
                                                "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": 76,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "names": [
                                                "value"
                                            ],
                                            "nodeType": "FunctionCallOptions",
                                            "options": [
                                                {
                                                    "id": 75,
                                                    "name": "amount",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 57,
                                                    "src": "2372:6:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                }
                                            ],
                                            "src": "2349:31:1",
                                            "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": 78,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2349:35:1",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                                            "typeString": "tuple(bool,bytes memory)"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "2330:54:1"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 81,
                                                "name": "success",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 72,
                                                "src": "2402:7:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d61792068617665207265766572746564",
                                                "id": 82,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "2411:60:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae",
                                                    "typeString": "literal_string \"Address: unable to send value, recipient may have reverted\""
                                                },
                                                "value": "Address: unable to send value, recipient may have reverted"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae",
                                                    "typeString": "literal_string \"Address: unable to send value, recipient may have reverted\""
                                                }
                                            ],
                                            "id": 80,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "2394:7:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 83,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2394:78:1",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 84,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2394:78:1"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 53,
                            "nodeType": "StructuredDocumentation",
                            "src": "1177:906:1",
                            "text": " @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n `recipient`, forwarding all available gas and reverting on errors.\n https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n of certain opcodes, possibly making contracts go over the 2300 gas limit\n imposed by `transfer`, making them unable to receive funds via\n `transfer`. {sendValue} removes this limitation.\n https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n IMPORTANT: because control is transferred to `recipient`, care must be\n taken to not create reentrancy vulnerabilities. Consider using\n {ReentrancyGuard} or the\n https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]."
                        },
                        "id": 86,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "sendValue",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 58,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 55,
                                    "mutability": "mutable",
                                    "name": "recipient",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 86,
                                    "src": "2107:25:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address_payable",
                                        "typeString": "address payable"
                                    },
                                    "typeName": {
                                        "id": 54,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2107:15:1",
                                        "stateMutability": "payable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address_payable",
                                            "typeString": "address payable"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 57,
                                    "mutability": "mutable",
                                    "name": "amount",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 86,
                                    "src": "2134:14:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 56,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2134:7:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2106:43:1"
                        },
                        "returnParameters": {
                            "id": 59,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "2159:0:1"
                        },
                        "scope": 328,
                        "src": "2088:391:1",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 102,
                            "nodeType": "Block",
                            "src": "3309:82:1",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 97,
                                                "name": "target",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 89,
                                                "src": "3337:6:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 98,
                                                "name": "data",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 91,
                                                "src": "3345:4:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            },
                                            {
                                                "hexValue": "416464726573733a206c6f772d6c6576656c2063616c6c206661696c6564",
                                                "id": 99,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "3351:32:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_24d7ab5d382116e64324f19950ca9340b8af1ddeb09a8d026e0a3c6a01dcc9df",
                                                    "typeString": "literal_string \"Address: low-level call failed\""
                                                },
                                                "value": "Address: low-level call failed"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_24d7ab5d382116e64324f19950ca9340b8af1ddeb09a8d026e0a3c6a01dcc9df",
                                                    "typeString": "literal_string \"Address: low-level call failed\""
                                                }
                                            ],
                                            "id": 96,
                                            "name": "functionCall",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                103,
                                                123
                                            ],
                                            "referencedDeclaration": 123,
                                            "src": "3324:12:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                                                "typeString": "function (address,bytes memory,string memory) returns (bytes memory)"
                                            }
                                        },
                                        "id": 100,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3324:60:1",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                        }
                                    },
                                    "functionReturnParameters": 95,
                                    "id": 101,
                                    "nodeType": "Return",
                                    "src": "3317:67:1"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 87,
                            "nodeType": "StructuredDocumentation",
                            "src": "2485:730:1",
                            "text": " @dev Performs a Solidity function call using a low level `call`. A\n plain`call` is an unsafe replacement for a function call: use this\n function instead.\n If `target` reverts with a revert reason, it is bubbled up by this\n function (like regular Solidity function calls).\n Returns the raw returned data. To convert to the expected return value,\n use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n Requirements:\n - `target` must be a contract.\n - calling `target` with `data` must not revert.\n _Available since v3.1._"
                        },
                        "id": 103,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "functionCall",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 92,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 89,
                                    "mutability": "mutable",
                                    "name": "target",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 103,
                                    "src": "3242:14:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 88,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3242:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 91,
                                    "mutability": "mutable",
                                    "name": "data",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 103,
                                    "src": "3258:17:1",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 90,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3258:5:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3241:35:1"
                        },
                        "returnParameters": {
                            "id": 95,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 94,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 103,
                                    "src": "3295:12:1",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 93,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3295:5:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3294:14:1"
                        },
                        "scope": 328,
                        "src": "3220:171:1",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 122,
                            "nodeType": "Block",
                            "src": "3730:76:1",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 116,
                                                "name": "target",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 106,
                                                "src": "3769:6:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 117,
                                                "name": "data",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 108,
                                                "src": "3777:4:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            },
                                            {
                                                "hexValue": "30",
                                                "id": 118,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "number",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "3783:1:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_rational_0_by_1",
                                                    "typeString": "int_const 0"
                                                },
                                                "value": "0"
                                            },
                                            {
                                                "id": 119,
                                                "name": "errorMessage",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 110,
                                                "src": "3786:12:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_string_memory_ptr",
                                                    "typeString": "string memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                },
                                                {
                                                    "typeIdentifier": "t_rational_0_by_1",
                                                    "typeString": "int_const 0"
                                                },
                                                {
                                                    "typeIdentifier": "t_string_memory_ptr",
                                                    "typeString": "string memory"
                                                }
                                            ],
                                            "id": 115,
                                            "name": "functionCallWithValue",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                143,
                                                193
                                            ],
                                            "referencedDeclaration": 193,
                                            "src": "3747:21:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                                                "typeString": "function (address,bytes memory,uint256,string memory) returns (bytes memory)"
                                            }
                                        },
                                        "id": 120,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3747:52:1",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                        }
                                    },
                                    "functionReturnParameters": 114,
                                    "id": 121,
                                    "nodeType": "Return",
                                    "src": "3740:59:1"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 104,
                            "nodeType": "StructuredDocumentation",
                            "src": "3397:211:1",
                            "text": " @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n `errorMessage` as a fallback revert reason when `target` reverts.\n _Available since v3.1._"
                        },
                        "id": 123,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "functionCall",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 111,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 106,
                                    "mutability": "mutable",
                                    "name": "target",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 123,
                                    "src": "3635:14:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 105,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3635:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 108,
                                    "mutability": "mutable",
                                    "name": "data",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 123,
                                    "src": "3651:17:1",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 107,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3651:5:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 110,
                                    "mutability": "mutable",
                                    "name": "errorMessage",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 123,
                                    "src": "3670:26:1",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_memory_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 109,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3670:6:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3634:63:1"
                        },
                        "returnParameters": {
                            "id": 114,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 113,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 123,
                                    "src": "3716:12:1",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 112,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3716:5:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3715:14:1"
                        },
                        "scope": 328,
                        "src": "3613:193:1",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 142,
                            "nodeType": "Block",
                            "src": "4281:111:1",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 136,
                                                "name": "target",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 126,
                                                "src": "4320:6:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 137,
                                                "name": "data",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 128,
                                                "src": "4328:4:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            },
                                            {
                                                "id": 138,
                                                "name": "value",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 130,
                                                "src": "4334:5:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            {
                                                "hexValue": "416464726573733a206c6f772d6c6576656c2063616c6c20776974682076616c7565206661696c6564",
                                                "id": 139,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "4341:43:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_88a4a0b5e975840320a0475d4027005235904fdb5ece94df156f3d717cb2dbfc",
                                                    "typeString": "literal_string \"Address: low-level call with value failed\""
                                                },
                                                "value": "Address: low-level call with value failed"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_88a4a0b5e975840320a0475d4027005235904fdb5ece94df156f3d717cb2dbfc",
                                                    "typeString": "literal_string \"Address: low-level call with value failed\""
                                                }
                                            ],
                                            "id": 135,
                                            "name": "functionCallWithValue",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                143,
                                                193
                                            ],
                                            "referencedDeclaration": 193,
                                            "src": "4298:21:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                                                "typeString": "function (address,bytes memory,uint256,string memory) returns (bytes memory)"
                                            }
                                        },
                                        "id": 140,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4298:87:1",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                        }
                                    },
                                    "functionReturnParameters": 134,
                                    "id": 141,
                                    "nodeType": "Return",
                                    "src": "4291:94:1"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 124,
                            "nodeType": "StructuredDocumentation",
                            "src": "3812:351:1",
                            "text": " @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but also transferring `value` wei to `target`.\n Requirements:\n - the calling contract must have an ETH balance of at least `value`.\n - the called Solidity function must be `payable`.\n _Available since v3.1._"
                        },
                        "id": 143,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "functionCallWithValue",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 131,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 126,
                                    "mutability": "mutable",
                                    "name": "target",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 143,
                                    "src": "4199:14:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 125,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4199:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 128,
                                    "mutability": "mutable",
                                    "name": "data",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 143,
                                    "src": "4215:17:1",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 127,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4215:5:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 130,
                                    "mutability": "mutable",
                                    "name": "value",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 143,
                                    "src": "4234:13:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 129,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4234:7:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4198:50:1"
                        },
                        "returnParameters": {
                            "id": 134,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 133,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 143,
                                    "src": "4267:12:1",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 132,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4267:5:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4266:14:1"
                        },
                        "scope": 328,
                        "src": "4168:224:1",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 192,
                            "nodeType": "Block",
                            "src": "4781:382:1",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 164,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "arguments": [
                                                            {
                                                                "id": 160,
                                                                "name": "this",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 4294967268,
                                                                "src": "4807:4:1",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_contract$_Address_$328",
                                                                    "typeString": "library Address"
                                                                }
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_contract$_Address_$328",
                                                                    "typeString": "library Address"
                                                                }
                                                            ],
                                                            "id": 159,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "nodeType": "ElementaryTypeNameExpression",
                                                            "src": "4799:7:1",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_type$_t_address_$",
                                                                "typeString": "type(address)"
                                                            },
                                                            "typeName": {
                                                                "id": 158,
                                                                "name": "address",
                                                                "nodeType": "ElementaryTypeName",
                                                                "src": "4799:7:1",
                                                                "typeDescriptions": {}
                                                            }
                                                        },
                                                        "id": 161,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "typeConversion",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "4799:13:1",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "id": 162,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "balance",
                                                    "nodeType": "MemberAccess",
                                                    "src": "4799:21:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": ">=",
                                                "rightExpression": {
                                                    "id": 163,
                                                    "name": "value",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 150,
                                                    "src": "4824:5:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "4799:30:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c",
                                                "id": 165,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "4831:40:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c",
                                                    "typeString": "literal_string \"Address: insufficient balance for call\""
                                                },
                                                "value": "Address: insufficient balance for call"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c",
                                                    "typeString": "literal_string \"Address: insufficient balance for call\""
                                                }
                                            ],
                                            "id": 157,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "4791:7:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 166,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4791:81:1",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 167,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4791:81:1"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "id": 170,
                                                        "name": "target",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 146,
                                                        "src": "4901:6:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    ],
                                                    "id": 169,
                                                    "name": "isContract",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 52,
                                                    "src": "4890:10:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                                                        "typeString": "function (address) view returns (bool)"
                                                    }
                                                },
                                                "id": 171,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "4890:18:1",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374",
                                                "id": 172,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "4910:31:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad",
                                                    "typeString": "literal_string \"Address: call to non-contract\""
                                                },
                                                "value": "Address: call to non-contract"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad",
                                                    "typeString": "literal_string \"Address: call to non-contract\""
                                                }
                                            ],
                                            "id": 168,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "4882:7:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 173,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4882:60:1",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 174,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4882:60:1"
                                },
                                {
                                    "assignments": [
                                        176,
                                        178
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 176,
                                            "mutability": "mutable",
                                            "name": "success",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 192,
                                            "src": "5013:12:1",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            },
                                            "typeName": {
                                                "id": 175,
                                                "name": "bool",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "5013:4:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "visibility": "internal"
                                        },
                                        {
                                            "constant": false,
                                            "id": 178,
                                            "mutability": "mutable",
                                            "name": "returndata",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 192,
                                            "src": "5027:23:1",
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                "typeString": "bytes"
                                            },
                                            "typeName": {
                                                "id": 177,
                                                "name": "bytes",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "5027:5:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_storage_ptr",
                                                    "typeString": "bytes"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 185,
                                    "initialValue": {
                                        "arguments": [
                                            {
                                                "id": 183,
                                                "name": "data",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 148,
                                                "src": "5082:4:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                        "typeString": "bytes memory"
                                                    }
                                                ],
                                                "expression": {
                                                    "id": 179,
                                                    "name": "target",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 146,
                                                    "src": "5054:6:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "id": 180,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "call",
                                                "nodeType": "MemberAccess",
                                                "src": "5054:11:1",
                                                "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": 182,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "names": [
                                                "value"
                                            ],
                                            "nodeType": "FunctionCallOptions",
                                            "options": [
                                                {
                                                    "id": 181,
                                                    "name": "value",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 150,
                                                    "src": "5074:5:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                }
                                            ],
                                            "src": "5054:27:1",
                                            "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": 184,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5054:33:1",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                                            "typeString": "tuple(bool,bytes memory)"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "5012:75:1"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 187,
                                                "name": "success",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 176,
                                                "src": "5122:7:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "id": 188,
                                                "name": "returndata",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 178,
                                                "src": "5131:10:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            },
                                            {
                                                "id": 189,
                                                "name": "errorMessage",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 152,
                                                "src": "5143:12:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_string_memory_ptr",
                                                    "typeString": "string memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                },
                                                {
                                                    "typeIdentifier": "t_string_memory_ptr",
                                                    "typeString": "string memory"
                                                }
                                            ],
                                            "id": 186,
                                            "name": "_verifyCallResult",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 327,
                                            "src": "5104:17:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                                                "typeString": "function (bool,bytes memory,string memory) pure returns (bytes memory)"
                                            }
                                        },
                                        "id": 190,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5104:52:1",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                        }
                                    },
                                    "functionReturnParameters": 156,
                                    "id": 191,
                                    "nodeType": "Return",
                                    "src": "5097:59:1"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 144,
                            "nodeType": "StructuredDocumentation",
                            "src": "4398:237:1",
                            "text": " @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n with `errorMessage` as a fallback revert reason when `target` reverts.\n _Available since v3.1._"
                        },
                        "id": 193,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "functionCallWithValue",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 153,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 146,
                                    "mutability": "mutable",
                                    "name": "target",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 193,
                                    "src": "4671:14:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 145,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4671:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 148,
                                    "mutability": "mutable",
                                    "name": "data",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 193,
                                    "src": "4687:17:1",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 147,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4687:5:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 150,
                                    "mutability": "mutable",
                                    "name": "value",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 193,
                                    "src": "4706:13:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 149,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4706:7:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 152,
                                    "mutability": "mutable",
                                    "name": "errorMessage",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 193,
                                    "src": "4721:26:1",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_memory_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 151,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4721:6:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4670:78:1"
                        },
                        "returnParameters": {
                            "id": 156,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 155,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 193,
                                    "src": "4767:12:1",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 154,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4767:5:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4766:14:1"
                        },
                        "scope": 328,
                        "src": "4640:523:1",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 209,
                            "nodeType": "Block",
                            "src": "5440:97:1",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 204,
                                                "name": "target",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 196,
                                                "src": "5476:6:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 205,
                                                "name": "data",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 198,
                                                "src": "5484:4:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            },
                                            {
                                                "hexValue": "416464726573733a206c6f772d6c6576656c207374617469632063616c6c206661696c6564",
                                                "id": 206,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "5490:39:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_90ec82aa826a536a4cbfae44ecfa384680faa9a4b77344bce96aa761ad904df0",
                                                    "typeString": "literal_string \"Address: low-level static call failed\""
                                                },
                                                "value": "Address: low-level static call failed"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_90ec82aa826a536a4cbfae44ecfa384680faa9a4b77344bce96aa761ad904df0",
                                                    "typeString": "literal_string \"Address: low-level static call failed\""
                                                }
                                            ],
                                            "id": 203,
                                            "name": "functionStaticCall",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                210,
                                                245
                                            ],
                                            "referencedDeclaration": 245,
                                            "src": "5457:18:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                                                "typeString": "function (address,bytes memory,string memory) view returns (bytes memory)"
                                            }
                                        },
                                        "id": 207,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5457:73:1",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                        }
                                    },
                                    "functionReturnParameters": 202,
                                    "id": 208,
                                    "nodeType": "Return",
                                    "src": "5450:80:1"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 194,
                            "nodeType": "StructuredDocumentation",
                            "src": "5169:166:1",
                            "text": " @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a static call.\n _Available since v3.3._"
                        },
                        "id": 210,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "functionStaticCall",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 199,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 196,
                                    "mutability": "mutable",
                                    "name": "target",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 210,
                                    "src": "5368:14:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 195,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5368:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 198,
                                    "mutability": "mutable",
                                    "name": "data",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 210,
                                    "src": "5384:17:1",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 197,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5384:5:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "5367:35:1"
                        },
                        "returnParameters": {
                            "id": 202,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 201,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 210,
                                    "src": "5426:12:1",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 200,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5426:5:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "5425:14:1"
                        },
                        "scope": 328,
                        "src": "5340:197:1",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 244,
                            "nodeType": "Block",
                            "src": "5849:288:1",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "id": 224,
                                                        "name": "target",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 213,
                                                        "src": "5878:6:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    ],
                                                    "id": 223,
                                                    "name": "isContract",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 52,
                                                    "src": "5867:10:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                                                        "typeString": "function (address) view returns (bool)"
                                                    }
                                                },
                                                "id": 225,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "5867:18:1",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "416464726573733a207374617469632063616c6c20746f206e6f6e2d636f6e7472616374",
                                                "id": 226,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "5887:38:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_c79cc78e4f16ce3933a42b84c73868f93bb4a59c031a0acf576679de98c608a9",
                                                    "typeString": "literal_string \"Address: static call to non-contract\""
                                                },
                                                "value": "Address: static call to non-contract"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_c79cc78e4f16ce3933a42b84c73868f93bb4a59c031a0acf576679de98c608a9",
                                                    "typeString": "literal_string \"Address: static call to non-contract\""
                                                }
                                            ],
                                            "id": 222,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "5859:7:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 227,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5859:67:1",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 228,
                                    "nodeType": "ExpressionStatement",
                                    "src": "5859:67:1"
                                },
                                {
                                    "assignments": [
                                        230,
                                        232
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 230,
                                            "mutability": "mutable",
                                            "name": "success",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 244,
                                            "src": "5997:12:1",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            },
                                            "typeName": {
                                                "id": 229,
                                                "name": "bool",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "5997:4:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "visibility": "internal"
                                        },
                                        {
                                            "constant": false,
                                            "id": 232,
                                            "mutability": "mutable",
                                            "name": "returndata",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 244,
                                            "src": "6011:23:1",
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                "typeString": "bytes"
                                            },
                                            "typeName": {
                                                "id": 231,
                                                "name": "bytes",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "6011:5:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_storage_ptr",
                                                    "typeString": "bytes"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 237,
                                    "initialValue": {
                                        "arguments": [
                                            {
                                                "id": 235,
                                                "name": "data",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 215,
                                                "src": "6056:4:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "expression": {
                                                "id": 233,
                                                "name": "target",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 213,
                                                "src": "6038:6:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "id": 234,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "staticcall",
                                            "nodeType": "MemberAccess",
                                            "src": "6038:17:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                                                "typeString": "function (bytes memory) view returns (bool,bytes memory)"
                                            }
                                        },
                                        "id": 236,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "6038:23:1",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                                            "typeString": "tuple(bool,bytes memory)"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "5996:65:1"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 239,
                                                "name": "success",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 230,
                                                "src": "6096:7:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "id": 240,
                                                "name": "returndata",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 232,
                                                "src": "6105:10:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            },
                                            {
                                                "id": 241,
                                                "name": "errorMessage",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 217,
                                                "src": "6117:12:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_string_memory_ptr",
                                                    "typeString": "string memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                },
                                                {
                                                    "typeIdentifier": "t_string_memory_ptr",
                                                    "typeString": "string memory"
                                                }
                                            ],
                                            "id": 238,
                                            "name": "_verifyCallResult",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 327,
                                            "src": "6078:17:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                                                "typeString": "function (bool,bytes memory,string memory) pure returns (bytes memory)"
                                            }
                                        },
                                        "id": 242,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "6078:52:1",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                        }
                                    },
                                    "functionReturnParameters": 221,
                                    "id": 243,
                                    "nodeType": "Return",
                                    "src": "6071:59:1"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 211,
                            "nodeType": "StructuredDocumentation",
                            "src": "5543:173:1",
                            "text": " @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n but performing a static call.\n _Available since v3.3._"
                        },
                        "id": 245,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "functionStaticCall",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 218,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 213,
                                    "mutability": "mutable",
                                    "name": "target",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 245,
                                    "src": "5749:14:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 212,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5749:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 215,
                                    "mutability": "mutable",
                                    "name": "data",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 245,
                                    "src": "5765:17:1",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 214,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5765:5:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 217,
                                    "mutability": "mutable",
                                    "name": "errorMessage",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 245,
                                    "src": "5784:26:1",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_memory_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 216,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5784:6:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "5748:63:1"
                        },
                        "returnParameters": {
                            "id": 221,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 220,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 245,
                                    "src": "5835:12:1",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 219,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5835:5:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "5834:14:1"
                        },
                        "scope": 328,
                        "src": "5721:416:1",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 261,
                            "nodeType": "Block",
                            "src": "6413:101:1",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 256,
                                                "name": "target",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 248,
                                                "src": "6451:6:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 257,
                                                "name": "data",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 250,
                                                "src": "6459:4:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            },
                                            {
                                                "hexValue": "416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564",
                                                "id": 258,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "6465:41:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_9fdcd12e4b726339b32a442b0a448365d5d85c96b2d2cff917b4f66c63110398",
                                                    "typeString": "literal_string \"Address: low-level delegate call failed\""
                                                },
                                                "value": "Address: low-level delegate call failed"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_9fdcd12e4b726339b32a442b0a448365d5d85c96b2d2cff917b4f66c63110398",
                                                    "typeString": "literal_string \"Address: low-level delegate call failed\""
                                                }
                                            ],
                                            "id": 255,
                                            "name": "functionDelegateCall",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                262,
                                                297
                                            ],
                                            "referencedDeclaration": 297,
                                            "src": "6430:20:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                                                "typeString": "function (address,bytes memory,string memory) returns (bytes memory)"
                                            }
                                        },
                                        "id": 259,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "6430:77:1",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                        }
                                    },
                                    "functionReturnParameters": 254,
                                    "id": 260,
                                    "nodeType": "Return",
                                    "src": "6423:84:1"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 246,
                            "nodeType": "StructuredDocumentation",
                            "src": "6143:168:1",
                            "text": " @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a delegate call.\n _Available since v3.4._"
                        },
                        "id": 262,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "functionDelegateCall",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 251,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 248,
                                    "mutability": "mutable",
                                    "name": "target",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 262,
                                    "src": "6346:14:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 247,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6346:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 250,
                                    "mutability": "mutable",
                                    "name": "data",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 262,
                                    "src": "6362:17:1",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 249,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6362:5:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "6345:35:1"
                        },
                        "returnParameters": {
                            "id": 254,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 253,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 262,
                                    "src": "6399:12:1",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 252,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6399:5:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "6398:14:1"
                        },
                        "scope": 328,
                        "src": "6316:198:1",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 296,
                            "nodeType": "Block",
                            "src": "6825:292:1",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "id": 276,
                                                        "name": "target",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 265,
                                                        "src": "6854:6:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    ],
                                                    "id": 275,
                                                    "name": "isContract",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 52,
                                                    "src": "6843:10:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                                                        "typeString": "function (address) view returns (bool)"
                                                    }
                                                },
                                                "id": 277,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "6843:18:1",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374",
                                                "id": 278,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "6863:40:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520",
                                                    "typeString": "literal_string \"Address: delegate call to non-contract\""
                                                },
                                                "value": "Address: delegate call to non-contract"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520",
                                                    "typeString": "literal_string \"Address: delegate call to non-contract\""
                                                }
                                            ],
                                            "id": 274,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "6835:7:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 279,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "6835:69:1",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 280,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6835:69:1"
                                },
                                {
                                    "assignments": [
                                        282,
                                        284
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 282,
                                            "mutability": "mutable",
                                            "name": "success",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 296,
                                            "src": "6975:12:1",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            },
                                            "typeName": {
                                                "id": 281,
                                                "name": "bool",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "6975:4:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "visibility": "internal"
                                        },
                                        {
                                            "constant": false,
                                            "id": 284,
                                            "mutability": "mutable",
                                            "name": "returndata",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 296,
                                            "src": "6989:23:1",
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                "typeString": "bytes"
                                            },
                                            "typeName": {
                                                "id": 283,
                                                "name": "bytes",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "6989:5:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_storage_ptr",
                                                    "typeString": "bytes"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 289,
                                    "initialValue": {
                                        "arguments": [
                                            {
                                                "id": 287,
                                                "name": "data",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 267,
                                                "src": "7036:4:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "expression": {
                                                "id": 285,
                                                "name": "target",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 265,
                                                "src": "7016:6:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "id": 286,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "delegatecall",
                                            "nodeType": "MemberAccess",
                                            "src": "7016:19:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_baredelegatecall_nonpayable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                                                "typeString": "function (bytes memory) returns (bool,bytes memory)"
                                            }
                                        },
                                        "id": 288,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "7016:25:1",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                                            "typeString": "tuple(bool,bytes memory)"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "6974:67:1"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 291,
                                                "name": "success",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 282,
                                                "src": "7076:7:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "id": 292,
                                                "name": "returndata",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 284,
                                                "src": "7085:10:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            },
                                            {
                                                "id": 293,
                                                "name": "errorMessage",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 269,
                                                "src": "7097:12:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_string_memory_ptr",
                                                    "typeString": "string memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                },
                                                {
                                                    "typeIdentifier": "t_string_memory_ptr",
                                                    "typeString": "string memory"
                                                }
                                            ],
                                            "id": 290,
                                            "name": "_verifyCallResult",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 327,
                                            "src": "7058:17:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                                                "typeString": "function (bool,bytes memory,string memory) pure returns (bytes memory)"
                                            }
                                        },
                                        "id": 294,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "7058:52:1",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                        }
                                    },
                                    "functionReturnParameters": 273,
                                    "id": 295,
                                    "nodeType": "Return",
                                    "src": "7051:59:1"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 263,
                            "nodeType": "StructuredDocumentation",
                            "src": "6520:175:1",
                            "text": " @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n but performing a delegate call.\n _Available since v3.4._"
                        },
                        "id": 297,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "functionDelegateCall",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 270,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 265,
                                    "mutability": "mutable",
                                    "name": "target",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 297,
                                    "src": "6730:14:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 264,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6730:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 267,
                                    "mutability": "mutable",
                                    "name": "data",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 297,
                                    "src": "6746:17:1",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 266,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6746:5:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 269,
                                    "mutability": "mutable",
                                    "name": "errorMessage",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 297,
                                    "src": "6765:26:1",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_memory_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 268,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6765:6:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "6729:63:1"
                        },
                        "returnParameters": {
                            "id": 273,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 272,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 297,
                                    "src": "6811:12:1",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 271,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6811:5:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "6810:14:1"
                        },
                        "scope": 328,
                        "src": "6700:417:1",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 326,
                            "nodeType": "Block",
                            "src": "7252:596:1",
                            "statements": [
                                {
                                    "condition": {
                                        "id": 308,
                                        "name": "success",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 299,
                                        "src": "7266:7:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "falseBody": {
                                        "id": 324,
                                        "nodeType": "Block",
                                        "src": "7323:519:1",
                                        "statements": [
                                            {
                                                "condition": {
                                                    "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    "id": 315,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "expression": {
                                                            "id": 312,
                                                            "name": "returndata",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 301,
                                                            "src": "7407:10:1",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            }
                                                        },
                                                        "id": 313,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "length",
                                                        "nodeType": "MemberAccess",
                                                        "src": "7407:17:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": ">",
                                                    "rightExpression": {
                                                        "hexValue": "30",
                                                        "id": 314,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "number",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "7427:1:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_rational_0_by_1",
                                                            "typeString": "int_const 0"
                                                        },
                                                        "value": "0"
                                                    },
                                                    "src": "7407:21:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "falseBody": {
                                                    "id": 322,
                                                    "nodeType": "Block",
                                                    "src": "7779:53:1",
                                                    "statements": [
                                                        {
                                                            "expression": {
                                                                "arguments": [
                                                                    {
                                                                        "id": 319,
                                                                        "name": "errorMessage",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 303,
                                                                        "src": "7804:12:1",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_string_memory_ptr",
                                                                            "typeString": "string memory"
                                                                        }
                                                                    }
                                                                ],
                                                                "expression": {
                                                                    "argumentTypes": [
                                                                        {
                                                                            "typeIdentifier": "t_string_memory_ptr",
                                                                            "typeString": "string memory"
                                                                        }
                                                                    ],
                                                                    "id": 318,
                                                                    "name": "revert",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [
                                                                        4294967277,
                                                                        4294967277
                                                                    ],
                                                                    "referencedDeclaration": 4294967277,
                                                                    "src": "7797:6:1",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                                                        "typeString": "function (string memory) pure"
                                                                    }
                                                                },
                                                                "id": 320,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "kind": "functionCall",
                                                                "lValueRequested": false,
                                                                "names": [],
                                                                "nodeType": "FunctionCall",
                                                                "src": "7797:20:1",
                                                                "tryCall": false,
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_tuple$__$",
                                                                    "typeString": "tuple()"
                                                                }
                                                            },
                                                            "id": 321,
                                                            "nodeType": "ExpressionStatement",
                                                            "src": "7797:20:1"
                                                        }
                                                    ]
                                                },
                                                "id": 323,
                                                "nodeType": "IfStatement",
                                                "src": "7403:429:1",
                                                "trueBody": {
                                                    "id": 317,
                                                    "nodeType": "Block",
                                                    "src": "7430:343:1",
                                                    "statements": [
                                                        {
                                                            "AST": {
                                                                "nodeType": "YulBlock",
                                                                "src": "7614:145:1",
                                                                "statements": [
                                                                    {
                                                                        "nodeType": "YulVariableDeclaration",
                                                                        "src": "7636:40:1",
                                                                        "value": {
                                                                            "arguments": [
                                                                                {
                                                                                    "name": "returndata",
                                                                                    "nodeType": "YulIdentifier",
                                                                                    "src": "7665:10:1"
                                                                                }
                                                                            ],
                                                                            "functionName": {
                                                                                "name": "mload",
                                                                                "nodeType": "YulIdentifier",
                                                                                "src": "7659:5:1"
                                                                            },
                                                                            "nodeType": "YulFunctionCall",
                                                                            "src": "7659:17:1"
                                                                        },
                                                                        "variables": [
                                                                            {
                                                                                "name": "returndata_size",
                                                                                "nodeType": "YulTypedName",
                                                                                "src": "7640:15:1",
                                                                                "type": ""
                                                                            }
                                                                        ]
                                                                    },
                                                                    {
                                                                        "expression": {
                                                                            "arguments": [
                                                                                {
                                                                                    "arguments": [
                                                                                        {
                                                                                            "kind": "number",
                                                                                            "nodeType": "YulLiteral",
                                                                                            "src": "7708:2:1",
                                                                                            "type": "",
                                                                                            "value": "32"
                                                                                        },
                                                                                        {
                                                                                            "name": "returndata",
                                                                                            "nodeType": "YulIdentifier",
                                                                                            "src": "7712:10:1"
                                                                                        }
                                                                                    ],
                                                                                    "functionName": {
                                                                                        "name": "add",
                                                                                        "nodeType": "YulIdentifier",
                                                                                        "src": "7704:3:1"
                                                                                    },
                                                                                    "nodeType": "YulFunctionCall",
                                                                                    "src": "7704:19:1"
                                                                                },
                                                                                {
                                                                                    "name": "returndata_size",
                                                                                    "nodeType": "YulIdentifier",
                                                                                    "src": "7725:15:1"
                                                                                }
                                                                            ],
                                                                            "functionName": {
                                                                                "name": "revert",
                                                                                "nodeType": "YulIdentifier",
                                                                                "src": "7697:6:1"
                                                                            },
                                                                            "nodeType": "YulFunctionCall",
                                                                            "src": "7697:44:1"
                                                                        },
                                                                        "nodeType": "YulExpressionStatement",
                                                                        "src": "7697:44:1"
                                                                    }
                                                                ]
                                                            },
                                                            "evmVersion": "istanbul",
                                                            "externalReferences": [
                                                                {
                                                                    "declaration": 301,
                                                                    "isOffset": false,
                                                                    "isSlot": false,
                                                                    "src": "7665:10:1",
                                                                    "valueSize": 1
                                                                },
                                                                {
                                                                    "declaration": 301,
                                                                    "isOffset": false,
                                                                    "isSlot": false,
                                                                    "src": "7712:10:1",
                                                                    "valueSize": 1
                                                                }
                                                            ],
                                                            "id": 316,
                                                            "nodeType": "InlineAssembly",
                                                            "src": "7605:154:1"
                                                        }
                                                    ]
                                                }
                                            }
                                        ]
                                    },
                                    "id": 325,
                                    "nodeType": "IfStatement",
                                    "src": "7262:580:1",
                                    "trueBody": {
                                        "id": 311,
                                        "nodeType": "Block",
                                        "src": "7275:42:1",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "id": 309,
                                                    "name": "returndata",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 301,
                                                    "src": "7296:10:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                        "typeString": "bytes memory"
                                                    }
                                                },
                                                "functionReturnParameters": 307,
                                                "id": 310,
                                                "nodeType": "Return",
                                                "src": "7289:17:1"
                                            }
                                        ]
                                    }
                                }
                            ]
                        },
                        "id": 327,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "_verifyCallResult",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 304,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 299,
                                    "mutability": "mutable",
                                    "name": "success",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 327,
                                    "src": "7150:12:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 298,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "7150:4:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 301,
                                    "mutability": "mutable",
                                    "name": "returndata",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 327,
                                    "src": "7164:23:1",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 300,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "7164:5:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 303,
                                    "mutability": "mutable",
                                    "name": "errorMessage",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 327,
                                    "src": "7189:26:1",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_memory_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 302,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "7189:6:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "7149:67:1"
                        },
                        "returnParameters": {
                            "id": 307,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 306,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 327,
                                    "src": "7238:12:1",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 305,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "7238:5:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "7237:14:1"
                        },
                        "scope": 328,
                        "src": "7123:725:1",
                        "stateMutability": "pure",
                        "virtual": false,
                        "visibility": "private"
                    }
                ],
                "scope": 929,
                "src": "166:7684:1"
            },
            {
                "abstract": false,
                "baseContracts": [],
                "contractDependencies": [],
                "contractKind": "interface",
                "documentation": {
                    "id": 329,
                    "nodeType": "StructuredDocumentation",
                    "src": "7852:70:1",
                    "text": " @dev Interface of the ERC20 standard as defined in the EIP."
                },
                "fullyImplemented": false,
                "id": 404,
                "linearizedBaseContracts": [
                    404
                ],
                "name": "IERC20",
                "nodeType": "ContractDefinition",
                "nodes": [
                    {
                        "documentation": {
                            "id": 330,
                            "nodeType": "StructuredDocumentation",
                            "src": "7946:66:1",
                            "text": " @dev Returns the amount of tokens in existence."
                        },
                        "functionSelector": "18160ddd",
                        "id": 335,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "totalSupply",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 331,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "8037:2:1"
                        },
                        "returnParameters": {
                            "id": 334,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 333,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 335,
                                    "src": "8063:7:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 332,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "8063:7:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "8062:9:1"
                        },
                        "scope": 404,
                        "src": "8017:55:1",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 336,
                            "nodeType": "StructuredDocumentation",
                            "src": "8078:72:1",
                            "text": " @dev Returns the amount of tokens owned by `account`."
                        },
                        "functionSelector": "70a08231",
                        "id": 343,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "balanceOf",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 339,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 338,
                                    "mutability": "mutable",
                                    "name": "account",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 343,
                                    "src": "8174:15:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 337,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "8174:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "8173:17:1"
                        },
                        "returnParameters": {
                            "id": 342,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 341,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 343,
                                    "src": "8214:7:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 340,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "8214:7:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "8213:9:1"
                        },
                        "scope": 404,
                        "src": "8155:68:1",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 344,
                            "nodeType": "StructuredDocumentation",
                            "src": "8229:209:1",
                            "text": " @dev Moves `amount` tokens from the caller's account to `recipient`.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event."
                        },
                        "functionSelector": "a9059cbb",
                        "id": 353,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "transfer",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 349,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 346,
                                    "mutability": "mutable",
                                    "name": "recipient",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 353,
                                    "src": "8461:17:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 345,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "8461:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 348,
                                    "mutability": "mutable",
                                    "name": "amount",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 353,
                                    "src": "8480:14:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 347,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "8480:7:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "8460:35:1"
                        },
                        "returnParameters": {
                            "id": 352,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 351,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 353,
                                    "src": "8514:4:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 350,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "8514:4:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "8513:6:1"
                        },
                        "scope": 404,
                        "src": "8443:77:1",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 354,
                            "nodeType": "StructuredDocumentation",
                            "src": "8526:264:1",
                            "text": " @dev Returns the remaining number of tokens that `spender` will be\n allowed to spend on behalf of `owner` through {transferFrom}. This is\n zero by default.\n This value changes when {approve} or {transferFrom} are called."
                        },
                        "functionSelector": "dd62ed3e",
                        "id": 363,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "allowance",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 359,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 356,
                                    "mutability": "mutable",
                                    "name": "owner",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 363,
                                    "src": "8814:13:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 355,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "8814:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 358,
                                    "mutability": "mutable",
                                    "name": "spender",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 363,
                                    "src": "8829:15:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 357,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "8829:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "8813:32:1"
                        },
                        "returnParameters": {
                            "id": 362,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 361,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 363,
                                    "src": "8869:7:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 360,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "8869:7:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "8868:9:1"
                        },
                        "scope": 404,
                        "src": "8795:83:1",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 364,
                            "nodeType": "StructuredDocumentation",
                            "src": "8884:642:1",
                            "text": " @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\n Returns a boolean value indicating whether the operation succeeded.\n IMPORTANT: Beware that changing an allowance with this method brings the risk\n that someone may use both the old and the new allowance by unfortunate\n transaction ordering. One possible solution to mitigate this race\n condition is to first reduce the spender's allowance to 0 and set the\n desired value afterwards:\n https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n Emits an {Approval} event."
                        },
                        "functionSelector": "095ea7b3",
                        "id": 373,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "approve",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 369,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 366,
                                    "mutability": "mutable",
                                    "name": "spender",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 373,
                                    "src": "9548:15:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 365,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "9548:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 368,
                                    "mutability": "mutable",
                                    "name": "amount",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 373,
                                    "src": "9565:14:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 367,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "9565:7:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "9547:33:1"
                        },
                        "returnParameters": {
                            "id": 372,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 371,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 373,
                                    "src": "9599:4:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 370,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "9599:4:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "9598:6:1"
                        },
                        "scope": 404,
                        "src": "9531:74:1",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 374,
                            "nodeType": "StructuredDocumentation",
                            "src": "9611:296:1",
                            "text": " @dev Moves `amount` tokens from `sender` to `recipient` using the\n allowance mechanism. `amount` is then deducted from the caller's\n allowance.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event."
                        },
                        "functionSelector": "23b872dd",
                        "id": 385,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "transferFrom",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 381,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 376,
                                    "mutability": "mutable",
                                    "name": "sender",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 385,
                                    "src": "9934:14:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 375,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "9934:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 378,
                                    "mutability": "mutable",
                                    "name": "recipient",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 385,
                                    "src": "9950:17:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 377,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "9950:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 380,
                                    "mutability": "mutable",
                                    "name": "amount",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 385,
                                    "src": "9969:14:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 379,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "9969:7:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "9933:51:1"
                        },
                        "returnParameters": {
                            "id": 384,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 383,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 385,
                                    "src": "10003:4:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 382,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "10003:4:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "10002:6:1"
                        },
                        "scope": 404,
                        "src": "9912:97:1",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "anonymous": false,
                        "documentation": {
                            "id": 386,
                            "nodeType": "StructuredDocumentation",
                            "src": "10015:158:1",
                            "text": " @dev Emitted when `value` tokens are moved from one account (`from`) to\n another (`to`).\n Note that `value` may be zero."
                        },
                        "id": 394,
                        "name": "Transfer",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 393,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 388,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "from",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 394,
                                    "src": "10193:20:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 387,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "10193:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 390,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "to",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 394,
                                    "src": "10215:18:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 389,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "10215:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 392,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "value",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 394,
                                    "src": "10235:13:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 391,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "10235:7:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "10192:57:1"
                        },
                        "src": "10178:72:1"
                    },
                    {
                        "anonymous": false,
                        "documentation": {
                            "id": 395,
                            "nodeType": "StructuredDocumentation",
                            "src": "10256:148:1",
                            "text": " @dev Emitted when the allowance of a `spender` for an `owner` is set by\n a call to {approve}. `value` is the new allowance."
                        },
                        "id": 403,
                        "name": "Approval",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 402,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 397,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "owner",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 403,
                                    "src": "10424:21:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 396,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "10424:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 399,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "spender",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 403,
                                    "src": "10447:23:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 398,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "10447:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 401,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "value",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 403,
                                    "src": "10472:13:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 400,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "10472:7:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "10423:63:1"
                        },
                        "src": "10409:78:1"
                    }
                ],
                "scope": 929,
                "src": "7923:2566:1"
            },
            {
                "abstract": false,
                "baseContracts": [],
                "contractDependencies": [],
                "contractKind": "library",
                "documentation": {
                    "id": 405,
                    "nodeType": "StructuredDocumentation",
                    "src": "10491:457:1",
                    "text": " @title SafeERC20\n @dev Wrappers around ERC20 operations that throw on failure (when the token\n contract returns false). Tokens that return no value (and instead revert or\n throw on failure) are also supported, non-reverting calls are assumed to be\n successful.\n To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\n which allows you to call the safe operations as `token.safeTransfer(...)`, etc."
                },
                "fullyImplemented": true,
                "id": 623,
                "linearizedBaseContracts": [
                    623
                ],
                "name": "SafeERC20",
                "nodeType": "ContractDefinition",
                "nodes": [
                    {
                        "id": 408,
                        "libraryName": {
                            "id": 406,
                            "name": "Address",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 328,
                            "src": "10979:7:1"
                        },
                        "nodeType": "UsingForDirective",
                        "src": "10973:26:1",
                        "typeName": {
                            "id": 407,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "10991:7:1",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                            }
                        }
                    },
                    {
                        "body": {
                            "id": 430,
                            "nodeType": "Block",
                            "src": "11077:103:1",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 419,
                                                "name": "token",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 411,
                                                "src": "11107:5:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_IERC20_$404",
                                                    "typeString": "contract IERC20"
                                                }
                                            },
                                            {
                                                "arguments": [
                                                    {
                                                        "expression": {
                                                            "expression": {
                                                                "id": 422,
                                                                "name": "token",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 411,
                                                                "src": "11137:5:1",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_contract$_IERC20_$404",
                                                                    "typeString": "contract IERC20"
                                                                }
                                                            },
                                                            "id": 423,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "transfer",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 353,
                                                            "src": "11137:14:1",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                                                "typeString": "function (address,uint256) external returns (bool)"
                                                            }
                                                        },
                                                        "id": 424,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "selector",
                                                        "nodeType": "MemberAccess",
                                                        "src": "11137:23:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes4",
                                                            "typeString": "bytes4"
                                                        }
                                                    },
                                                    {
                                                        "id": 425,
                                                        "name": "to",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 413,
                                                        "src": "11162:2:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    {
                                                        "id": 426,
                                                        "name": "value",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 415,
                                                        "src": "11166:5:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_bytes4",
                                                            "typeString": "bytes4"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "id": 420,
                                                        "name": "abi",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967295,
                                                        "src": "11114:3:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_abi",
                                                            "typeString": "abi"
                                                        }
                                                    },
                                                    "id": 421,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "memberName": "encodeWithSelector",
                                                    "nodeType": "MemberAccess",
                                                    "src": "11114:22:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                                                        "typeString": "function (bytes4) pure returns (bytes memory)"
                                                    }
                                                },
                                                "id": 427,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "11114:58:1",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_contract$_IERC20_$404",
                                                    "typeString": "contract IERC20"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "id": 418,
                                            "name": "_callOptionalReturn",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 622,
                                            "src": "11087:19:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$404_$_t_bytes_memory_ptr_$returns$__$",
                                                "typeString": "function (contract IERC20,bytes memory)"
                                            }
                                        },
                                        "id": 428,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "11087:86:1",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 429,
                                    "nodeType": "ExpressionStatement",
                                    "src": "11087:86:1"
                                }
                            ]
                        },
                        "id": 431,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "safeTransfer",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 416,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 411,
                                    "mutability": "mutable",
                                    "name": "token",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 431,
                                    "src": "11027:12:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IERC20_$404",
                                        "typeString": "contract IERC20"
                                    },
                                    "typeName": {
                                        "id": 410,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 409,
                                            "name": "IERC20",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 404,
                                            "src": "11027:6:1"
                                        },
                                        "referencedDeclaration": 404,
                                        "src": "11027:6:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IERC20_$404",
                                            "typeString": "contract IERC20"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 413,
                                    "mutability": "mutable",
                                    "name": "to",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 431,
                                    "src": "11041:10:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 412,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "11041:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 415,
                                    "mutability": "mutable",
                                    "name": "value",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 431,
                                    "src": "11053:13:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 414,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "11053:7:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "11026:41:1"
                        },
                        "returnParameters": {
                            "id": 417,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "11077:0:1"
                        },
                        "scope": 623,
                        "src": "11005:175:1",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 456,
                            "nodeType": "Block",
                            "src": "11276:113:1",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 444,
                                                "name": "token",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 434,
                                                "src": "11306:5:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_IERC20_$404",
                                                    "typeString": "contract IERC20"
                                                }
                                            },
                                            {
                                                "arguments": [
                                                    {
                                                        "expression": {
                                                            "expression": {
                                                                "id": 447,
                                                                "name": "token",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 434,
                                                                "src": "11336:5:1",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_contract$_IERC20_$404",
                                                                    "typeString": "contract IERC20"
                                                                }
                                                            },
                                                            "id": 448,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "transferFrom",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 385,
                                                            "src": "11336:18:1",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                                                                "typeString": "function (address,address,uint256) external returns (bool)"
                                                            }
                                                        },
                                                        "id": 449,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "selector",
                                                        "nodeType": "MemberAccess",
                                                        "src": "11336:27:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes4",
                                                            "typeString": "bytes4"
                                                        }
                                                    },
                                                    {
                                                        "id": 450,
                                                        "name": "from",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 436,
                                                        "src": "11365:4:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    {
                                                        "id": 451,
                                                        "name": "to",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 438,
                                                        "src": "11371:2:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    {
                                                        "id": 452,
                                                        "name": "value",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 440,
                                                        "src": "11375:5:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_bytes4",
                                                            "typeString": "bytes4"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "id": 445,
                                                        "name": "abi",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967295,
                                                        "src": "11313:3:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_abi",
                                                            "typeString": "abi"
                                                        }
                                                    },
                                                    "id": 446,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "memberName": "encodeWithSelector",
                                                    "nodeType": "MemberAccess",
                                                    "src": "11313:22:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                                                        "typeString": "function (bytes4) pure returns (bytes memory)"
                                                    }
                                                },
                                                "id": 453,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "11313:68:1",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_contract$_IERC20_$404",
                                                    "typeString": "contract IERC20"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "id": 443,
                                            "name": "_callOptionalReturn",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 622,
                                            "src": "11286:19:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$404_$_t_bytes_memory_ptr_$returns$__$",
                                                "typeString": "function (contract IERC20,bytes memory)"
                                            }
                                        },
                                        "id": 454,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "11286:96:1",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 455,
                                    "nodeType": "ExpressionStatement",
                                    "src": "11286:96:1"
                                }
                            ]
                        },
                        "id": 457,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "safeTransferFrom",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 441,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 434,
                                    "mutability": "mutable",
                                    "name": "token",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 457,
                                    "src": "11212:12:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IERC20_$404",
                                        "typeString": "contract IERC20"
                                    },
                                    "typeName": {
                                        "id": 433,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 432,
                                            "name": "IERC20",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 404,
                                            "src": "11212:6:1"
                                        },
                                        "referencedDeclaration": 404,
                                        "src": "11212:6:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IERC20_$404",
                                            "typeString": "contract IERC20"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 436,
                                    "mutability": "mutable",
                                    "name": "from",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 457,
                                    "src": "11226:12:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 435,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "11226:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 438,
                                    "mutability": "mutable",
                                    "name": "to",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 457,
                                    "src": "11240:10:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 437,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "11240:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 440,
                                    "mutability": "mutable",
                                    "name": "value",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 457,
                                    "src": "11252:13:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 439,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "11252:7:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "11211:55:1"
                        },
                        "returnParameters": {
                            "id": 442,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "11276:0:1"
                        },
                        "scope": 623,
                        "src": "11186:203:1",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 500,
                            "nodeType": "Block",
                            "src": "11725:537:1",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                "id": 484,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "components": [
                                                        {
                                                            "commonType": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            },
                                                            "id": 471,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "leftExpression": {
                                                                "id": 469,
                                                                "name": "value",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 465,
                                                                "src": "12014:5:1",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            },
                                                            "nodeType": "BinaryOperation",
                                                            "operator": "==",
                                                            "rightExpression": {
                                                                "hexValue": "30",
                                                                "id": 470,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "kind": "number",
                                                                "lValueRequested": false,
                                                                "nodeType": "Literal",
                                                                "src": "12023:1:1",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_rational_0_by_1",
                                                                    "typeString": "int_const 0"
                                                                },
                                                                "value": "0"
                                                            },
                                                            "src": "12014:10:1",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            }
                                                        }
                                                    ],
                                                    "id": 472,
                                                    "isConstant": false,
                                                    "isInlineArray": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "TupleExpression",
                                                    "src": "12013:12:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "||",
                                                "rightExpression": {
                                                    "components": [
                                                        {
                                                            "commonType": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            },
                                                            "id": 482,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "leftExpression": {
                                                                "arguments": [
                                                                    {
                                                                        "arguments": [
                                                                            {
                                                                                "id": 477,
                                                                                "name": "this",
                                                                                "nodeType": "Identifier",
                                                                                "overloadedDeclarations": [],
                                                                                "referencedDeclaration": 4294967268,
                                                                                "src": "12054:4:1",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_contract$_SafeERC20_$623",
                                                                                    "typeString": "library SafeERC20"
                                                                                }
                                                                            }
                                                                        ],
                                                                        "expression": {
                                                                            "argumentTypes": [
                                                                                {
                                                                                    "typeIdentifier": "t_contract$_SafeERC20_$623",
                                                                                    "typeString": "library SafeERC20"
                                                                                }
                                                                            ],
                                                                            "id": 476,
                                                                            "isConstant": false,
                                                                            "isLValue": false,
                                                                            "isPure": true,
                                                                            "lValueRequested": false,
                                                                            "nodeType": "ElementaryTypeNameExpression",
                                                                            "src": "12046:7:1",
                                                                            "typeDescriptions": {
                                                                                "typeIdentifier": "t_type$_t_address_$",
                                                                                "typeString": "type(address)"
                                                                            },
                                                                            "typeName": {
                                                                                "id": 475,
                                                                                "name": "address",
                                                                                "nodeType": "ElementaryTypeName",
                                                                                "src": "12046:7:1",
                                                                                "typeDescriptions": {}
                                                                            }
                                                                        },
                                                                        "id": 478,
                                                                        "isConstant": false,
                                                                        "isLValue": false,
                                                                        "isPure": false,
                                                                        "kind": "typeConversion",
                                                                        "lValueRequested": false,
                                                                        "names": [],
                                                                        "nodeType": "FunctionCall",
                                                                        "src": "12046:13:1",
                                                                        "tryCall": false,
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_address",
                                                                            "typeString": "address"
                                                                        }
                                                                    },
                                                                    {
                                                                        "id": 479,
                                                                        "name": "spender",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 463,
                                                                        "src": "12061:7:1",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_address",
                                                                            "typeString": "address"
                                                                        }
                                                                    }
                                                                ],
                                                                "expression": {
                                                                    "argumentTypes": [
                                                                        {
                                                                            "typeIdentifier": "t_address",
                                                                            "typeString": "address"
                                                                        },
                                                                        {
                                                                            "typeIdentifier": "t_address",
                                                                            "typeString": "address"
                                                                        }
                                                                    ],
                                                                    "expression": {
                                                                        "id": 473,
                                                                        "name": "token",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 461,
                                                                        "src": "12030:5:1",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_contract$_IERC20_$404",
                                                                            "typeString": "contract IERC20"
                                                                        }
                                                                    },
                                                                    "id": 474,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "memberName": "allowance",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 363,
                                                                    "src": "12030:15:1",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$",
                                                                        "typeString": "function (address,address) view external returns (uint256)"
                                                                    }
                                                                },
                                                                "id": 480,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "kind": "functionCall",
                                                                "lValueRequested": false,
                                                                "names": [],
                                                                "nodeType": "FunctionCall",
                                                                "src": "12030:39:1",
                                                                "tryCall": false,
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            },
                                                            "nodeType": "BinaryOperation",
                                                            "operator": "==",
                                                            "rightExpression": {
                                                                "hexValue": "30",
                                                                "id": 481,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "kind": "number",
                                                                "lValueRequested": false,
                                                                "nodeType": "Literal",
                                                                "src": "12073:1:1",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_rational_0_by_1",
                                                                    "typeString": "int_const 0"
                                                                },
                                                                "value": "0"
                                                            },
                                                            "src": "12030:44:1",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            }
                                                        }
                                                    ],
                                                    "id": 483,
                                                    "isConstant": false,
                                                    "isInlineArray": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "TupleExpression",
                                                    "src": "12029:46:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "src": "12013:62:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365",
                                                "id": 485,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "12089:56:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25",
                                                    "typeString": "literal_string \"SafeERC20: approve from non-zero to non-zero allowance\""
                                                },
                                                "value": "SafeERC20: approve from non-zero to non-zero allowance"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25",
                                                    "typeString": "literal_string \"SafeERC20: approve from non-zero to non-zero allowance\""
                                                }
                                            ],
                                            "id": 468,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "12005:7:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 486,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "12005:150:1",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 487,
                                    "nodeType": "ExpressionStatement",
                                    "src": "12005:150:1"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 489,
                                                "name": "token",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 461,
                                                "src": "12185:5:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_IERC20_$404",
                                                    "typeString": "contract IERC20"
                                                }
                                            },
                                            {
                                                "arguments": [
                                                    {
                                                        "expression": {
                                                            "expression": {
                                                                "id": 492,
                                                                "name": "token",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 461,
                                                                "src": "12215:5:1",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_contract$_IERC20_$404",
                                                                    "typeString": "contract IERC20"
                                                                }
                                                            },
                                                            "id": 493,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "approve",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 373,
                                                            "src": "12215:13:1",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                                                "typeString": "function (address,uint256) external returns (bool)"
                                                            }
                                                        },
                                                        "id": 494,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "selector",
                                                        "nodeType": "MemberAccess",
                                                        "src": "12215:22:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes4",
                                                            "typeString": "bytes4"
                                                        }
                                                    },
                                                    {
                                                        "id": 495,
                                                        "name": "spender",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 463,
                                                        "src": "12239:7:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    {
                                                        "id": 496,
                                                        "name": "value",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 465,
                                                        "src": "12248:5:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_bytes4",
                                                            "typeString": "bytes4"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "id": 490,
                                                        "name": "abi",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967295,
                                                        "src": "12192:3:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_abi",
                                                            "typeString": "abi"
                                                        }
                                                    },
                                                    "id": 491,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "memberName": "encodeWithSelector",
                                                    "nodeType": "MemberAccess",
                                                    "src": "12192:22:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                                                        "typeString": "function (bytes4) pure returns (bytes memory)"
                                                    }
                                                },
                                                "id": 497,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "12192:62:1",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_contract$_IERC20_$404",
                                                    "typeString": "contract IERC20"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "id": 488,
                                            "name": "_callOptionalReturn",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 622,
                                            "src": "12165:19:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$404_$_t_bytes_memory_ptr_$returns$__$",
                                                "typeString": "function (contract IERC20,bytes memory)"
                                            }
                                        },
                                        "id": 498,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "12165:90:1",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 499,
                                    "nodeType": "ExpressionStatement",
                                    "src": "12165:90:1"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 458,
                            "nodeType": "StructuredDocumentation",
                            "src": "11395:249:1",
                            "text": " @dev Deprecated. This function has issues similar to the ones found in\n {IERC20-approve}, and its usage is discouraged.\n Whenever possible, use {safeIncreaseAllowance} and\n {safeDecreaseAllowance} instead."
                        },
                        "id": 501,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "safeApprove",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 466,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 461,
                                    "mutability": "mutable",
                                    "name": "token",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 501,
                                    "src": "11670:12:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IERC20_$404",
                                        "typeString": "contract IERC20"
                                    },
                                    "typeName": {
                                        "id": 460,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 459,
                                            "name": "IERC20",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 404,
                                            "src": "11670:6:1"
                                        },
                                        "referencedDeclaration": 404,
                                        "src": "11670:6:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IERC20_$404",
                                            "typeString": "contract IERC20"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 463,
                                    "mutability": "mutable",
                                    "name": "spender",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 501,
                                    "src": "11684:15:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 462,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "11684:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 465,
                                    "mutability": "mutable",
                                    "name": "value",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 501,
                                    "src": "11701:13:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 464,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "11701:7:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "11669:46:1"
                        },
                        "returnParameters": {
                            "id": 467,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "11725:0:1"
                        },
                        "scope": 623,
                        "src": "11649:613:1",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 536,
                            "nodeType": "Block",
                            "src": "12354:194:1",
                            "statements": [
                                {
                                    "assignments": [
                                        512
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 512,
                                            "mutability": "mutable",
                                            "name": "newAllowance",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 536,
                                            "src": "12364:20:1",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 511,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "12364:7:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 523,
                                    "initialValue": {
                                        "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        },
                                        "id": 522,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "arguments": [
                                                {
                                                    "arguments": [
                                                        {
                                                            "id": 517,
                                                            "name": "this",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 4294967268,
                                                            "src": "12411:4:1",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_contract$_SafeERC20_$623",
                                                                "typeString": "library SafeERC20"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_contract$_SafeERC20_$623",
                                                                "typeString": "library SafeERC20"
                                                            }
                                                        ],
                                                        "id": 516,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "ElementaryTypeNameExpression",
                                                        "src": "12403:7:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_address_$",
                                                            "typeString": "type(address)"
                                                        },
                                                        "typeName": {
                                                            "id": 515,
                                                            "name": "address",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "12403:7:1",
                                                            "typeDescriptions": {}
                                                        }
                                                    },
                                                    "id": 518,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "typeConversion",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "12403:13:1",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                {
                                                    "id": 519,
                                                    "name": "spender",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 506,
                                                    "src": "12418:7:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    },
                                                    {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                ],
                                                "expression": {
                                                    "id": 513,
                                                    "name": "token",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 504,
                                                    "src": "12387:5:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_contract$_IERC20_$404",
                                                        "typeString": "contract IERC20"
                                                    }
                                                },
                                                "id": 514,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "allowance",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 363,
                                                "src": "12387:15:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$",
                                                    "typeString": "function (address,address) view external returns (uint256)"
                                                }
                                            },
                                            "id": 520,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "12387:39:1",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "+",
                                        "rightExpression": {
                                            "id": 521,
                                            "name": "value",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 508,
                                            "src": "12429:5:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "12387:47:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "12364:70:1"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 525,
                                                "name": "token",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 504,
                                                "src": "12464:5:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_IERC20_$404",
                                                    "typeString": "contract IERC20"
                                                }
                                            },
                                            {
                                                "arguments": [
                                                    {
                                                        "expression": {
                                                            "expression": {
                                                                "id": 528,
                                                                "name": "token",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 504,
                                                                "src": "12494:5:1",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_contract$_IERC20_$404",
                                                                    "typeString": "contract IERC20"
                                                                }
                                                            },
                                                            "id": 529,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "approve",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 373,
                                                            "src": "12494:13:1",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                                                "typeString": "function (address,uint256) external returns (bool)"
                                                            }
                                                        },
                                                        "id": 530,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "selector",
                                                        "nodeType": "MemberAccess",
                                                        "src": "12494:22:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes4",
                                                            "typeString": "bytes4"
                                                        }
                                                    },
                                                    {
                                                        "id": 531,
                                                        "name": "spender",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 506,
                                                        "src": "12518:7:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    {
                                                        "id": 532,
                                                        "name": "newAllowance",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 512,
                                                        "src": "12527:12:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_bytes4",
                                                            "typeString": "bytes4"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "id": 526,
                                                        "name": "abi",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967295,
                                                        "src": "12471:3:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_abi",
                                                            "typeString": "abi"
                                                        }
                                                    },
                                                    "id": 527,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "memberName": "encodeWithSelector",
                                                    "nodeType": "MemberAccess",
                                                    "src": "12471:22:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                                                        "typeString": "function (bytes4) pure returns (bytes memory)"
                                                    }
                                                },
                                                "id": 533,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "12471:69:1",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_contract$_IERC20_$404",
                                                    "typeString": "contract IERC20"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "id": 524,
                                            "name": "_callOptionalReturn",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 622,
                                            "src": "12444:19:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$404_$_t_bytes_memory_ptr_$returns$__$",
                                                "typeString": "function (contract IERC20,bytes memory)"
                                            }
                                        },
                                        "id": 534,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "12444:97:1",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 535,
                                    "nodeType": "ExpressionStatement",
                                    "src": "12444:97:1"
                                }
                            ]
                        },
                        "id": 537,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "safeIncreaseAllowance",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 509,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 504,
                                    "mutability": "mutable",
                                    "name": "token",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 537,
                                    "src": "12299:12:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IERC20_$404",
                                        "typeString": "contract IERC20"
                                    },
                                    "typeName": {
                                        "id": 503,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 502,
                                            "name": "IERC20",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 404,
                                            "src": "12299:6:1"
                                        },
                                        "referencedDeclaration": 404,
                                        "src": "12299:6:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IERC20_$404",
                                            "typeString": "contract IERC20"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 506,
                                    "mutability": "mutable",
                                    "name": "spender",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 537,
                                    "src": "12313:15:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 505,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "12313:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 508,
                                    "mutability": "mutable",
                                    "name": "value",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 537,
                                    "src": "12330:13:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 507,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "12330:7:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "12298:46:1"
                        },
                        "returnParameters": {
                            "id": 510,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "12354:0:1"
                        },
                        "scope": 623,
                        "src": "12268:280:1",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 583,
                            "nodeType": "Block",
                            "src": "12640:340:1",
                            "statements": [
                                {
                                    "assignments": [
                                        548
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 548,
                                            "mutability": "mutable",
                                            "name": "oldAllowance",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 583,
                                            "src": "12654:20:1",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 547,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "12654:7:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 557,
                                    "initialValue": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "id": 553,
                                                        "name": "this",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967268,
                                                        "src": "12701:4:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_contract$_SafeERC20_$623",
                                                            "typeString": "library SafeERC20"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_contract$_SafeERC20_$623",
                                                            "typeString": "library SafeERC20"
                                                        }
                                                    ],
                                                    "id": 552,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "ElementaryTypeNameExpression",
                                                    "src": "12693:7:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_address_$",
                                                        "typeString": "type(address)"
                                                    },
                                                    "typeName": {
                                                        "id": 551,
                                                        "name": "address",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "12693:7:1",
                                                        "typeDescriptions": {}
                                                    }
                                                },
                                                "id": 554,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "typeConversion",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "12693:13:1",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 555,
                                                "name": "spender",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 542,
                                                "src": "12708:7:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "expression": {
                                                "id": 549,
                                                "name": "token",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 540,
                                                "src": "12677:5:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_IERC20_$404",
                                                    "typeString": "contract IERC20"
                                                }
                                            },
                                            "id": 550,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "allowance",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 363,
                                            "src": "12677:15:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$",
                                                "typeString": "function (address,address) view external returns (uint256)"
                                            }
                                        },
                                        "id": 556,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "12677:39:1",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "12654:62:1"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 561,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "id": 559,
                                                    "name": "oldAllowance",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 548,
                                                    "src": "12738:12:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": ">=",
                                                "rightExpression": {
                                                    "id": 560,
                                                    "name": "value",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 544,
                                                    "src": "12754:5:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "12738:21:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "5361666545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f",
                                                "id": 562,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "12761:43:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_2c3af60974a758b7e72e108c9bf0943ecc9e4f2e8af4695da5f52fbf57a63d3a",
                                                    "typeString": "literal_string \"SafeERC20: decreased allowance below zero\""
                                                },
                                                "value": "SafeERC20: decreased allowance below zero"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_2c3af60974a758b7e72e108c9bf0943ecc9e4f2e8af4695da5f52fbf57a63d3a",
                                                    "typeString": "literal_string \"SafeERC20: decreased allowance below zero\""
                                                }
                                            ],
                                            "id": 558,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "12730:7:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 563,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "12730:75:1",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 564,
                                    "nodeType": "ExpressionStatement",
                                    "src": "12730:75:1"
                                },
                                {
                                    "assignments": [
                                        566
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 566,
                                            "mutability": "mutable",
                                            "name": "newAllowance",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 583,
                                            "src": "12819:20:1",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 565,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "12819:7:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 570,
                                    "initialValue": {
                                        "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        },
                                        "id": 569,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "id": 567,
                                            "name": "oldAllowance",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 548,
                                            "src": "12842:12:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "-",
                                        "rightExpression": {
                                            "id": 568,
                                            "name": "value",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 544,
                                            "src": "12857:5:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "12842:20:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "12819:43:1"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 572,
                                                "name": "token",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 540,
                                                "src": "12896:5:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_IERC20_$404",
                                                    "typeString": "contract IERC20"
                                                }
                                            },
                                            {
                                                "arguments": [
                                                    {
                                                        "expression": {
                                                            "expression": {
                                                                "id": 575,
                                                                "name": "token",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 540,
                                                                "src": "12926:5:1",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_contract$_IERC20_$404",
                                                                    "typeString": "contract IERC20"
                                                                }
                                                            },
                                                            "id": 576,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "approve",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 373,
                                                            "src": "12926:13:1",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                                                "typeString": "function (address,uint256) external returns (bool)"
                                                            }
                                                        },
                                                        "id": 577,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "selector",
                                                        "nodeType": "MemberAccess",
                                                        "src": "12926:22:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes4",
                                                            "typeString": "bytes4"
                                                        }
                                                    },
                                                    {
                                                        "id": 578,
                                                        "name": "spender",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 542,
                                                        "src": "12950:7:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    {
                                                        "id": 579,
                                                        "name": "newAllowance",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 566,
                                                        "src": "12959:12:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_bytes4",
                                                            "typeString": "bytes4"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "id": 573,
                                                        "name": "abi",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967295,
                                                        "src": "12903:3:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_abi",
                                                            "typeString": "abi"
                                                        }
                                                    },
                                                    "id": 574,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "memberName": "encodeWithSelector",
                                                    "nodeType": "MemberAccess",
                                                    "src": "12903:22:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                                                        "typeString": "function (bytes4) pure returns (bytes memory)"
                                                    }
                                                },
                                                "id": 580,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "12903:69:1",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_contract$_IERC20_$404",
                                                    "typeString": "contract IERC20"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "id": 571,
                                            "name": "_callOptionalReturn",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 622,
                                            "src": "12876:19:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$404_$_t_bytes_memory_ptr_$returns$__$",
                                                "typeString": "function (contract IERC20,bytes memory)"
                                            }
                                        },
                                        "id": 581,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "12876:97:1",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 582,
                                    "nodeType": "ExpressionStatement",
                                    "src": "12876:97:1"
                                }
                            ]
                        },
                        "id": 584,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "safeDecreaseAllowance",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 545,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 540,
                                    "mutability": "mutable",
                                    "name": "token",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 584,
                                    "src": "12585:12:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IERC20_$404",
                                        "typeString": "contract IERC20"
                                    },
                                    "typeName": {
                                        "id": 539,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 538,
                                            "name": "IERC20",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 404,
                                            "src": "12585:6:1"
                                        },
                                        "referencedDeclaration": 404,
                                        "src": "12585:6:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IERC20_$404",
                                            "typeString": "contract IERC20"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 542,
                                    "mutability": "mutable",
                                    "name": "spender",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 584,
                                    "src": "12599:15:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 541,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "12599:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 544,
                                    "mutability": "mutable",
                                    "name": "value",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 584,
                                    "src": "12616:13:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 543,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "12616:7:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "12584:46:1"
                        },
                        "returnParameters": {
                            "id": 546,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "12640:0:1"
                        },
                        "scope": 623,
                        "src": "12554:426:1",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 621,
                            "nodeType": "Block",
                            "src": "13433:681:1",
                            "statements": [
                                {
                                    "assignments": [
                                        594
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 594,
                                            "mutability": "mutable",
                                            "name": "returndata",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 621,
                                            "src": "13782:23:1",
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                "typeString": "bytes"
                                            },
                                            "typeName": {
                                                "id": 593,
                                                "name": "bytes",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "13782:5:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_storage_ptr",
                                                    "typeString": "bytes"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 603,
                                    "initialValue": {
                                        "arguments": [
                                            {
                                                "id": 600,
                                                "name": "data",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 590,
                                                "src": "13836:4:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            },
                                            {
                                                "hexValue": "5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564",
                                                "id": 601,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "13842:34:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_47fb62c2c272651d2f0f342bac006756b8ba07f21cc5cb87e0fbb9d50c0c585b",
                                                    "typeString": "literal_string \"SafeERC20: low-level call failed\""
                                                },
                                                "value": "SafeERC20: low-level call failed"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_47fb62c2c272651d2f0f342bac006756b8ba07f21cc5cb87e0fbb9d50c0c585b",
                                                    "typeString": "literal_string \"SafeERC20: low-level call failed\""
                                                }
                                            ],
                                            "expression": {
                                                "arguments": [
                                                    {
                                                        "id": 597,
                                                        "name": "token",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 588,
                                                        "src": "13816:5:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_contract$_IERC20_$404",
                                                            "typeString": "contract IERC20"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_contract$_IERC20_$404",
                                                            "typeString": "contract IERC20"
                                                        }
                                                    ],
                                                    "id": 596,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "ElementaryTypeNameExpression",
                                                    "src": "13808:7:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_address_$",
                                                        "typeString": "type(address)"
                                                    },
                                                    "typeName": {
                                                        "id": 595,
                                                        "name": "address",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "13808:7:1",
                                                        "typeDescriptions": {}
                                                    }
                                                },
                                                "id": 598,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "typeConversion",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "13808:14:1",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "id": 599,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "functionCall",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 123,
                                            "src": "13808:27:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_address_$",
                                                "typeString": "function (address,bytes memory,string memory) returns (bytes memory)"
                                            }
                                        },
                                        "id": 602,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "13808:69:1",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "13782:95:1"
                                },
                                {
                                    "condition": {
                                        "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        },
                                        "id": 607,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "expression": {
                                                "id": 604,
                                                "name": "returndata",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 594,
                                                "src": "13891:10:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            },
                                            "id": 605,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "length",
                                            "nodeType": "MemberAccess",
                                            "src": "13891:17:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": ">",
                                        "rightExpression": {
                                            "hexValue": "30",
                                            "id": 606,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "13911:1:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_rational_0_by_1",
                                                "typeString": "int_const 0"
                                            },
                                            "value": "0"
                                        },
                                        "src": "13891:21:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 620,
                                    "nodeType": "IfStatement",
                                    "src": "13887:221:1",
                                    "trueBody": {
                                        "id": 619,
                                        "nodeType": "Block",
                                        "src": "13914:194:1",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "arguments": [
                                                                {
                                                                    "id": 611,
                                                                    "name": "returndata",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 594,
                                                                    "src": "14031:10:1",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                                        "typeString": "bytes memory"
                                                                    }
                                                                },
                                                                {
                                                                    "components": [
                                                                        {
                                                                            "id": 613,
                                                                            "isConstant": false,
                                                                            "isLValue": false,
                                                                            "isPure": true,
                                                                            "lValueRequested": false,
                                                                            "nodeType": "ElementaryTypeNameExpression",
                                                                            "src": "14044:4:1",
                                                                            "typeDescriptions": {
                                                                                "typeIdentifier": "t_type$_t_bool_$",
                                                                                "typeString": "type(bool)"
                                                                            },
                                                                            "typeName": {
                                                                                "id": 612,
                                                                                "name": "bool",
                                                                                "nodeType": "ElementaryTypeName",
                                                                                "src": "14044:4:1",
                                                                                "typeDescriptions": {}
                                                                            }
                                                                        }
                                                                    ],
                                                                    "id": 614,
                                                                    "isConstant": false,
                                                                    "isInlineArray": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "nodeType": "TupleExpression",
                                                                    "src": "14043:6:1",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_type$_t_bool_$",
                                                                        "typeString": "type(bool)"
                                                                    }
                                                                }
                                                            ],
                                                            "expression": {
                                                                "argumentTypes": [
                                                                    {
                                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                                        "typeString": "bytes memory"
                                                                    },
                                                                    {
                                                                        "typeIdentifier": "t_type$_t_bool_$",
                                                                        "typeString": "type(bool)"
                                                                    }
                                                                ],
                                                                "expression": {
                                                                    "id": 609,
                                                                    "name": "abi",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 4294967295,
                                                                    "src": "14020:3:1",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_magic_abi",
                                                                        "typeString": "abi"
                                                                    }
                                                                },
                                                                "id": 610,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "lValueRequested": false,
                                                                "memberName": "decode",
                                                                "nodeType": "MemberAccess",
                                                                "src": "14020:10:1",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                                                                    "typeString": "function () pure"
                                                                }
                                                            },
                                                            "id": 615,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "kind": "functionCall",
                                                            "lValueRequested": false,
                                                            "names": [],
                                                            "nodeType": "FunctionCall",
                                                            "src": "14020:30:1",
                                                            "tryCall": false,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            }
                                                        },
                                                        {
                                                            "hexValue": "5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564",
                                                            "id": 616,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "string",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "14052:44:1",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd",
                                                                "typeString": "literal_string \"SafeERC20: ERC20 operation did not succeed\""
                                                            },
                                                            "value": "SafeERC20: ERC20 operation did not succeed"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd",
                                                                "typeString": "literal_string \"SafeERC20: ERC20 operation did not succeed\""
                                                            }
                                                        ],
                                                        "id": 608,
                                                        "name": "require",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [
                                                            4294967278,
                                                            4294967278
                                                        ],
                                                        "referencedDeclaration": 4294967278,
                                                        "src": "14012:7:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                            "typeString": "function (bool,string memory) pure"
                                                        }
                                                    },
                                                    "id": 617,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "14012:85:1",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$__$",
                                                        "typeString": "tuple()"
                                                    }
                                                },
                                                "id": 618,
                                                "nodeType": "ExpressionStatement",
                                                "src": "14012:85:1"
                                            }
                                        ]
                                    }
                                }
                            ]
                        },
                        "documentation": {
                            "id": 585,
                            "nodeType": "StructuredDocumentation",
                            "src": "12986:372:1",
                            "text": " @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n on the return value: the return value is optional (but if data is returned, it must not be false).\n @param token The token targeted by the call.\n @param data The call data (encoded using abi.encode or one of its variants)."
                        },
                        "id": 622,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "_callOptionalReturn",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 591,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 588,
                                    "mutability": "mutable",
                                    "name": "token",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 622,
                                    "src": "13392:12:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IERC20_$404",
                                        "typeString": "contract IERC20"
                                    },
                                    "typeName": {
                                        "id": 587,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 586,
                                            "name": "IERC20",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 404,
                                            "src": "13392:6:1"
                                        },
                                        "referencedDeclaration": 404,
                                        "src": "13392:6:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IERC20_$404",
                                            "typeString": "contract IERC20"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 590,
                                    "mutability": "mutable",
                                    "name": "data",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 622,
                                    "src": "13406:17:1",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 589,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "13406:5:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "13391:33:1"
                        },
                        "returnParameters": {
                            "id": 592,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "13433:0:1"
                        },
                        "scope": 623,
                        "src": "13363:751:1",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "private"
                    }
                ],
                "scope": 929,
                "src": "10949:3167:1"
            },
            {
                "abstract": false,
                "baseContracts": [],
                "contractDependencies": [],
                "contractKind": "interface",
                "fullyImplemented": false,
                "id": 690,
                "linearizedBaseContracts": [
                    690
                ],
                "name": "iToken",
                "nodeType": "ContractDefinition",
                "nodes": [
                    {
                        "documentation": {
                            "id": 624,
                            "nodeType": "StructuredDocumentation",
                            "src": "14141:106:1",
                            "text": "@param _owner The address from which the balance will be retrieved\n @return balance the balance"
                        },
                        "functionSelector": "70a08231",
                        "id": 631,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "balanceOf",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 627,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 626,
                                    "mutability": "mutable",
                                    "name": "_owner",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 631,
                                    "src": "14271:14:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 625,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "14271:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "14270:16:1"
                        },
                        "returnParameters": {
                            "id": 630,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 629,
                                    "mutability": "mutable",
                                    "name": "balance",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 631,
                                    "src": "14310:15:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 628,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "14310:7:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "14309:17:1"
                        },
                        "scope": 690,
                        "src": "14252:75:1",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 632,
                            "nodeType": "StructuredDocumentation",
                            "src": "14333:233:1",
                            "text": "@notice send `_value` token to `_to` from `msg.sender`\n @param _to The address of the recipient\n @param _value The amount of token to be transferred\n @return success Whether the transfer was successful or not"
                        },
                        "functionSelector": "a9059cbb",
                        "id": 641,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "transfer",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 637,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 634,
                                    "mutability": "mutable",
                                    "name": "_to",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 641,
                                    "src": "14589:11:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 633,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "14589:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 636,
                                    "mutability": "mutable",
                                    "name": "_value",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 641,
                                    "src": "14602:14:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 635,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "14602:7:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "14588:29:1"
                        },
                        "returnParameters": {
                            "id": 640,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 639,
                                    "mutability": "mutable",
                                    "name": "success",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 641,
                                    "src": "14637:12:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 638,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "14637:4:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "14636:14:1"
                        },
                        "scope": 690,
                        "src": "14571:80:1",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 642,
                            "nodeType": "StructuredDocumentation",
                            "src": "14657:318:1",
                            "text": "@notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from`\n @param _from The address of the sender\n @param _to The address of the recipient\n @param _value The amount of token to be transferred\n @return success Whether the transfer was successful or not"
                        },
                        "functionSelector": "23b872dd",
                        "id": 653,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "transferFrom",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 649,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 644,
                                    "mutability": "mutable",
                                    "name": "_from",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 653,
                                    "src": "15002:13:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 643,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "15002:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 646,
                                    "mutability": "mutable",
                                    "name": "_to",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 653,
                                    "src": "15017:11:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 645,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "15017:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 648,
                                    "mutability": "mutable",
                                    "name": "_value",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 653,
                                    "src": "15030:14:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 647,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "15030:7:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "15001:44:1"
                        },
                        "returnParameters": {
                            "id": 652,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 651,
                                    "mutability": "mutable",
                                    "name": "success",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 653,
                                    "src": "15064:12:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 650,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "15064:4:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "15063:14:1"
                        },
                        "scope": 690,
                        "src": "14980:98:1",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 654,
                            "nodeType": "StructuredDocumentation",
                            "src": "15084:280:1",
                            "text": "@notice `msg.sender` approves `_addr` to spend `_value` tokens\n @param _spender The address of the account able to transfer the tokens\n @param _value The amount of wei to be approved for transfer\n @return success Whether the approval was successful or not"
                        },
                        "functionSelector": "095ea7b3",
                        "id": 663,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "approve",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 659,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 656,
                                    "mutability": "mutable",
                                    "name": "_spender",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 663,
                                    "src": "15386:16:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 655,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "15386:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 658,
                                    "mutability": "mutable",
                                    "name": "_value",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 663,
                                    "src": "15406:14:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 657,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "15406:7:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "15385:36:1"
                        },
                        "returnParameters": {
                            "id": 662,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 661,
                                    "mutability": "mutable",
                                    "name": "success",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 663,
                                    "src": "15440:12:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 660,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "15440:4:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "15439:14:1"
                        },
                        "scope": 690,
                        "src": "15369:85:1",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 664,
                            "nodeType": "StructuredDocumentation",
                            "src": "15460:207:1",
                            "text": "@param _owner The address of the account owning tokens\n @param _spender The address of the account able to transfer the tokens\n @return remaining Amount of remaining tokens allowed to spent"
                        },
                        "functionSelector": "dd62ed3e",
                        "id": 673,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "allowance",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 669,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 666,
                                    "mutability": "mutable",
                                    "name": "_owner",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 673,
                                    "src": "15691:14:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 665,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "15691:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 668,
                                    "mutability": "mutable",
                                    "name": "_spender",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 673,
                                    "src": "15707:16:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 667,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "15707:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "15690:34:1"
                        },
                        "returnParameters": {
                            "id": 672,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 671,
                                    "mutability": "mutable",
                                    "name": "remaining",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 673,
                                    "src": "15748:17:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 670,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "15748:7:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "15747:19:1"
                        },
                        "scope": 690,
                        "src": "15672:95:1",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "anonymous": false,
                        "id": 681,
                        "name": "Transfer",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 680,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 675,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "_from",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 681,
                                    "src": "15788:21:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 674,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "15788:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 677,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "_to",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 681,
                                    "src": "15811:19:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 676,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "15811:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 679,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "_value",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 681,
                                    "src": "15832:14:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 678,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "15832:7:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "15787:60:1"
                        },
                        "src": "15773:75:1"
                    },
                    {
                        "anonymous": false,
                        "id": 689,
                        "name": "Approval",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 688,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 683,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "_owner",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 689,
                                    "src": "15868:22:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 682,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "15868:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 685,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "_spender",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 689,
                                    "src": "15892:24:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 684,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "15892:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 687,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "_value",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 689,
                                    "src": "15918:14:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 686,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "15918:7:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "15867:66:1"
                        },
                        "src": "15853:81:1"
                    }
                ],
                "scope": 929,
                "src": "14117:1819:1"
            },
            {
                "abstract": false,
                "baseContracts": [
                    {
                        "baseName": {
                            "id": 691,
                            "name": "iToken",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 690,
                            "src": "15961:6:1"
                        },
                        "id": 692,
                        "nodeType": "InheritanceSpecifier",
                        "src": "15961:6:1"
                    }
                ],
                "contractDependencies": [
                    690
                ],
                "contractKind": "contract",
                "fullyImplemented": true,
                "id": 928,
                "linearizedBaseContracts": [
                    928,
                    690
                ],
                "name": "Test_Token",
                "nodeType": "ContractDefinition",
                "nodes": [
                    {
                        "id": 696,
                        "libraryName": {
                            "id": 693,
                            "name": "SafeERC20",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 623,
                            "src": "15980:9:1"
                        },
                        "nodeType": "UsingForDirective",
                        "src": "15974:27:1",
                        "typeName": {
                            "id": 695,
                            "nodeType": "UserDefinedTypeName",
                            "pathNode": {
                                "id": 694,
                                "name": "iToken",
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 690,
                                "src": "15994:6:1"
                            },
                            "referencedDeclaration": 690,
                            "src": "15994:6:1",
                            "typeDescriptions": {
                                "typeIdentifier": "t_contract$_iToken_$690",
                                "typeString": "contract iToken"
                            }
                        }
                    },
                    {
                        "constant": true,
                        "id": 703,
                        "mutability": "constant",
                        "name": "MAX_UINT256",
                        "nodeType": "VariableDeclaration",
                        "scope": 928,
                        "src": "16007:49:1",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                        },
                        "typeName": {
                            "id": 697,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "16007:7:1",
                            "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                            }
                        },
                        "value": {
                            "commonType": {
                                "typeIdentifier": "t_rational_115792089237316195423570985008687907853269984665640564039457584007913129639935_by_1",
                                "typeString": "int_const 1157...(70 digits omitted)...9935"
                            },
                            "id": 702,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "leftExpression": {
                                "commonType": {
                                    "typeIdentifier": "t_rational_115792089237316195423570985008687907853269984665640564039457584007913129639936_by_1",
                                    "typeString": "int_const 1157...(70 digits omitted)...9936"
                                },
                                "id": 700,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "leftExpression": {
                                    "hexValue": "32",
                                    "id": 698,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "16046:1:1",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_rational_2_by_1",
                                        "typeString": "int_const 2"
                                    },
                                    "value": "2"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "**",
                                "rightExpression": {
                                    "hexValue": "323536",
                                    "id": 699,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "16049:3:1",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_rational_256_by_1",
                                        "typeString": "int_const 256"
                                    },
                                    "value": "256"
                                },
                                "src": "16046:6:1",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_rational_115792089237316195423570985008687907853269984665640564039457584007913129639936_by_1",
                                    "typeString": "int_const 1157...(70 digits omitted)...9936"
                                }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                                "hexValue": "31",
                                "id": 701,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "16055:1:1",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                },
                                "value": "1"
                            },
                            "src": "16046:10:1",
                            "typeDescriptions": {
                                "typeIdentifier": "t_rational_115792089237316195423570985008687907853269984665640564039457584007913129639935_by_1",
                                "typeString": "int_const 1157...(70 digits omitted)...9935"
                            }
                        },
                        "visibility": "private"
                    },
                    {
                        "constant": false,
                        "functionSelector": "27e235e3",
                        "id": 707,
                        "mutability": "mutable",
                        "name": "balances",
                        "nodeType": "VariableDeclaration",
                        "scope": 928,
                        "src": "16062:44:1",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                            "typeString": "mapping(address => uint256)"
                        },
                        "typeName": {
                            "id": 706,
                            "keyType": {
                                "id": 704,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "16071:7:1",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                }
                            },
                            "nodeType": "Mapping",
                            "src": "16062:28:1",
                            "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                            },
                            "valueType": {
                                "id": 705,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "16082:7:1",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                }
                            }
                        },
                        "visibility": "public"
                    },
                    {
                        "constant": false,
                        "functionSelector": "5c658165",
                        "id": 713,
                        "mutability": "mutable",
                        "name": "allowed",
                        "nodeType": "VariableDeclaration",
                        "scope": 928,
                        "src": "16112:64:1",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                            "typeString": "mapping(address => mapping(address => uint256))"
                        },
                        "typeName": {
                            "id": 712,
                            "keyType": {
                                "id": 708,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "16121:7:1",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                }
                            },
                            "nodeType": "Mapping",
                            "src": "16112:49:1",
                            "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                "typeString": "mapping(address => mapping(address => uint256))"
                            },
                            "valueType": {
                                "id": 711,
                                "keyType": {
                                    "id": 709,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "16141:7:1",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    }
                                },
                                "nodeType": "Mapping",
                                "src": "16132:28:1",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                },
                                "valueType": {
                                    "id": 710,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "16152:7:1",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    }
                                }
                            }
                        },
                        "visibility": "public"
                    },
                    {
                        "constant": false,
                        "functionSelector": "18160ddd",
                        "id": 715,
                        "mutability": "mutable",
                        "name": "totalSupply",
                        "nodeType": "VariableDeclaration",
                        "scope": 928,
                        "src": "16182:26:1",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                        },
                        "typeName": {
                            "id": 714,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "16182:7:1",
                            "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                            }
                        },
                        "visibility": "public"
                    },
                    {
                        "constant": false,
                        "functionSelector": "06fdde03",
                        "id": 717,
                        "mutability": "mutable",
                        "name": "name",
                        "nodeType": "VariableDeclaration",
                        "scope": 928,
                        "src": "16501:18:1",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string"
                        },
                        "typeName": {
                            "id": 716,
                            "name": "string",
                            "nodeType": "ElementaryTypeName",
                            "src": "16501:6:1",
                            "typeDescriptions": {
                                "typeIdentifier": "t_string_storage_ptr",
                                "typeString": "string"
                            }
                        },
                        "visibility": "public"
                    },
                    {
                        "constant": false,
                        "functionSelector": "313ce567",
                        "id": 719,
                        "mutability": "mutable",
                        "name": "decimals",
                        "nodeType": "VariableDeclaration",
                        "scope": 928,
                        "src": "16572:21:1",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                        },
                        "typeName": {
                            "id": 718,
                            "name": "uint8",
                            "nodeType": "ElementaryTypeName",
                            "src": "16572:5:1",
                            "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                            }
                        },
                        "visibility": "public"
                    },
                    {
                        "constant": false,
                        "functionSelector": "95d89b41",
                        "id": 721,
                        "mutability": "mutable",
                        "name": "symbol",
                        "nodeType": "VariableDeclaration",
                        "scope": 928,
                        "src": "16643:20:1",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string"
                        },
                        "typeName": {
                            "id": 720,
                            "name": "string",
                            "nodeType": "ElementaryTypeName",
                            "src": "16643:6:1",
                            "typeDescriptions": {
                                "typeIdentifier": "t_string_storage_ptr",
                                "typeString": "string"
                            }
                        },
                        "visibility": "public"
                    },
                    {
                        "body": {
                            "id": 755,
                            "nodeType": "Block",
                            "src": "16822:493:1",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 737,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "baseExpression": {
                                                "id": 732,
                                                "name": "balances",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 707,
                                                "src": "16832:8:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                    "typeString": "mapping(address => uint256)"
                                                }
                                            },
                                            "id": 735,
                                            "indexExpression": {
                                                "expression": {
                                                    "id": 733,
                                                    "name": "msg",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967281,
                                                    "src": "16841:3:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_message",
                                                        "typeString": "msg"
                                                    }
                                                },
                                                "id": 734,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "sender",
                                                "nodeType": "MemberAccess",
                                                "src": "16841:10:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "IndexAccess",
                                            "src": "16832:20:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 736,
                                            "name": "_initialAmount",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 723,
                                            "src": "16855:14:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "16832:37:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 738,
                                    "nodeType": "ExpressionStatement",
                                    "src": "16832:37:1"
                                },
                                {
                                    "expression": {
                                        "id": 741,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 739,
                                            "name": "totalSupply",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 715,
                                            "src": "16932:11:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 740,
                                            "name": "_initialAmount",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 723,
                                            "src": "16946:14:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "16932:28:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 742,
                                    "nodeType": "ExpressionStatement",
                                    "src": "16932:28:1"
                                },
                                {
                                    "expression": {
                                        "id": 745,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 743,
                                            "name": "name",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 717,
                                            "src": "17016:4:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_string_storage",
                                                "typeString": "string storage ref"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 744,
                                            "name": "_tokenName",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 725,
                                            "src": "17023:10:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_string_memory_ptr",
                                                "typeString": "string memory"
                                            }
                                        },
                                        "src": "17016:17:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage",
                                            "typeString": "string storage ref"
                                        }
                                    },
                                    "id": 746,
                                    "nodeType": "ExpressionStatement",
                                    "src": "17016:17:1"
                                },
                                {
                                    "expression": {
                                        "id": 749,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 747,
                                            "name": "decimals",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 719,
                                            "src": "17114:8:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint8",
                                                "typeString": "uint8"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 748,
                                            "name": "_decimalUnits",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 727,
                                            "src": "17125:13:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint8",
                                                "typeString": "uint8"
                                            }
                                        },
                                        "src": "17114:24:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint8",
                                            "typeString": "uint8"
                                        }
                                    },
                                    "id": 750,
                                    "nodeType": "ExpressionStatement",
                                    "src": "17114:24:1"
                                },
                                {
                                    "expression": {
                                        "id": 753,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 751,
                                            "name": "symbol",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 721,
                                            "src": "17218:6:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_string_storage",
                                                "typeString": "string storage ref"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 752,
                                            "name": "_tokenSymbol",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 729,
                                            "src": "17227:12:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_string_memory_ptr",
                                                "typeString": "string memory"
                                            }
                                        },
                                        "src": "17218:21:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage",
                                            "typeString": "string storage ref"
                                        }
                                    },
                                    "id": 754,
                                    "nodeType": "ExpressionStatement",
                                    "src": "17218:21:1"
                                }
                            ]
                        },
                        "id": 756,
                        "implemented": true,
                        "kind": "constructor",
                        "modifiers": [],
                        "name": "",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 730,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 723,
                                    "mutability": "mutable",
                                    "name": "_initialAmount",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 756,
                                    "src": "16722:22:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 722,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "16722:7:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 725,
                                    "mutability": "mutable",
                                    "name": "_tokenName",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 756,
                                    "src": "16746:24:1",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_memory_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 724,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "16746:6:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 727,
                                    "mutability": "mutable",
                                    "name": "_decimalUnits",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 756,
                                    "src": "16772:19:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                    },
                                    "typeName": {
                                        "id": 726,
                                        "name": "uint8",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "16772:5:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint8",
                                            "typeString": "uint8"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 729,
                                    "mutability": "mutable",
                                    "name": "_tokenSymbol",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 756,
                                    "src": "16793:27:1",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_memory_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 728,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "16793:6:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "16721:100:1"
                        },
                        "returnParameters": {
                            "id": 731,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "16822:0:1"
                        },
                        "scope": 928,
                        "src": "16710:605:1",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            641
                        ],
                        "body": {
                            "id": 798,
                            "nodeType": "Block",
                            "src": "17407:295:1",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 772,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "baseExpression": {
                                                        "id": 767,
                                                        "name": "balances",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 707,
                                                        "src": "17425:8:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                            "typeString": "mapping(address => uint256)"
                                                        }
                                                    },
                                                    "id": 770,
                                                    "indexExpression": {
                                                        "expression": {
                                                            "id": 768,
                                                            "name": "msg",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 4294967281,
                                                            "src": "17434:3:1",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_magic_message",
                                                                "typeString": "msg"
                                                            }
                                                        },
                                                        "id": 769,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "sender",
                                                        "nodeType": "MemberAccess",
                                                        "src": "17434:10:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "17425:20:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": ">=",
                                                "rightExpression": {
                                                    "id": 771,
                                                    "name": "_value",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 760,
                                                    "src": "17449:6:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "17425:30:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "746f6b656e2062616c616e6365206973206c6f776572207468616e207468652076616c756520726571756573746564",
                                                "id": 773,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "17457:49:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_1585781bcea687a18f97b1a94f6f8e11a9041130e156fda9ccf03b1c68f06452",
                                                    "typeString": "literal_string \"token balance is lower than the value requested\""
                                                },
                                                "value": "token balance is lower than the value requested"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_1585781bcea687a18f97b1a94f6f8e11a9041130e156fda9ccf03b1c68f06452",
                                                    "typeString": "literal_string \"token balance is lower than the value requested\""
                                                }
                                            ],
                                            "id": 766,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "17417:7:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 774,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "17417:90:1",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 775,
                                    "nodeType": "ExpressionStatement",
                                    "src": "17417:90:1"
                                },
                                {
                                    "expression": {
                                        "id": 781,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "baseExpression": {
                                                "id": 776,
                                                "name": "balances",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 707,
                                                "src": "17517:8:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                    "typeString": "mapping(address => uint256)"
                                                }
                                            },
                                            "id": 779,
                                            "indexExpression": {
                                                "expression": {
                                                    "id": 777,
                                                    "name": "msg",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967281,
                                                    "src": "17526:3:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_message",
                                                        "typeString": "msg"
                                                    }
                                                },
                                                "id": 778,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "sender",
                                                "nodeType": "MemberAccess",
                                                "src": "17526:10:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "IndexAccess",
                                            "src": "17517:20:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "-=",
                                        "rightHandSide": {
                                            "id": 780,
                                            "name": "_value",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 760,
                                            "src": "17541:6:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "17517:30:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 782,
                                    "nodeType": "ExpressionStatement",
                                    "src": "17517:30:1"
                                },
                                {
                                    "expression": {
                                        "id": 787,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "baseExpression": {
                                                "id": 783,
                                                "name": "balances",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 707,
                                                "src": "17557:8:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                    "typeString": "mapping(address => uint256)"
                                                }
                                            },
                                            "id": 785,
                                            "indexExpression": {
                                                "id": 784,
                                                "name": "_to",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 758,
                                                "src": "17566:3:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "IndexAccess",
                                            "src": "17557:13:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "+=",
                                        "rightHandSide": {
                                            "id": 786,
                                            "name": "_value",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 760,
                                            "src": "17574:6:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "17557:23:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 788,
                                    "nodeType": "ExpressionStatement",
                                    "src": "17557:23:1"
                                },
                                {
                                    "eventCall": {
                                        "arguments": [
                                            {
                                                "expression": {
                                                    "id": 790,
                                                    "name": "msg",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967281,
                                                    "src": "17604:3:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_message",
                                                        "typeString": "msg"
                                                    }
                                                },
                                                "id": 791,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "sender",
                                                "nodeType": "MemberAccess",
                                                "src": "17604:10:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 792,
                                                "name": "_to",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 758,
                                                "src": "17616:3:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 793,
                                                "name": "_value",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 760,
                                                "src": "17621:6:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 789,
                                            "name": "Transfer",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 681,
                                            "src": "17595:8:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,address,uint256)"
                                            }
                                        },
                                        "id": 794,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "17595:33:1",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 795,
                                    "nodeType": "EmitStatement",
                                    "src": "17590:38:1"
                                },
                                {
                                    "expression": {
                                        "hexValue": "74727565",
                                        "id": 796,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "bool",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "17691:4:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        },
                                        "value": "true"
                                    },
                                    "functionReturnParameters": 765,
                                    "id": 797,
                                    "nodeType": "Return",
                                    "src": "17684:11:1"
                                }
                            ]
                        },
                        "functionSelector": "a9059cbb",
                        "id": 799,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "transfer",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 762,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "17375:8:1"
                        },
                        "parameters": {
                            "id": 761,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 758,
                                    "mutability": "mutable",
                                    "name": "_to",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 799,
                                    "src": "17339:11:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 757,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "17339:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 760,
                                    "mutability": "mutable",
                                    "name": "_value",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 799,
                                    "src": "17352:14:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 759,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "17352:7:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "17338:29:1"
                        },
                        "returnParameters": {
                            "id": 765,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 764,
                                    "mutability": "mutable",
                                    "name": "success",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 799,
                                    "src": "17393:12:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 763,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "17393:4:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "17392:14:1"
                        },
                        "scope": 928,
                        "src": "17321:381:1",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            653
                        ],
                        "body": {
                            "id": 867,
                            "nodeType": "Block",
                            "src": "17813:468:1",
                            "statements": [
                                {
                                    "assignments": [
                                        812
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 812,
                                            "mutability": "mutable",
                                            "name": "allowance",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 867,
                                            "src": "17823:17:1",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 811,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "17823:7:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 819,
                                    "initialValue": {
                                        "baseExpression": {
                                            "baseExpression": {
                                                "id": 813,
                                                "name": "allowed",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 713,
                                                "src": "17843:7:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                                    "typeString": "mapping(address => mapping(address => uint256))"
                                                }
                                            },
                                            "id": 815,
                                            "indexExpression": {
                                                "id": 814,
                                                "name": "_from",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 801,
                                                "src": "17851:5:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "17843:14:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                "typeString": "mapping(address => uint256)"
                                            }
                                        },
                                        "id": 818,
                                        "indexExpression": {
                                            "expression": {
                                                "id": 816,
                                                "name": "msg",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4294967281,
                                                "src": "17858:3:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_magic_message",
                                                    "typeString": "msg"
                                                }
                                            },
                                            "id": 817,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "sender",
                                            "nodeType": "MemberAccess",
                                            "src": "17858:10:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "17843:26:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "17823:46:1"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                "id": 829,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    "id": 825,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "baseExpression": {
                                                            "id": 821,
                                                            "name": "balances",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 707,
                                                            "src": "17887:8:1",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                                "typeString": "mapping(address => uint256)"
                                                            }
                                                        },
                                                        "id": 823,
                                                        "indexExpression": {
                                                            "id": 822,
                                                            "name": "_from",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 801,
                                                            "src": "17896:5:1",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        },
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "nodeType": "IndexAccess",
                                                        "src": "17887:15:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": ">=",
                                                    "rightExpression": {
                                                        "id": 824,
                                                        "name": "_value",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 805,
                                                        "src": "17906:6:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "src": "17887:25:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "&&",
                                                "rightExpression": {
                                                    "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    "id": 828,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "id": 826,
                                                        "name": "allowance",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 812,
                                                        "src": "17916:9:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": ">=",
                                                    "rightExpression": {
                                                        "id": 827,
                                                        "name": "_value",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 805,
                                                        "src": "17929:6:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "src": "17916:19:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "src": "17887:48:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "746f6b656e2062616c616e6365206f7220616c6c6f77616e6365206973206c6f776572207468616e20616d6f756e7420726571756573746564",
                                                "id": 830,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "17937:59:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_d8d39484df698fe59d78d2031639e610e556bf68a0e1f7af4e968ff763a96c6a",
                                                    "typeString": "literal_string \"token balance or allowance is lower than amount requested\""
                                                },
                                                "value": "token balance or allowance is lower than amount requested"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_d8d39484df698fe59d78d2031639e610e556bf68a0e1f7af4e968ff763a96c6a",
                                                    "typeString": "literal_string \"token balance or allowance is lower than amount requested\""
                                                }
                                            ],
                                            "id": 820,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "17879:7:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 831,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "17879:118:1",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 832,
                                    "nodeType": "ExpressionStatement",
                                    "src": "17879:118:1"
                                },
                                {
                                    "expression": {
                                        "id": 837,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "baseExpression": {
                                                "id": 833,
                                                "name": "balances",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 707,
                                                "src": "18007:8:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                    "typeString": "mapping(address => uint256)"
                                                }
                                            },
                                            "id": 835,
                                            "indexExpression": {
                                                "id": 834,
                                                "name": "_to",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 803,
                                                "src": "18016:3:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "IndexAccess",
                                            "src": "18007:13:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "+=",
                                        "rightHandSide": {
                                            "id": 836,
                                            "name": "_value",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 805,
                                            "src": "18024:6:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "18007:23:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 838,
                                    "nodeType": "ExpressionStatement",
                                    "src": "18007:23:1"
                                },
                                {
                                    "expression": {
                                        "id": 843,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "baseExpression": {
                                                "id": 839,
                                                "name": "balances",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 707,
                                                "src": "18040:8:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                    "typeString": "mapping(address => uint256)"
                                                }
                                            },
                                            "id": 841,
                                            "indexExpression": {
                                                "id": 840,
                                                "name": "_from",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 801,
                                                "src": "18049:5:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "IndexAccess",
                                            "src": "18040:15:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "-=",
                                        "rightHandSide": {
                                            "id": 842,
                                            "name": "_value",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 805,
                                            "src": "18059:6:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "18040:25:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 844,
                                    "nodeType": "ExpressionStatement",
                                    "src": "18040:25:1"
                                },
                                {
                                    "condition": {
                                        "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        },
                                        "id": 847,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "id": 845,
                                            "name": "allowance",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 812,
                                            "src": "18079:9:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "<",
                                        "rightExpression": {
                                            "id": 846,
                                            "name": "MAX_UINT256",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 703,
                                            "src": "18091:11:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "18079:23:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 858,
                                    "nodeType": "IfStatement",
                                    "src": "18075:90:1",
                                    "trueBody": {
                                        "id": 857,
                                        "nodeType": "Block",
                                        "src": "18104:61:1",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "id": 855,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftHandSide": {
                                                        "baseExpression": {
                                                            "baseExpression": {
                                                                "id": 848,
                                                                "name": "allowed",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 713,
                                                                "src": "18118:7:1",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                                                    "typeString": "mapping(address => mapping(address => uint256))"
                                                                }
                                                            },
                                                            "id": 852,
                                                            "indexExpression": {
                                                                "id": 849,
                                                                "name": "_from",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 801,
                                                                "src": "18126:5:1",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "nodeType": "IndexAccess",
                                                            "src": "18118:14:1",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                                "typeString": "mapping(address => uint256)"
                                                            }
                                                        },
                                                        "id": 853,
                                                        "indexExpression": {
                                                            "expression": {
                                                                "id": 850,
                                                                "name": "msg",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 4294967281,
                                                                "src": "18133:3:1",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_magic_message",
                                                                    "typeString": "msg"
                                                                }
                                                            },
                                                            "id": 851,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "sender",
                                                            "nodeType": "MemberAccess",
                                                            "src": "18133:10:1",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        },
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": true,
                                                        "nodeType": "IndexAccess",
                                                        "src": "18118:26:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "nodeType": "Assignment",
                                                    "operator": "-=",
                                                    "rightHandSide": {
                                                        "id": 854,
                                                        "name": "_value",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 805,
                                                        "src": "18148:6:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "src": "18118:36:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "id": 856,
                                                "nodeType": "ExpressionStatement",
                                                "src": "18118:36:1"
                                            }
                                        ]
                                    }
                                },
                                {
                                    "eventCall": {
                                        "arguments": [
                                            {
                                                "id": 860,
                                                "name": "_from",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 801,
                                                "src": "18188:5:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 861,
                                                "name": "_to",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 803,
                                                "src": "18195:3:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 862,
                                                "name": "_value",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 805,
                                                "src": "18200:6:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 859,
                                            "name": "Transfer",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 681,
                                            "src": "18179:8:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,address,uint256)"
                                            }
                                        },
                                        "id": 863,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "18179:28:1",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 864,
                                    "nodeType": "EmitStatement",
                                    "src": "18174:33:1"
                                },
                                {
                                    "expression": {
                                        "hexValue": "74727565",
                                        "id": 865,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "bool",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "18270:4:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        },
                                        "value": "true"
                                    },
                                    "functionReturnParameters": 810,
                                    "id": 866,
                                    "nodeType": "Return",
                                    "src": "18263:11:1"
                                }
                            ]
                        },
                        "functionSelector": "23b872dd",
                        "id": 868,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "transferFrom",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 807,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "17781:8:1"
                        },
                        "parameters": {
                            "id": 806,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 801,
                                    "mutability": "mutable",
                                    "name": "_from",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 868,
                                    "src": "17730:13:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 800,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "17730:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 803,
                                    "mutability": "mutable",
                                    "name": "_to",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 868,
                                    "src": "17745:11:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 802,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "17745:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 805,
                                    "mutability": "mutable",
                                    "name": "_value",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 868,
                                    "src": "17758:14:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 804,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "17758:7:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "17729:44:1"
                        },
                        "returnParameters": {
                            "id": 810,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 809,
                                    "mutability": "mutable",
                                    "name": "success",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 868,
                                    "src": "17799:12:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 808,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "17799:4:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "17798:14:1"
                        },
                        "scope": 928,
                        "src": "17708:573:1",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            631
                        ],
                        "body": {
                            "id": 880,
                            "nodeType": "Block",
                            "src": "18369:40:1",
                            "statements": [
                                {
                                    "expression": {
                                        "baseExpression": {
                                            "id": 876,
                                            "name": "balances",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 707,
                                            "src": "18386:8:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                "typeString": "mapping(address => uint256)"
                                            }
                                        },
                                        "id": 878,
                                        "indexExpression": {
                                            "id": 877,
                                            "name": "_owner",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 870,
                                            "src": "18395:6:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "18386:16:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "functionReturnParameters": 875,
                                    "id": 879,
                                    "nodeType": "Return",
                                    "src": "18379:23:1"
                                }
                            ]
                        },
                        "functionSelector": "70a08231",
                        "id": 881,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "balanceOf",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 872,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "18329:8:1"
                        },
                        "parameters": {
                            "id": 871,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 870,
                                    "mutability": "mutable",
                                    "name": "_owner",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 881,
                                    "src": "18306:14:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 869,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "18306:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "18305:16:1"
                        },
                        "returnParameters": {
                            "id": 875,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 874,
                                    "mutability": "mutable",
                                    "name": "balance",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 881,
                                    "src": "18352:15:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 873,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "18352:7:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "18351:17:1"
                        },
                        "scope": 928,
                        "src": "18287:122:1",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            663
                        ],
                        "body": {
                            "id": 909,
                            "nodeType": "Block",
                            "src": "18505:175:1",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 898,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "baseExpression": {
                                                "baseExpression": {
                                                    "id": 891,
                                                    "name": "allowed",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 713,
                                                    "src": "18515:7:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                                        "typeString": "mapping(address => mapping(address => uint256))"
                                                    }
                                                },
                                                "id": 895,
                                                "indexExpression": {
                                                    "expression": {
                                                        "id": 892,
                                                        "name": "msg",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967281,
                                                        "src": "18523:3:1",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_message",
                                                            "typeString": "msg"
                                                        }
                                                    },
                                                    "id": 893,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "sender",
                                                    "nodeType": "MemberAccess",
                                                    "src": "18523:10:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "IndexAccess",
                                                "src": "18515:19:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                    "typeString": "mapping(address => uint256)"
                                                }
                                            },
                                            "id": 896,
                                            "indexExpression": {
                                                "id": 894,
                                                "name": "_spender",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 883,
                                                "src": "18535:8:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "IndexAccess",
                                            "src": "18515:29:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 897,
                                            "name": "_value",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 885,
                                            "src": "18547:6:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "18515:38:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 899,
                                    "nodeType": "ExpressionStatement",
                                    "src": "18515:38:1"
                                },
                                {
                                    "eventCall": {
                                        "arguments": [
                                            {
                                                "expression": {
                                                    "id": 901,
                                                    "name": "msg",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967281,
                                                    "src": "18577:3:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_message",
                                                        "typeString": "msg"
                                                    }
                                                },
                                                "id": 902,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "sender",
                                                "nodeType": "MemberAccess",
                                                "src": "18577:10:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 903,
                                                "name": "_spender",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 883,
                                                "src": "18589:8:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 904,
                                                "name": "_value",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 885,
                                                "src": "18599:6:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 900,
                                            "name": "Approval",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 689,
                                            "src": "18568:8:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,address,uint256)"
                                            }
                                        },
                                        "id": 905,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "18568:38:1",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 906,
                                    "nodeType": "EmitStatement",
                                    "src": "18563:43:1"
                                },
                                {
                                    "expression": {
                                        "hexValue": "74727565",
                                        "id": 907,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "bool",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "18669:4:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        },
                                        "value": "true"
                                    },
                                    "functionReturnParameters": 890,
                                    "id": 908,
                                    "nodeType": "Return",
                                    "src": "18662:11:1"
                                }
                            ]
                        },
                        "functionSelector": "095ea7b3",
                        "id": 910,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "approve",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 887,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "18473:8:1"
                        },
                        "parameters": {
                            "id": 886,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 883,
                                    "mutability": "mutable",
                                    "name": "_spender",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 910,
                                    "src": "18432:16:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 882,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "18432:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 885,
                                    "mutability": "mutable",
                                    "name": "_value",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 910,
                                    "src": "18450:14:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 884,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "18450:7:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "18431:34:1"
                        },
                        "returnParameters": {
                            "id": 890,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 889,
                                    "mutability": "mutable",
                                    "name": "success",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 910,
                                    "src": "18491:12:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 888,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "18491:4:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "18490:14:1"
                        },
                        "scope": 928,
                        "src": "18415:265:1",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            673
                        ],
                        "body": {
                            "id": 926,
                            "nodeType": "Block",
                            "src": "18788:49:1",
                            "statements": [
                                {
                                    "expression": {
                                        "baseExpression": {
                                            "baseExpression": {
                                                "id": 920,
                                                "name": "allowed",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 713,
                                                "src": "18805:7:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                                    "typeString": "mapping(address => mapping(address => uint256))"
                                                }
                                            },
                                            "id": 922,
                                            "indexExpression": {
                                                "id": 921,
                                                "name": "_owner",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 912,
                                                "src": "18813:6:1",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "18805:15:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                "typeString": "mapping(address => uint256)"
                                            }
                                        },
                                        "id": 924,
                                        "indexExpression": {
                                            "id": 923,
                                            "name": "_spender",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 914,
                                            "src": "18821:8:1",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "18805:25:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "functionReturnParameters": 919,
                                    "id": 925,
                                    "nodeType": "Return",
                                    "src": "18798:32:1"
                                }
                            ]
                        },
                        "functionSelector": "dd62ed3e",
                        "id": 927,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "allowance",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 916,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "18746:8:1"
                        },
                        "parameters": {
                            "id": 915,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 912,
                                    "mutability": "mutable",
                                    "name": "_owner",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 927,
                                    "src": "18705:14:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 911,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "18705:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 914,
                                    "mutability": "mutable",
                                    "name": "_spender",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 927,
                                    "src": "18721:16:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 913,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "18721:7:1",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "18704:34:1"
                        },
                        "returnParameters": {
                            "id": 919,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 918,
                                    "mutability": "mutable",
                                    "name": "remaining",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 927,
                                    "src": "18769:17:1",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 917,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "18769:7:1",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "18768:19:1"
                        },
                        "scope": 928,
                        "src": "18686:151:1",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "public"
                    }
                ],
                "scope": 929,
                "src": "15938:2901:1"
            }
        ],
        "src": "73:18766:1"
    },
    "compiler": {
        "name": "solc",
        "version": "0.8.0+commit.c7dfd78e.Emscripten.clang"
    },
    "networks": {},
    "schemaVersion": "3.3.3",
    "updatedAt": "2021-02-08T17:00:21.793Z",
    "devdoc": {
        "kind": "dev",
        "methods": {
            "allowance(address,address)": {
                "params": {
                    "_owner": "The address of the account owning tokens",
                    "_spender": "The address of the account able to transfer the tokens"
                },
                "returns": {
                    "remaining": "Amount of remaining tokens allowed to spent"
                }
            },
            "approve(address,uint256)": {
                "params": {
                    "_spender": "The address of the account able to transfer the tokens",
                    "_value": "The amount of wei to be approved for transfer"
                },
                "returns": {
                    "success": "Whether the approval was successful or not"
                }
            },
            "balanceOf(address)": {
                "params": {
                    "_owner": "The address from which the balance will be retrieved"
                },
                "returns": {
                    "balance": "the balance"
                }
            },
            "transfer(address,uint256)": {
                "params": {
                    "_to": "The address of the recipient",
                    "_value": "The amount of token to be transferred"
                },
                "returns": {
                    "success": "Whether the transfer was successful or not"
                }
            },
            "transferFrom(address,address,uint256)": {
                "params": {
                    "_from": "The address of the sender",
                    "_to": "The address of the recipient",
                    "_value": "The amount of token to be transferred"
                },
                "returns": {
                    "success": "Whether the transfer was successful or not"
                }
            }
        },
        "version": 1
    },
    "userdoc": {
        "kind": "user",
        "methods": {
            "approve(address,uint256)": {
                "notice": "`msg.sender` approves `_addr` to spend `_value` tokens"
            },
            "transfer(address,uint256)": {
                "notice": "send `_value` token to `_to` from `msg.sender`"
            },
            "transferFrom(address,address,uint256)": {
                "notice": "send `_value` token to `_to` from `_from` on the condition it is approved by `_from`"
            }
        },
        "version": 1
    }
}
