{
  "contractName": "MoonwalkerswapV2Router01",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_factory",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_WETH",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "WETH",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "factory",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenA",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "tokenB",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amountADesired",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountBDesired",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountAMin",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountBMin",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        }
      ],
      "name": "addLiquidity",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountA",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountB",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "liquidity",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amountTokenDesired",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountTokenMin",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountETHMin",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        }
      ],
      "name": "addLiquidityETH",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountToken",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountETH",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "liquidity",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenA",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "tokenB",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "liquidity",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountAMin",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountBMin",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        }
      ],
      "name": "removeLiquidity",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountA",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountB",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "liquidity",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountTokenMin",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountETHMin",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        }
      ],
      "name": "removeLiquidityETH",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountToken",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountETH",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenA",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "tokenB",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "liquidity",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountAMin",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountBMin",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "approveMax",
          "type": "bool"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "removeLiquidityWithPermit",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountA",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountB",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "liquidity",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountTokenMin",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountETHMin",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "approveMax",
          "type": "bool"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "removeLiquidityETHWithPermit",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountToken",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountETH",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amountIn",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountOutMin",
          "type": "uint256"
        },
        {
          "internalType": "address[]",
          "name": "path",
          "type": "address[]"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        }
      ],
      "name": "swapExactTokensForTokens",
      "outputs": [
        {
          "internalType": "uint256[]",
          "name": "amounts",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amountOut",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountInMax",
          "type": "uint256"
        },
        {
          "internalType": "address[]",
          "name": "path",
          "type": "address[]"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        }
      ],
      "name": "swapTokensForExactTokens",
      "outputs": [
        {
          "internalType": "uint256[]",
          "name": "amounts",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amountOutMin",
          "type": "uint256"
        },
        {
          "internalType": "address[]",
          "name": "path",
          "type": "address[]"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        }
      ],
      "name": "swapExactETHForTokens",
      "outputs": [
        {
          "internalType": "uint256[]",
          "name": "amounts",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amountOut",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountInMax",
          "type": "uint256"
        },
        {
          "internalType": "address[]",
          "name": "path",
          "type": "address[]"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        }
      ],
      "name": "swapTokensForExactETH",
      "outputs": [
        {
          "internalType": "uint256[]",
          "name": "amounts",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amountIn",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountOutMin",
          "type": "uint256"
        },
        {
          "internalType": "address[]",
          "name": "path",
          "type": "address[]"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        }
      ],
      "name": "swapExactTokensForETH",
      "outputs": [
        {
          "internalType": "uint256[]",
          "name": "amounts",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amountOut",
          "type": "uint256"
        },
        {
          "internalType": "address[]",
          "name": "path",
          "type": "address[]"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        }
      ],
      "name": "swapETHForExactTokens",
      "outputs": [
        {
          "internalType": "uint256[]",
          "name": "amounts",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amountA",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "reserveA",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "reserveB",
          "type": "uint256"
        }
      ],
      "name": "quote",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountB",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amountIn",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "reserveIn",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "reserveOut",
          "type": "uint256"
        }
      ],
      "name": "getAmountOut",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountOut",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amountOut",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "reserveIn",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "reserveOut",
          "type": "uint256"
        }
      ],
      "name": "getAmountIn",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountIn",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amountIn",
          "type": "uint256"
        },
        {
          "internalType": "address[]",
          "name": "path",
          "type": "address[]"
        }
      ],
      "name": "getAmountsOut",
      "outputs": [
        {
          "internalType": "uint256[]",
          "name": "amounts",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amountOut",
          "type": "uint256"
        },
        {
          "internalType": "address[]",
          "name": "path",
          "type": "address[]"
        }
      ],
      "name": "getAmountsIn",
      "outputs": [
        {
          "internalType": "uint256[]",
          "name": "amounts",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.6.6+commit.6c089d02\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_factory\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_WETH\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"WETH\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenA\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenB\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountADesired\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountBDesired\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountAMin\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountBMin\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"addLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountA\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountB\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidity\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountTokenDesired\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountTokenMin\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountETHMin\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"addLiquidityETH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountToken\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountETH\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidity\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"factory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reserveIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reserveOut\",\"type\":\"uint256\"}],\"name\":\"getAmountIn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reserveIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reserveOut\",\"type\":\"uint256\"}],\"name\":\"getAmountOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"path\",\"type\":\"address[]\"}],\"name\":\"getAmountsIn\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"path\",\"type\":\"address[]\"}],\"name\":\"getAmountsOut\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountA\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reserveA\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reserveB\",\"type\":\"uint256\"}],\"name\":\"quote\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountB\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenA\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenB\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"liquidity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountAMin\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountBMin\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"removeLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountA\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountB\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"liquidity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountTokenMin\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountETHMin\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"removeLiquidityETH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountToken\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountETH\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"liquidity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountTokenMin\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountETHMin\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"approveMax\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"removeLiquidityETHWithPermit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountToken\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountETH\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenA\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenB\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"liquidity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountAMin\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountBMin\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"approveMax\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"removeLiquidityWithPermit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountA\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountB\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"path\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"swapETHForExactTokens\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOutMin\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"path\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"swapExactETHForTokens\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutMin\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"path\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"swapExactTokensForETH\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutMin\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"path\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"swapExactTokensForTokens\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInMax\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"path\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"swapTokensForExactETH\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInMax\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"path\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"swapTokensForExactTokens\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/Moonwalkerswap-v2-periphery/contracts/MoonwalkerswapV2Router01.sol\":\"MoonwalkerswapV2Router01\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/Moonwalkerswap-v2-periphery/contracts/MoonwalkerswapV2Router01.sol\":{\"keccak256\":\"0x358f9bbe4e27e72ed91dd48344a180ce27c27645ed6d4ebeb10bf77740ac3a8b\",\"urls\":[\"bzz-raw://11556374f2eab47c5219e8343babde79d1d6e8c204e6d4ebedf7ad6f9877dc78\",\"dweb:/ipfs/QmNqfvd3uYVwX9Hn8SNozfMU2mfHJQSLfshKoNP4TMFvFr\"]},\"/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/Moonwalkerswap-v2-periphery/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0x61db17aebc5d812c7002d15c1da954065e56abe49d64b14c034abe5604d70eb3\",\"urls\":[\"bzz-raw://b006685e753f9120469f10b09c159f222d4cb8b507a6c1f0c14ed50c883ebe66\",\"dweb:/ipfs/QmSyY7iTugbczPwfGK67etiyPULenYGzzRYbt8aabwwkUb\"]},\"/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/Moonwalkerswap-v2-periphery/contracts/interfaces/IMoonwalkerswapV2Router01.sol\":{\"keccak256\":\"0xca122eb08288a7222f98a734e2ad9a338bf02293d0894dc7f1d8dcbd808eef4c\",\"urls\":[\"bzz-raw://1c596c0213ac56f727eaaa15208e68a61a3eabd5351a59de7cabc171213faa8f\",\"dweb:/ipfs/QmPCMAZUk5uuQAHWyBQ68kPhdSUcecQDctvfaUHDaNT28K\"]},\"/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/Moonwalkerswap-v2-periphery/contracts/interfaces/IWETH.sol\":{\"keccak256\":\"0xfc10758fd8dba790c39468dccd358cb7cef06ae7c4781832cc7aa76f91f167e6\",\"urls\":[\"bzz-raw://dc22493dea6c60d47835eeba53726f8a6f76f4fcd798d40e54608a1380515d49\",\"dweb:/ipfs/QmS1QVcBRH4TELYNE7XCfjSVQEWFupyaNLKmMkKH7iPjrm\"]},\"/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/Moonwalkerswap-v2-periphery/contracts/libraries/MoonwalkerswapV2Library.sol\":{\"keccak256\":\"0x159bee476db809637551ce5ad20be89ad14ea04cb5150cd0c0ec857e81d82c24\",\"urls\":[\"bzz-raw://41d88c1b2583bf07daf655dfebdae4ac77e8ee10b96ec860666f0dd5bfabdaab\",\"dweb:/ipfs/QmNi6c4r9JoJRbkvmB5bbmDKgwXTyuqoHLVESAekem3quu\"]},\"/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/Moonwalkerswap-v2-periphery/contracts/libraries/SafeMath.sol\":{\"keccak256\":\"0x27f0ea82f879b3b01387b583e6d9d0ec858dca3b22b0aad173f8fbda06e761e1\",\"urls\":[\"bzz-raw://0db9cf37793eb7035f0bfced36323d240f0212150009c39a3a108701d9b50b6c\",\"dweb:/ipfs/QmUAdiG9XNcieXkKfiMB49zQqD34FbXFE15csV2KQzwEqg\"]},\"moonwalkerswap-libraries/contracts/libraries/TransferHelper.sol\":{\"keccak256\":\"0xaff99b54915f57e2a4e71b8d15afd4ee425410e5a6f45c07517ae1beb806f8bd\",\"urls\":[\"bzz-raw://15432ec031f4cfa6709921289e198b030a0c5eac75b5a3e0eb64827a2b3b5595\",\"dweb:/ipfs/QmZvR1KuuDvuzXFiADCngTKyMCTy31uhq9U6CazP59B55j\"]},\"moonwalkerswap-v2-core/contracts/interfaces/IMoonwalkerFactory.sol\":{\"keccak256\":\"0xeb65ccec387520ac1b49bc1a9e0d317fd85f69c831c57f45b8bd753e3a670090\",\"urls\":[\"bzz-raw://d72d7d945689ad68b45feecc9fdeb9d66717ec1d99546a69094594f479c597bb\",\"dweb:/ipfs/QmW2XrR7vYWpKhUT9fqfzJ1YYWwFhQqDBM2ehi4FFZ7fE4\"]},\"moonwalkerswap-v2-core/contracts/interfaces/IMoonwalkerPair.sol\":{\"keccak256\":\"0x4c888477bfd9725859e9136902f4e0e2b00c1f60fa640083226cb04a2e6e2b2d\",\"urls\":[\"bzz-raw://6bdfa268dbce3f14b7a324c84094d2aa4b51764a344c61eb7e7d179ca54f6861\",\"dweb:/ipfs/QmcGAFVuybBuNyp8Woza32E8T1Dsh9nrrCgecmHEazFTx6\"]}},\"version\":1}",
  "bytecode": "0x60c060405234801561001057600080fd5b506040516136843803806136848339818101604052604081101561003357600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c61354861013c600039806101285280610a015280610a3c5280610b335280610d4d52806110d7528061125752806113995280611421528061167652806119665280611bd95280611c2f5280611c635280611cd75280611e775280611fb6528061203e525080610bbd5280610c945280610e135280610e4c5280610f87528061116152806112e6528061145352806115c652806116f352806118eb528061191452806119445280611ab15280611c0d5280611f06528061207052806128eb528061292e5280612d495280612df75280612e7752506135486000f3fe6080604052600436106101185760003560e01c80638803dbee116100a0578063d06ca61f11610064578063d06ca61f14610742578063ded9382a146107f7578063e8e337001461086a578063f305d719146108ea578063fb3bdb411461093057610151565b80638803dbee146105d3578063ad5c464814610669578063ad615dec1461069a578063baa2abde146106d0578063c45a01551461072d57610151565b80632195995c116100e75780632195995c146103a557806338ed1739146104235780634a25d94a146104b95780637ff36ab51461054f57806385f8c259146101c257610151565b806302751cec14610156578063054d50d4146101c257806318cbafe51461020a5780631f00ca74146102f057610151565b3661015157336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461014f57fe5b005b600080fd5b34801561016257600080fd5b506101a9600480360360c081101561017957600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a001356109b4565b6040805192835260208301919091528051918290030190f35b3480156101ce57600080fd5b506101f8600480360360608110156101e557600080fd5b5080359060208101359060400135610ace565b60408051918252519081900360200190f35b34801561021657600080fd5b506102a0600480360360a081101561022d57600080fd5b813591602081013591810190606081016040820135600160201b81111561025357600080fd5b82018360208201111561026557600080fd5b803590602001918460208302840111600160201b8311171561028657600080fd5b91935091506001600160a01b038135169060200135610ae3565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156102dc5781810151838201526020016102c4565b505050509050019250505060405180910390f35b3480156102fc57600080fd5b506102a06004803603604081101561031357600080fd5b81359190810190604081016020820135600160201b81111561033457600080fd5b82018360208201111561034657600080fd5b803590602001918460208302840111600160201b8311171561036757600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610e0c945050505050565b3480156103b157600080fd5b506101a960048036036101608110156103c957600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135610e42565b34801561042f57600080fd5b506102a0600480360360a081101561044657600080fd5b813591602081013591810190606081016040820135600160201b81111561046c57600080fd5b82018360208201111561047e57600080fd5b803590602001918460208302840111600160201b8311171561049f57600080fd5b91935091506001600160a01b038135169060200135610f3c565b3480156104c557600080fd5b506102a0600480360360a08110156104dc57600080fd5b813591602081013591810190606081016040820135600160201b81111561050257600080fd5b82018360208201111561051457600080fd5b803590602001918460208302840111600160201b8311171561053557600080fd5b91935091506001600160a01b038135169060200135611087565b6102a06004803603608081101561056557600080fd5b81359190810190604081016020820135600160201b81111561058657600080fd5b82018360208201111561059857600080fd5b803590602001918460208302840111600160201b831117156105b957600080fd5b91935091506001600160a01b03813516906020013561120f565b3480156105df57600080fd5b506102a0600480360360a08110156105f657600080fd5b813591602081013591810190606081016040820135600160201b81111561061c57600080fd5b82018360208201111561062e57600080fd5b803590602001918460208302840111600160201b8311171561064f57600080fd5b91935091506001600160a01b03813516906020013561157b565b34801561067557600080fd5b5061067e611674565b604080516001600160a01b039092168252519081900360200190f35b3480156106a657600080fd5b506101f8600480360360608110156106bd57600080fd5b5080359060208101359060400135611698565b3480156106dc57600080fd5b506101a9600480360360e08110156106f357600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c001356116a5565b34801561073957600080fd5b5061067e6118e9565b34801561074e57600080fd5b506102a06004803603604081101561076557600080fd5b81359190810190604081016020820135600160201b81111561078657600080fd5b82018360208201111561079857600080fd5b803590602001918460208302840111600160201b831117156107b957600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061190d945050505050565b34801561080357600080fd5b506101a9600480360361014081101561081b57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e0820135169061010081013590610120013561193a565b34801561087657600080fd5b506108cc600480360361010081101561088e57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135611a4e565b60408051938452602084019290925282820152519081900360600190f35b6108cc600480360360c081101561090057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135611b8a565b6102a06004803603608081101561094657600080fd5b81359190810190604081016020820135600160201b81111561096757600080fd5b82018360208201111561097957600080fd5b803590602001918460208302840111600160201b8311171561099a57600080fd5b91935091506001600160a01b038135169060200135611e2f565b60008082428110156109fb576040805162461bcd60e51b815260206004820152601f6024820152600080516020613397833981519152604482015290519081900360640190fd5b610a2a897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a6116a5565b9093509150610a3a8986856121ad565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610aa057600080fd5b505af1158015610ab4573d6000803e3d6000fd5b50505050610ac28583612301565b50965096945050505050565b6000610adb8484846123f9565b949350505050565b60608142811015610b29576040805162461bcd60e51b815260206004820152601f6024820152600080516020613397833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110610b6357fe5b905060200201356001600160a01b03166001600160a01b031614610bb85760405162461bcd60e51b815260040180806020018281038252602481526020018061343a6024913960400191505060405180910390fd5b610c167f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506124e992505050565b91508682600184510381518110610c2957fe5b60200260200101511015610c6e5760405162461bcd60e51b81526004018080602001828103825260328152602001806133dc6032913960400191505060405180910390fd5b610d0c86866000818110610c7e57fe5b905060200201356001600160a01b031633610cf27f00000000000000000000000000000000000000000000000000000000000000008a8a6000818110610cc057fe5b905060200201356001600160a01b03168b8b6001818110610cdd57fe5b905060200201356001600160a01b031661261f565b85600081518110610cff57fe5b60200260200101516126df565b610d4b8287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525030925061283c915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d83600185510381518110610d8a57fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610dc857600080fd5b505af1158015610ddc573d6000803e3d6000fd5b50505050610e018483600185510381518110610df457fe5b6020026020010151612301565b509695505050505050565b6060610e397f00000000000000000000000000000000000000000000000000000000000000008484612a82565b90505b92915050565b6000806000610e727f00000000000000000000000000000000000000000000000000000000000000008f8f61261f565b9050600087610e81578c610e85565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b158015610efb57600080fd5b505af1158015610f0f573d6000803e3d6000fd5b50505050610f228f8f8f8f8f8f8f6116a5565b809450819550505050509b509b9950505050505050505050565b60608142811015610f82576040805162461bcd60e51b815260206004820152601f6024820152600080516020613397833981519152604482015290519081900360640190fd5b610fe07f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506124e992505050565b91508682600184510381518110610ff357fe5b602002602001015110156110385760405162461bcd60e51b81526004018080602001828103825260328152602001806133dc6032913960400191505060405180910390fd5b61104886866000818110610c7e57fe5b610e018287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061283c915050565b606081428110156110cd576040805162461bcd60e51b815260206004820152601f6024820152600080516020613397833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168686600019810181811061110757fe5b905060200201356001600160a01b03166001600160a01b03161461115c5760405162461bcd60e51b815260040180806020018281038252602481526020018061343a6024913960400191505060405180910390fd5b6111ba7f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612a8292505050565b915086826000815181106111ca57fe5b60200260200101511115610c6e5760405162461bcd60e51b815260040180806020018281038252602e8152602001806132d1602e913960400191505060405180910390fd5b60608142811015611255576040805162461bcd60e51b815260206004820152601f6024820152600080516020613397833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168686600081811061128c57fe5b905060200201356001600160a01b03166001600160a01b0316146112e15760405162461bcd60e51b815260040180806020018281038252602481526020018061343a6024913960400191505060405180910390fd5b61133f7f0000000000000000000000000000000000000000000000000000000000000000348888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506124e992505050565b9150868260018451038151811061135257fe5b602002602001015110156113975760405162461bcd60e51b81526004018080602001828103825260328152602001806133dc6032913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0836000815181106113d357fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561140657600080fd5b505af115801561141a573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb61149c7f00000000000000000000000000000000000000000000000000000000000000008989600081811061147f57fe5b905060200201356001600160a01b03168a8a6001818110610cdd57fe5b846000815181106114a957fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561150057600080fd5b505af1158015611514573d6000803e3d6000fd5b505050506040513d602081101561152a57600080fd5b505161153257fe5b6115718287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061283c915050565b5095945050505050565b606081428110156115c1576040805162461bcd60e51b815260206004820152601f6024820152600080516020613397833981519152604482015290519081900360640190fd5b61161f7f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612a8292505050565b9150868260008151811061162f57fe5b602002602001015111156110385760405162461bcd60e51b815260040180806020018281038252602e8152602001806132d1602e913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610adb848484612ba4565b60008082428110156116ec576040805162461bcd60e51b815260206004820152601f6024820152600080516020613397833981519152604482015290519081900360640190fd5b60006117197f00000000000000000000000000000000000000000000000000000000000000008c8c61261f565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561177457600080fd5b505af1158015611788573d6000803e3d6000fd5b505050506040513d602081101561179e57600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b1580156117eb57600080fd5b505af11580156117ff573d6000803e3d6000fd5b505050506040513d604081101561181557600080fd5b5080516020909101519092509050600061182f8e8e612c50565b509050806001600160a01b03168e6001600160a01b031614611852578183611855565b82825b90975095508a8710156118995760405162461bcd60e51b815260040180806020018281038252602d8152602001806132a4602d913960400191505060405180910390fd5b898610156118d85760405162461bcd60e51b815260040180806020018281038252602d81526020018061345e602d913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6060610e397f000000000000000000000000000000000000000000000000000000000000000084846124e9565b600080600061198a7f00000000000000000000000000000000000000000000000000000000000000008e7f000000000000000000000000000000000000000000000000000000000000000061261f565b9050600087611999578c61199d565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b158015611a1357600080fd5b505af1158015611a27573d6000803e3d6000fd5b50505050611a398e8e8e8e8e8e6109b4565b909f909e509c50505050505050505050505050565b60008060008342811015611a97576040805162461bcd60e51b815260206004820152601f6024820152600080516020613397833981519152604482015290519081900360640190fd5b611aa58c8c8c8c8c8c612d18565b90945092506000611ad77f00000000000000000000000000000000000000000000000000000000000000008e8e61261f565b9050611ae58d3383886126df565b611af18c3383876126df565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015611b4957600080fd5b505af1158015611b5d573d6000803e3d6000fd5b505050506040513d6020811015611b7357600080fd5b5051949d939c50939a509198505050505050505050565b60008060008342811015611bd3576040805162461bcd60e51b815260206004820152601f6024820152600080516020613397833981519152604482015290519081900360640190fd5b611c018a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c612d18565b90945092506000611c537f00000000000000000000000000000000000000000000000000000000000000008c7f000000000000000000000000000000000000000000000000000000000000000061261f565b9050611c618b3383886126df565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015611cbc57600080fd5b505af1158015611cd0573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611d5557600080fd5b505af1158015611d69573d6000803e3d6000fd5b505050506040513d6020811015611d7f57600080fd5b5051611d8757fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015611ddf57600080fd5b505af1158015611df3573d6000803e3d6000fd5b505050506040513d6020811015611e0957600080fd5b5051925034841015611e2157611e2133853403612301565b505096509650969350505050565b60608142811015611e75576040805162461bcd60e51b815260206004820152601f6024820152600080516020613397833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611eac57fe5b905060200201356001600160a01b03166001600160a01b031614611f015760405162461bcd60e51b815260040180806020018281038252602481526020018061343a6024913960400191505060405180910390fd5b611f5f7f000000000000000000000000000000000000000000000000000000000000000088888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612a8292505050565b91503482600081518110611f6f57fe5b60200260200101511115611fb45760405162461bcd60e51b815260040180806020018281038252602e8152602001806132d1602e913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611ff057fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561202357600080fd5b505af1158015612037573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb61209c7f00000000000000000000000000000000000000000000000000000000000000008989600081811061147f57fe5b846000815181106120a957fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561210057600080fd5b505af1158015612114573d6000803e3d6000fd5b505050506040513d602081101561212a57600080fd5b505161213257fe5b6121718287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061283c915050565b8160008151811061217e57fe5b602002602001015134111561157157611571338360008151811061219e57fe5b60200260200101513403612301565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b6020831061222a5780518252601f19909201916020918201910161220b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461228c576040519150601f19603f3d011682016040523d82523d6000602084013e612291565b606091505b50915091508180156122bf5750805115806122bf57508080602001905160208110156122bc57600080fd5b50515b6122fa5760405162461bcd60e51b815260040180806020018281038252602d8152602001806134e6602d913960400191505060405180910390fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b6020831061234d5780518252601f19909201916020918201910161232e565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146123af576040519150601f19603f3d011682016040523d82523d6000602084013e6123b4565b606091505b50509050806123f45760405162461bcd60e51b81526004018080602001828103825260348152602001806133636034913960400191505060405180910390fd5b505050565b60008084116124395760405162461bcd60e51b815260040180806020018281038252603281526020018061324d6032913960400191505060405180910390fd5b6000831180156124495750600082115b6124845760405162461bcd60e51b815260040180806020018281038252602f8152602001806134b7602f913960400191505060405180910390fd5b6000612498856103e563ffffffff612f8c16565b905060006124ac828563ffffffff612f8c16565b905060006124d2836124c6886103e863ffffffff612f8c16565b9063ffffffff612fef16565b90508082816124dd57fe5b04979650505050505050565b606060028251101561252c5760405162461bcd60e51b81526004018080602001828103825260258152602001806133b76025913960400191505060405180910390fd5b815167ffffffffffffffff8111801561254457600080fd5b5060405190808252806020026020018201604052801561256e578160200160208202803683370190505b509050828160008151811061257f57fe5b60200260200101818152505060005b6001835103811015612617576000806125d1878685815181106125ad57fe5b60200260200101518786600101815181106125c457fe5b602002602001015161303e565b915091506125f38484815181106125e457fe5b602002602001015183836123f9565b84846001018151811061260257fe5b6020908102919091010152505060010161258e565b509392505050565b600080600061262e8585612c50565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106127645780518252601f199092019160209182019101612745565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146127c6576040519150601f19603f3d011682016040523d82523d6000602084013e6127cb565b606091505b50915091508180156127f95750805115806127f957508080602001905160208110156127f657600080fd5b50515b6128345760405162461bcd60e51b81526004018080602001828103825260318152602001806133326031913960400191505060405180910390fd5b505050505050565b60005b6001835103811015612a7c5760008084838151811061285a57fe5b602002602001015185846001018151811061287157fe5b60200260200101519150915060006128898383612c50565b509050600087856001018151811061289d57fe5b60200260200101519050600080836001600160a01b0316866001600160a01b0316146128cb578260006128cf565b6000835b91509150600060028a510388106128e65788612927565b6129277f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061291a57fe5b602002602001015161261f565b90506129547f0000000000000000000000000000000000000000000000000000000000000000888861261f565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015612991576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612a025781810151838201526020016129ea565b50505050905090810190601f168015612a2f5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015612a5157600080fd5b505af1158015612a65573d6000803e3d6000fd5b50506001909901985061283f975050505050505050565b50505050565b6060600282511015612ac55760405162461bcd60e51b81526004018080602001828103825260258152602001806133b76025913960400191505060405180910390fd5b815167ffffffffffffffff81118015612add57600080fd5b50604051908082528060200260200182016040528015612b07578160200160208202803683370190505b5090508281600183510381518110612b1b57fe5b60209081029190910101528151600019015b801561261757600080612b5d87866001860381518110612b4957fe5b60200260200101518786815181106125c457fe5b91509150612b7f848481518110612b7057fe5b6020026020010151838361310c565b846001850381518110612b8e57fe5b6020908102919091010152505060001901612b2d565b6000808411612be45760405162461bcd60e51b815260040180806020018281038252602c81526020018061348b602c913960400191505060405180910390fd5b600083118015612bf45750600082115b612c2f5760405162461bcd60e51b815260040180806020018281038252602f8152602001806134b7602f913960400191505060405180910390fd5b82612c40858463ffffffff612f8c16565b81612c4757fe5b04949350505050565b600080826001600160a01b0316846001600160a01b03161415612ca45760405162461bcd60e51b815260040180806020018281038252602c81526020018061340e602c913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610612cc4578284612cc7565b83835b90925090506001600160a01b038216612d115760405162461bcd60e51b815260040180806020018281038252602581526020018061327f6025913960400191505060405180910390fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b158015612d9257600080fd5b505afa158015612da6573d6000803e3d6000fd5b505050506040513d6020811015612dbc57600080fd5b50516001600160a01b03161415612e6f57604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b158015612e4257600080fd5b505af1158015612e56573d6000803e3d6000fd5b505050506040513d6020811015612e6c57600080fd5b50505b600080612e9d7f00000000000000000000000000000000000000000000000000000000000000008b8b61303e565b91509150816000148015612eaf575080155b15612ebf57879350869250612f7f565b6000612ecc898484612ba4565b9050878111612f1f5785811015612f145760405162461bcd60e51b815260040180806020018281038252602d81526020018061345e602d913960400191505060405180910390fd5b889450925082612f7d565b6000612f2c898486612ba4565b905089811115612f3857fe5b87811015612f775760405162461bcd60e51b815260040180806020018281038252602d8152602001806132a4602d913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b6000811580612fa757505080820282828281612fa457fe5b04145b610e3c576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015610e3c576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b600080600061304d8585612c50565b50905060008061305e88888861261f565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561309657600080fd5b505afa1580156130aa573d6000803e3d6000fd5b505050506040513d60608110156130c057600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506001600160a01b03878116908416146130fa5780826130fd565b81815b90999098509650505050505050565b600080841161314c5760405162461bcd60e51b81526004018080602001828103825260338152602001806132ff6033913960400191505060405180910390fd5b60008311801561315c5750600082115b6131975760405162461bcd60e51b815260040180806020018281038252602f8152602001806134b7602f913960400191505060405180910390fd5b60006131bb6103e86131af868863ffffffff612f8c16565b9063ffffffff612f8c16565b905060006131d56103e56131af868963ffffffff6131fc16565b90506131f260018284816131e557fe5b049063ffffffff612fef16565b9695505050505050565b80820382811115610e3c576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fdfe4d6f6f6e77616c6b65727377617056324c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e544d6f6f6e77616c6b65727377617056324c6962726172793a205a45524f5f414444524553534d6f6f6e77616c6b6572737761705632526f757465723a20494e53554646494349454e545f415f414d4f554e544d6f6f6e77616c6b6572737761705632526f757465723a204558434553534956455f494e5055545f414d4f554e544d6f6f6e77616c6b65727377617056324c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472616e7366657246726f6d206661696c65645472616e7366657248656c7065723a3a736166655472616e736665724554483a20455448207472616e73666572206661696c65644d6f6f6e77616c6b6572737761705632526f757465723a2045585049524544004d6f6f6e77616c6b65727377617056324c6962726172793a20494e56414c49445f504154484d6f6f6e77616c6b6572737761705632526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e544d6f6f6e77616c6b65727377617056324c6962726172793a204944454e544943414c5f4144445245535345534d6f6f6e77616c6b6572737761705632526f757465723a20494e56414c49445f504154484d6f6f6e77616c6b6572737761705632526f757465723a20494e53554646494349454e545f425f414d4f554e544d6f6f6e77616c6b65727377617056324c6962726172793a20494e53554646494349454e545f414d4f554e544d6f6f6e77616c6b65727377617056324c6962726172793a20494e53554646494349454e545f4c49515549444954595472616e7366657248656c7065723a3a736166655472616e736665723a207472616e73666572206661696c6564a2646970667358221220dc512b59dfded45e4733d1f7237f74ab1ed108280619f81bee636453921a309664736f6c63430006060033",
  "deployedBytecode": "0x6080604052600436106101185760003560e01c80638803dbee116100a0578063d06ca61f11610064578063d06ca61f14610742578063ded9382a146107f7578063e8e337001461086a578063f305d719146108ea578063fb3bdb411461093057610151565b80638803dbee146105d3578063ad5c464814610669578063ad615dec1461069a578063baa2abde146106d0578063c45a01551461072d57610151565b80632195995c116100e75780632195995c146103a557806338ed1739146104235780634a25d94a146104b95780637ff36ab51461054f57806385f8c259146101c257610151565b806302751cec14610156578063054d50d4146101c257806318cbafe51461020a5780631f00ca74146102f057610151565b3661015157336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461014f57fe5b005b600080fd5b34801561016257600080fd5b506101a9600480360360c081101561017957600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a001356109b4565b6040805192835260208301919091528051918290030190f35b3480156101ce57600080fd5b506101f8600480360360608110156101e557600080fd5b5080359060208101359060400135610ace565b60408051918252519081900360200190f35b34801561021657600080fd5b506102a0600480360360a081101561022d57600080fd5b813591602081013591810190606081016040820135600160201b81111561025357600080fd5b82018360208201111561026557600080fd5b803590602001918460208302840111600160201b8311171561028657600080fd5b91935091506001600160a01b038135169060200135610ae3565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156102dc5781810151838201526020016102c4565b505050509050019250505060405180910390f35b3480156102fc57600080fd5b506102a06004803603604081101561031357600080fd5b81359190810190604081016020820135600160201b81111561033457600080fd5b82018360208201111561034657600080fd5b803590602001918460208302840111600160201b8311171561036757600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610e0c945050505050565b3480156103b157600080fd5b506101a960048036036101608110156103c957600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135610e42565b34801561042f57600080fd5b506102a0600480360360a081101561044657600080fd5b813591602081013591810190606081016040820135600160201b81111561046c57600080fd5b82018360208201111561047e57600080fd5b803590602001918460208302840111600160201b8311171561049f57600080fd5b91935091506001600160a01b038135169060200135610f3c565b3480156104c557600080fd5b506102a0600480360360a08110156104dc57600080fd5b813591602081013591810190606081016040820135600160201b81111561050257600080fd5b82018360208201111561051457600080fd5b803590602001918460208302840111600160201b8311171561053557600080fd5b91935091506001600160a01b038135169060200135611087565b6102a06004803603608081101561056557600080fd5b81359190810190604081016020820135600160201b81111561058657600080fd5b82018360208201111561059857600080fd5b803590602001918460208302840111600160201b831117156105b957600080fd5b91935091506001600160a01b03813516906020013561120f565b3480156105df57600080fd5b506102a0600480360360a08110156105f657600080fd5b813591602081013591810190606081016040820135600160201b81111561061c57600080fd5b82018360208201111561062e57600080fd5b803590602001918460208302840111600160201b8311171561064f57600080fd5b91935091506001600160a01b03813516906020013561157b565b34801561067557600080fd5b5061067e611674565b604080516001600160a01b039092168252519081900360200190f35b3480156106a657600080fd5b506101f8600480360360608110156106bd57600080fd5b5080359060208101359060400135611698565b3480156106dc57600080fd5b506101a9600480360360e08110156106f357600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c001356116a5565b34801561073957600080fd5b5061067e6118e9565b34801561074e57600080fd5b506102a06004803603604081101561076557600080fd5b81359190810190604081016020820135600160201b81111561078657600080fd5b82018360208201111561079857600080fd5b803590602001918460208302840111600160201b831117156107b957600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061190d945050505050565b34801561080357600080fd5b506101a9600480360361014081101561081b57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e0820135169061010081013590610120013561193a565b34801561087657600080fd5b506108cc600480360361010081101561088e57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135611a4e565b60408051938452602084019290925282820152519081900360600190f35b6108cc600480360360c081101561090057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135611b8a565b6102a06004803603608081101561094657600080fd5b81359190810190604081016020820135600160201b81111561096757600080fd5b82018360208201111561097957600080fd5b803590602001918460208302840111600160201b8311171561099a57600080fd5b91935091506001600160a01b038135169060200135611e2f565b60008082428110156109fb576040805162461bcd60e51b815260206004820152601f6024820152600080516020613397833981519152604482015290519081900360640190fd5b610a2a897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a6116a5565b9093509150610a3a8986856121ad565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610aa057600080fd5b505af1158015610ab4573d6000803e3d6000fd5b50505050610ac28583612301565b50965096945050505050565b6000610adb8484846123f9565b949350505050565b60608142811015610b29576040805162461bcd60e51b815260206004820152601f6024820152600080516020613397833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110610b6357fe5b905060200201356001600160a01b03166001600160a01b031614610bb85760405162461bcd60e51b815260040180806020018281038252602481526020018061343a6024913960400191505060405180910390fd5b610c167f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506124e992505050565b91508682600184510381518110610c2957fe5b60200260200101511015610c6e5760405162461bcd60e51b81526004018080602001828103825260328152602001806133dc6032913960400191505060405180910390fd5b610d0c86866000818110610c7e57fe5b905060200201356001600160a01b031633610cf27f00000000000000000000000000000000000000000000000000000000000000008a8a6000818110610cc057fe5b905060200201356001600160a01b03168b8b6001818110610cdd57fe5b905060200201356001600160a01b031661261f565b85600081518110610cff57fe5b60200260200101516126df565b610d4b8287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525030925061283c915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d83600185510381518110610d8a57fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610dc857600080fd5b505af1158015610ddc573d6000803e3d6000fd5b50505050610e018483600185510381518110610df457fe5b6020026020010151612301565b509695505050505050565b6060610e397f00000000000000000000000000000000000000000000000000000000000000008484612a82565b90505b92915050565b6000806000610e727f00000000000000000000000000000000000000000000000000000000000000008f8f61261f565b9050600087610e81578c610e85565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b158015610efb57600080fd5b505af1158015610f0f573d6000803e3d6000fd5b50505050610f228f8f8f8f8f8f8f6116a5565b809450819550505050509b509b9950505050505050505050565b60608142811015610f82576040805162461bcd60e51b815260206004820152601f6024820152600080516020613397833981519152604482015290519081900360640190fd5b610fe07f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506124e992505050565b91508682600184510381518110610ff357fe5b602002602001015110156110385760405162461bcd60e51b81526004018080602001828103825260328152602001806133dc6032913960400191505060405180910390fd5b61104886866000818110610c7e57fe5b610e018287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061283c915050565b606081428110156110cd576040805162461bcd60e51b815260206004820152601f6024820152600080516020613397833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168686600019810181811061110757fe5b905060200201356001600160a01b03166001600160a01b03161461115c5760405162461bcd60e51b815260040180806020018281038252602481526020018061343a6024913960400191505060405180910390fd5b6111ba7f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612a8292505050565b915086826000815181106111ca57fe5b60200260200101511115610c6e5760405162461bcd60e51b815260040180806020018281038252602e8152602001806132d1602e913960400191505060405180910390fd5b60608142811015611255576040805162461bcd60e51b815260206004820152601f6024820152600080516020613397833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168686600081811061128c57fe5b905060200201356001600160a01b03166001600160a01b0316146112e15760405162461bcd60e51b815260040180806020018281038252602481526020018061343a6024913960400191505060405180910390fd5b61133f7f0000000000000000000000000000000000000000000000000000000000000000348888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506124e992505050565b9150868260018451038151811061135257fe5b602002602001015110156113975760405162461bcd60e51b81526004018080602001828103825260328152602001806133dc6032913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0836000815181106113d357fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561140657600080fd5b505af115801561141a573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb61149c7f00000000000000000000000000000000000000000000000000000000000000008989600081811061147f57fe5b905060200201356001600160a01b03168a8a6001818110610cdd57fe5b846000815181106114a957fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561150057600080fd5b505af1158015611514573d6000803e3d6000fd5b505050506040513d602081101561152a57600080fd5b505161153257fe5b6115718287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061283c915050565b5095945050505050565b606081428110156115c1576040805162461bcd60e51b815260206004820152601f6024820152600080516020613397833981519152604482015290519081900360640190fd5b61161f7f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612a8292505050565b9150868260008151811061162f57fe5b602002602001015111156110385760405162461bcd60e51b815260040180806020018281038252602e8152602001806132d1602e913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610adb848484612ba4565b60008082428110156116ec576040805162461bcd60e51b815260206004820152601f6024820152600080516020613397833981519152604482015290519081900360640190fd5b60006117197f00000000000000000000000000000000000000000000000000000000000000008c8c61261f565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561177457600080fd5b505af1158015611788573d6000803e3d6000fd5b505050506040513d602081101561179e57600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b1580156117eb57600080fd5b505af11580156117ff573d6000803e3d6000fd5b505050506040513d604081101561181557600080fd5b5080516020909101519092509050600061182f8e8e612c50565b509050806001600160a01b03168e6001600160a01b031614611852578183611855565b82825b90975095508a8710156118995760405162461bcd60e51b815260040180806020018281038252602d8152602001806132a4602d913960400191505060405180910390fd5b898610156118d85760405162461bcd60e51b815260040180806020018281038252602d81526020018061345e602d913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6060610e397f000000000000000000000000000000000000000000000000000000000000000084846124e9565b600080600061198a7f00000000000000000000000000000000000000000000000000000000000000008e7f000000000000000000000000000000000000000000000000000000000000000061261f565b9050600087611999578c61199d565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b158015611a1357600080fd5b505af1158015611a27573d6000803e3d6000fd5b50505050611a398e8e8e8e8e8e6109b4565b909f909e509c50505050505050505050505050565b60008060008342811015611a97576040805162461bcd60e51b815260206004820152601f6024820152600080516020613397833981519152604482015290519081900360640190fd5b611aa58c8c8c8c8c8c612d18565b90945092506000611ad77f00000000000000000000000000000000000000000000000000000000000000008e8e61261f565b9050611ae58d3383886126df565b611af18c3383876126df565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015611b4957600080fd5b505af1158015611b5d573d6000803e3d6000fd5b505050506040513d6020811015611b7357600080fd5b5051949d939c50939a509198505050505050505050565b60008060008342811015611bd3576040805162461bcd60e51b815260206004820152601f6024820152600080516020613397833981519152604482015290519081900360640190fd5b611c018a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c612d18565b90945092506000611c537f00000000000000000000000000000000000000000000000000000000000000008c7f000000000000000000000000000000000000000000000000000000000000000061261f565b9050611c618b3383886126df565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015611cbc57600080fd5b505af1158015611cd0573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611d5557600080fd5b505af1158015611d69573d6000803e3d6000fd5b505050506040513d6020811015611d7f57600080fd5b5051611d8757fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015611ddf57600080fd5b505af1158015611df3573d6000803e3d6000fd5b505050506040513d6020811015611e0957600080fd5b5051925034841015611e2157611e2133853403612301565b505096509650969350505050565b60608142811015611e75576040805162461bcd60e51b815260206004820152601f6024820152600080516020613397833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611eac57fe5b905060200201356001600160a01b03166001600160a01b031614611f015760405162461bcd60e51b815260040180806020018281038252602481526020018061343a6024913960400191505060405180910390fd5b611f5f7f000000000000000000000000000000000000000000000000000000000000000088888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612a8292505050565b91503482600081518110611f6f57fe5b60200260200101511115611fb45760405162461bcd60e51b815260040180806020018281038252602e8152602001806132d1602e913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611ff057fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561202357600080fd5b505af1158015612037573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb61209c7f00000000000000000000000000000000000000000000000000000000000000008989600081811061147f57fe5b846000815181106120a957fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561210057600080fd5b505af1158015612114573d6000803e3d6000fd5b505050506040513d602081101561212a57600080fd5b505161213257fe5b6121718287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061283c915050565b8160008151811061217e57fe5b602002602001015134111561157157611571338360008151811061219e57fe5b60200260200101513403612301565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b6020831061222a5780518252601f19909201916020918201910161220b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461228c576040519150601f19603f3d011682016040523d82523d6000602084013e612291565b606091505b50915091508180156122bf5750805115806122bf57508080602001905160208110156122bc57600080fd5b50515b6122fa5760405162461bcd60e51b815260040180806020018281038252602d8152602001806134e6602d913960400191505060405180910390fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b6020831061234d5780518252601f19909201916020918201910161232e565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146123af576040519150601f19603f3d011682016040523d82523d6000602084013e6123b4565b606091505b50509050806123f45760405162461bcd60e51b81526004018080602001828103825260348152602001806133636034913960400191505060405180910390fd5b505050565b60008084116124395760405162461bcd60e51b815260040180806020018281038252603281526020018061324d6032913960400191505060405180910390fd5b6000831180156124495750600082115b6124845760405162461bcd60e51b815260040180806020018281038252602f8152602001806134b7602f913960400191505060405180910390fd5b6000612498856103e563ffffffff612f8c16565b905060006124ac828563ffffffff612f8c16565b905060006124d2836124c6886103e863ffffffff612f8c16565b9063ffffffff612fef16565b90508082816124dd57fe5b04979650505050505050565b606060028251101561252c5760405162461bcd60e51b81526004018080602001828103825260258152602001806133b76025913960400191505060405180910390fd5b815167ffffffffffffffff8111801561254457600080fd5b5060405190808252806020026020018201604052801561256e578160200160208202803683370190505b509050828160008151811061257f57fe5b60200260200101818152505060005b6001835103811015612617576000806125d1878685815181106125ad57fe5b60200260200101518786600101815181106125c457fe5b602002602001015161303e565b915091506125f38484815181106125e457fe5b602002602001015183836123f9565b84846001018151811061260257fe5b6020908102919091010152505060010161258e565b509392505050565b600080600061262e8585612c50565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106127645780518252601f199092019160209182019101612745565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146127c6576040519150601f19603f3d011682016040523d82523d6000602084013e6127cb565b606091505b50915091508180156127f95750805115806127f957508080602001905160208110156127f657600080fd5b50515b6128345760405162461bcd60e51b81526004018080602001828103825260318152602001806133326031913960400191505060405180910390fd5b505050505050565b60005b6001835103811015612a7c5760008084838151811061285a57fe5b602002602001015185846001018151811061287157fe5b60200260200101519150915060006128898383612c50565b509050600087856001018151811061289d57fe5b60200260200101519050600080836001600160a01b0316866001600160a01b0316146128cb578260006128cf565b6000835b91509150600060028a510388106128e65788612927565b6129277f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061291a57fe5b602002602001015161261f565b90506129547f0000000000000000000000000000000000000000000000000000000000000000888861261f565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015612991576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612a025781810151838201526020016129ea565b50505050905090810190601f168015612a2f5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015612a5157600080fd5b505af1158015612a65573d6000803e3d6000fd5b50506001909901985061283f975050505050505050565b50505050565b6060600282511015612ac55760405162461bcd60e51b81526004018080602001828103825260258152602001806133b76025913960400191505060405180910390fd5b815167ffffffffffffffff81118015612add57600080fd5b50604051908082528060200260200182016040528015612b07578160200160208202803683370190505b5090508281600183510381518110612b1b57fe5b60209081029190910101528151600019015b801561261757600080612b5d87866001860381518110612b4957fe5b60200260200101518786815181106125c457fe5b91509150612b7f848481518110612b7057fe5b6020026020010151838361310c565b846001850381518110612b8e57fe5b6020908102919091010152505060001901612b2d565b6000808411612be45760405162461bcd60e51b815260040180806020018281038252602c81526020018061348b602c913960400191505060405180910390fd5b600083118015612bf45750600082115b612c2f5760405162461bcd60e51b815260040180806020018281038252602f8152602001806134b7602f913960400191505060405180910390fd5b82612c40858463ffffffff612f8c16565b81612c4757fe5b04949350505050565b600080826001600160a01b0316846001600160a01b03161415612ca45760405162461bcd60e51b815260040180806020018281038252602c81526020018061340e602c913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610612cc4578284612cc7565b83835b90925090506001600160a01b038216612d115760405162461bcd60e51b815260040180806020018281038252602581526020018061327f6025913960400191505060405180910390fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b158015612d9257600080fd5b505afa158015612da6573d6000803e3d6000fd5b505050506040513d6020811015612dbc57600080fd5b50516001600160a01b03161415612e6f57604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b158015612e4257600080fd5b505af1158015612e56573d6000803e3d6000fd5b505050506040513d6020811015612e6c57600080fd5b50505b600080612e9d7f00000000000000000000000000000000000000000000000000000000000000008b8b61303e565b91509150816000148015612eaf575080155b15612ebf57879350869250612f7f565b6000612ecc898484612ba4565b9050878111612f1f5785811015612f145760405162461bcd60e51b815260040180806020018281038252602d81526020018061345e602d913960400191505060405180910390fd5b889450925082612f7d565b6000612f2c898486612ba4565b905089811115612f3857fe5b87811015612f775760405162461bcd60e51b815260040180806020018281038252602d8152602001806132a4602d913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b6000811580612fa757505080820282828281612fa457fe5b04145b610e3c576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015610e3c576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b600080600061304d8585612c50565b50905060008061305e88888861261f565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561309657600080fd5b505afa1580156130aa573d6000803e3d6000fd5b505050506040513d60608110156130c057600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506001600160a01b03878116908416146130fa5780826130fd565b81815b90999098509650505050505050565b600080841161314c5760405162461bcd60e51b81526004018080602001828103825260338152602001806132ff6033913960400191505060405180910390fd5b60008311801561315c5750600082115b6131975760405162461bcd60e51b815260040180806020018281038252602f8152602001806134b7602f913960400191505060405180910390fd5b60006131bb6103e86131af868863ffffffff612f8c16565b9063ffffffff612f8c16565b905060006131d56103e56131af868963ffffffff6131fc16565b90506131f260018284816131e557fe5b049063ffffffff612fef16565b9695505050505050565b80820382811115610e3c576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fdfe4d6f6f6e77616c6b65727377617056324c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e544d6f6f6e77616c6b65727377617056324c6962726172793a205a45524f5f414444524553534d6f6f6e77616c6b6572737761705632526f757465723a20494e53554646494349454e545f415f414d4f554e544d6f6f6e77616c6b6572737761705632526f757465723a204558434553534956455f494e5055545f414d4f554e544d6f6f6e77616c6b65727377617056324c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472616e7366657246726f6d206661696c65645472616e7366657248656c7065723a3a736166655472616e736665724554483a20455448207472616e73666572206661696c65644d6f6f6e77616c6b6572737761705632526f757465723a2045585049524544004d6f6f6e77616c6b65727377617056324c6962726172793a20494e56414c49445f504154484d6f6f6e77616c6b6572737761705632526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e544d6f6f6e77616c6b65727377617056324c6962726172793a204944454e544943414c5f4144445245535345534d6f6f6e77616c6b6572737761705632526f757465723a20494e56414c49445f504154484d6f6f6e77616c6b6572737761705632526f757465723a20494e53554646494349454e545f425f414d4f554e544d6f6f6e77616c6b65727377617056324c6962726172793a20494e53554646494349454e545f414d4f554e544d6f6f6e77616c6b65727377617056324c6962726172793a20494e53554646494349454e545f4c49515549444954595472616e7366657248656c7065723a3a736166655472616e736665723a207472616e73666572206661696c6564a2646970667358221220dc512b59dfded45e4733d1f7237f74ab1ed108280619f81bee636453921a309664736f6c63430006060033",
  "immutableReferences": {
    "182": [
      {
        "length": 32,
        "start": 3005
      },
      {
        "length": 32,
        "start": 3220
      },
      {
        "length": 32,
        "start": 3603
      },
      {
        "length": 32,
        "start": 3660
      },
      {
        "length": 32,
        "start": 3975
      },
      {
        "length": 32,
        "start": 4449
      },
      {
        "length": 32,
        "start": 4838
      },
      {
        "length": 32,
        "start": 5203
      },
      {
        "length": 32,
        "start": 5574
      },
      {
        "length": 32,
        "start": 5875
      },
      {
        "length": 32,
        "start": 6379
      },
      {
        "length": 32,
        "start": 6420
      },
      {
        "length": 32,
        "start": 6468
      },
      {
        "length": 32,
        "start": 6833
      },
      {
        "length": 32,
        "start": 7181
      },
      {
        "length": 32,
        "start": 7942
      },
      {
        "length": 32,
        "start": 8304
      },
      {
        "length": 32,
        "start": 10475
      },
      {
        "length": 32,
        "start": 10542
      },
      {
        "length": 32,
        "start": 11593
      },
      {
        "length": 32,
        "start": 11767
      },
      {
        "length": 32,
        "start": 11895
      }
    ],
    "185": [
      {
        "length": 32,
        "start": 296
      },
      {
        "length": 32,
        "start": 2561
      },
      {
        "length": 32,
        "start": 2620
      },
      {
        "length": 32,
        "start": 2867
      },
      {
        "length": 32,
        "start": 3405
      },
      {
        "length": 32,
        "start": 4311
      },
      {
        "length": 32,
        "start": 4695
      },
      {
        "length": 32,
        "start": 5017
      },
      {
        "length": 32,
        "start": 5153
      },
      {
        "length": 32,
        "start": 5750
      },
      {
        "length": 32,
        "start": 6502
      },
      {
        "length": 32,
        "start": 7129
      },
      {
        "length": 32,
        "start": 7215
      },
      {
        "length": 32,
        "start": 7267
      },
      {
        "length": 32,
        "start": 7383
      },
      {
        "length": 32,
        "start": 7799
      },
      {
        "length": 32,
        "start": 8118
      },
      {
        "length": 32,
        "start": 8254
      }
    ]
  },
  "sourceMap": "348:12719:1:-:0;;;645:109;5:9:-1;2:2;;;27:1;24;17:12;2:2;645:109:1;;;;;;;;;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;645:109:1;;;;;;;-1:-1:-1;;;;;;707:18:1;;;;;;;;735:12;;;;;348:12719;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "348:12719:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;804:10;-1:-1:-1;;;;;818:4:1;804:18;;797:26;;;;348:12719;;12:1:-1;9;2:12;4905:645:1;;5:9:-1;2:2;;;27:1;24;17:12;2:2;4905:645:1;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;4905:645:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;12229:209;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12229:209:1;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;12229:209:1;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;10405:824;;5:9:-1;2:2;;;27:1;24;17:12;2:2;10405:824:1;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;10405:824:1;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;10405:824:1;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;10405:824:1;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;10405:824:1;;-1:-1:-1;10405:824:1;-1:-1:-1;;;;;;10405:824:1;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;10405:824:1;;;;;;;;;;;;;;;;;12865:200;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12865:200:1;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;12865:200:1;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;12865:200:1;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;12865:200:1;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;12865:200:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;12865:200:1;;-1:-1:-1;12865:200:1;;-1:-1:-1;;;;;12865:200:1:i;5555:663::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;5555:663:1;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;5555:663:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;7698:606::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;7698:606:1;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;7698:606:1;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;7698:606:1;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;7698:606:1;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;7698:606:1;;-1:-1:-1;7698:606:1;-1:-1:-1;;;;;;7698:606:1;;;;;;;;:::i;9598:802::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;9598:802:1;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;9598:802:1;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;9598:802:1;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;9598:802:1;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;9598:802:1;;-1:-1:-1;9598:802:1;-1:-1:-1;;;;;;9598:802:1;;;;;;;;:::i;8898:695::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;8898:695:1;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;8898:695:1;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;8898:695:1;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;8898:695:1;;-1:-1:-1;8898:695:1;-1:-1:-1;;;;;;8898:695:1;;;;;;;;:::i;8309:584::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;8309:584:1;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;8309:584:1;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;8309:584:1;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;8309:584:1;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;8309:584:1;;-1:-1:-1;8309:584:1;-1:-1:-1;;;;;;8309:584:1;;;;;;;;:::i;464:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;464:38:1;;;:::i;:::-;;;;-1:-1:-1;;;;;464:38:1;;;;;;;;;;;;;;12038:185;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12038:185:1;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;12038:185:1;;;;;;;;;;;;:::i;4029:871::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;4029:871:1;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;4029:871:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;417:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;417:41:1;;;:::i;12659:200::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12659:200:1;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;12659:200:1;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;12659:200:1;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;12659:200:1;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;12659:200:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;12659:200:1;;-1:-1:-1;12659:200:1;;-1:-1:-1;;;;;12659:200:1:i;6223:656::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;6223:656:1;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;6223:656:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;2318:723::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;2318:723:1;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;2318:723:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;3046:943;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;3046:943:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;11234:798::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;11234:798:1;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;11234:798:1;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;11234:798:1;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;11234:798:1;;-1:-1:-1;11234:798:1;-1:-1:-1;;;;;;11234:798:1;;;;;;;;:::i;4905:645::-;5127:16;5145:14;5108:8;570:15;558:8;:27;;550:71;;;;;-1:-1:-1;;;550:71:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;550:71:1;;;;;;;;;;;;;;;5198:188:::1;5227:5;5246:4;5264:9;5287:14;5315:12;5349:4;5368:8;5198:15;:188::i;:::-;5171:215:::0;;-1:-1:-1;5171:215:1;-1:-1:-1;5396:51:1::1;5424:5:::0;5431:2;5171:215;5396:27:::1;:51::i;:::-;5463:4;-1:-1:-1::0;;;;;5457:20:1::1;;5478:9;5457:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;5457:31:1;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;5457:31:1;;;;5498:45;5529:2;5533:9;5498:30;:45::i;:::-;4905:645:::0;;;;;;;;;;:::o;12229:209::-;12329:14;12362:69;12399:8;12409:9;12420:10;12362:36;:69::i;:::-;12355:76;12229:209;-1:-1:-1;;;;12229:209:1:o;10405:824::-;10598:21;10571:8;570:15;558:8;:27;;550:71;;;;;-1:-1:-1;;;550:71:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;550:71:1;;;;;;;;;;;;;;;-1:-1:-1;;;;;10668:4:1::1;10643:29;:4:::0;;-1:-1:-1;;10648:15:1;;10643:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;10643:21:1::1;-1:-1:-1::0;;;;;10643:29:1::1;;10635:78;;;;-1:-1:-1::0;;;10635:78:1::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10733:62;10771:7;10780:8;10790:4;;10733:62;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;10733:37:1::1;::::0;-1:-1:-1;;;10733:62:1:i:1;:::-;10723:72;;10844:12;10813:7;10838:1;10821:7;:14;:18;10813:27;;;;;;;;;;;;;;:43;;10805:106;;;;-1:-1:-1::0;;;10805:106:1::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10921:124;10953:4;;10958:1;10953:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;10953:7:1::1;10962:10;10974:58;11006:7;11015:4;;11020:1;11015:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;11015:7:1::1;11024:4;;11029:1;11024:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;11024:7:1::1;10974:31;:58::i;:::-;11034:7;11042:1;11034:10;;;;;;;;;;;;;;10921:31;:124::i;:::-;11055:35;11061:7;11070:4;;11055:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;11084:4:1::1;::::0;-1:-1:-1;11055:5:1::1;::::0;-1:-1:-1;;11055:35:1:i:1;:::-;11106:4;-1:-1:-1::0;;;;;11100:20:1::1;;11121:7;11146:1;11129:7;:14;:18;11121:27;;;;;;;;;;;;;;11100:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;11100:49:1;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;11100:49:1;;;;11159:63;11190:2;11194:7;11219:1;11202:7;:14;:18;11194:27;;;;;;;;;;;;;;11159:30;:63::i;:::-;10405:824:::0;;;;;;;;;:::o;12865:200::-;12956:21;12996:62;13033:7;13042:9;13053:4;12996:36;:62::i;:::-;12989:69;;12865:200;;;;;:::o;5555:663::-;5844:12;5858;5882;5897:56;5929:7;5938:6;5946;5897:31;:56::i;:::-;5882:71;;5963:10;5976;:33;;6000:9;5976:33;;;-1:-1:-1;;5976:33:1;6019:81;;;-1:-1:-1;;;6019:81:1;;6048:10;6019:81;;;;6068:4;6019:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5963:46;;-1:-1:-1;;;;;;6019:28:1;;;;;:81;;;;;-1:-1:-1;;6019:81:1;;;;;;;;-1:-1:-1;6019:28:1;:81;;;2:2:-1;;;;27:1;24;17:12;2:2;6019:81:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6019:81:1;;;;6131:80;6147:6;6155;6163:9;6174:10;6186;6198:2;6202:8;6131:15;:80::i;:::-;6110:101;;;;;;;;5555:663;;;;;;;;;;;;;;;;:::o;7698:606::-;7908:21;7889:8;570:15;558:8;:27;;550:71;;;;;-1:-1:-1;;;550:71:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;550:71:1;;;;;;;;;;;;;;;7951:62:::1;7989:7;7998:8;8008:4;;7951:62;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;7951:37:1::1;::::0;-1:-1:-1;;;7951:62:1:i:1;:::-;7941:72;;8062:12;8031:7;8056:1;8039:7;:14;:18;8031:27;;;;;;;;;;;;;;:43;;8023:106;;;;-1:-1:-1::0;;;8023:106:1::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8139:124;8171:4;;8176:1;8171:7;;;;;;8139:124;8273:24;8279:7;8288:4;;8273:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;8294:2:1;;-1:-1:-1;8273:5:1::1;::::0;-1:-1:-1;;8273:24:1:i:1;9598:802::-:0;9791:21;9764:8;570:15;558:8;:27;;550:71;;;;;-1:-1:-1;;;550:71:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;550:71:1;;;;;;;;;;;;;;;-1:-1:-1;;;;;9861:4:1::1;9836:29;:4:::0;;-1:-1:-1;;9841:15:1;;9836:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;9836:21:1::1;-1:-1:-1::0;;;;;9836:29:1::1;;9828:78;;;;-1:-1:-1::0;;;9828:78:1::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9926:62;9963:7;9972:9;9983:4;;9926:62;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;9926:36:1::1;::::0;-1:-1:-1;;;9926:62:1:i:1;:::-;9916:72;;10020:11;10006:7;10014:1;10006:10;;;;;;;;;;;;;;:25;;9998:84;;;;-1:-1:-1::0;;;9998:84:1::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8898:695:::0;9092:21;9065:8;570:15;558:8;:27;;550:71;;;;;-1:-1:-1;;;550:71:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;550:71:1;;;;;;;;;;;;;;;9148:4:::1;-1:-1:-1::0;;;;;9137:15:1::1;:4;;9142:1;9137:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;9137:7:1::1;-1:-1:-1::0;;;;;9137:15:1::1;;9129:64;;;;-1:-1:-1::0;;;9129:64:1::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9213:63;9251:7;9260:9;9271:4;;9213:63;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;9213:37:1::1;::::0;-1:-1:-1;;;9213:63:1:i:1;:::-;9203:73;;9325:12;9294:7;9319:1;9302:7;:14;:18;9294:27;;;;;;;;;;;;;;:43;;9286:106;;;;-1:-1:-1::0;;;9286:106:1::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9408:4;-1:-1:-1::0;;;;;9402:19:1::1;;9429:7;9437:1;9429:10;;;;;;;;;;;;;;9402:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;9402:40:1;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;9402:40:1;;;;;9465:4;-1:-1:-1::0;;;;;9459:20:1::1;;9480:58;9512:7;9521:4;;9526:1;9521:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;9521:7:1::1;9530:4;;9535:1;9530:7;;;;;;9480:58;9540:7;9548:1;9540:10;;;;;;;;;;;;;;9459:92;;;;;;;;;;;;;-1:-1:-1::0;;;;;9459:92:1::1;-1:-1:-1::0;;;;;9459:92:1::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;9459:92:1;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;9459:92:1;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;9459:92:1;9452:100:::1;;;;9562:24;9568:7;9577:4;;9562:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;9583:2:1;;-1:-1:-1;9562:5:1::1;::::0;-1:-1:-1;;9562:24:1:i:1;:::-;8898:695:::0;;;;;;;;:::o;8309:584::-;8519:21;8500:8;570:15;558:8;:27;;550:71;;;;;-1:-1:-1;;;550:71:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;550:71:1;;;;;;;;;;;;;;;8562:62:::1;8599:7;8608:9;8619:4;;8562:62;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;8562:36:1::1;::::0;-1:-1:-1;;;8562:62:1:i:1;:::-;8552:72;;8656:11;8642:7;8650:1;8642:10;;;;;;;;;;;;;;:25;;8634:84;;;;-1:-1:-1::0;;;8634:84:1::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;464:38:::0;;;:::o;12038:185::-;12127:12;12158:58;12188:7;12197:8;12207;12158:29;:58::i;4029:871::-;4267:12;4281;4248:8;570:15;558:8;:27;;550:71;;;;;-1:-1:-1;;;550:71:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;550:71:1;;;;;;;;;;;;;;;4305:12:::1;4320:56;4352:7;4361:6;4369;4320:31;:56::i;:::-;4386:63;::::0;;-1:-1:-1;;;4386:63:1;;4421:10:::1;4386:63;::::0;::::1;::::0;-1:-1:-1;;;;;4386:34:1;::::1;:63:::0;;;;;;;;;;;;;;4305:71;;-1:-1:-1;4386:34:1;;::::1;::::0;:63;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;4386:34:1;:63;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;4386:63:1;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;4386:63:1;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;4516:30:1::1;::::0;;-1:-1:-1;;;4516:30:1;;-1:-1:-1;;;;;4516:30:1;;::::1;;::::0;::::1;::::0;;;4486:12:::1;::::0;;;4516:26;;::::1;::::0;::::1;::::0;:30;;;;;;;;;;;4486:12;4516:26;:30;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;4516:30:1;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;4516:30:1;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;4516:30:1;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;4516:30:1;-1:-1:-1;4557:14:1::1;4576:50;4611:6:::0;4619;4576:34:::1;:50::i;:::-;4556:70;;;4667:6;-1:-1:-1::0;;;;;4657:16:1::1;:6;-1:-1:-1::0;;;;;4657:16:1::1;;:58;;4698:7;4707;4657:58;;;4677:7;4686;4657:58;4636:79:::0;;-1:-1:-1;4636:79:1;-1:-1:-1;4733:21:1;;::::1;;4725:79;;;;-1:-1:-1::0;;;4725:79:1::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4833:10;4822:7;:21;;4814:79;;;;-1:-1:-1::0;;;4814:79:1::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;631:1;;;;4029:871:::0;;;;;;;;;;;:::o;417:41::-;;;:::o;12659:200::-;12750:21;12790:62;12828:7;12837:8;12847:4;12790:37;:62::i;6223:656::-;6496:16;6514:14;6540:12;6555:53;6587:7;6596:5;6603:4;6555:31;:53::i;:::-;6540:68;;6618:10;6631;:33;;6655:9;6631:33;;;-1:-1:-1;;6631:33:1;6674:81;;;-1:-1:-1;;;6674:81:1;;6703:10;6674:81;;;;6723:4;6674:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6618:46;;-1:-1:-1;;;;;;6674:28:1;;;;;:81;;;;;-1:-1:-1;;6674:81:1;;;;;;;;-1:-1:-1;6674:28:1;:81;;;2:2:-1;;;;27:1;24;17:12;2:2;6674:81:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6674:81:1;;;;6792:80;6811:5;6818:9;6829:14;6845:12;6859:2;6863:8;6792:18;:80::i;:::-;6765:107;;;;-1:-1:-1;6223:656:1;-1:-1:-1;;;;;;;;;;;;;6223:656:1:o;2318:723::-;2589:12;2603;2617:14;2570:8;570:15;558:8;:27;;550:71;;;;;-1:-1:-1;;;550:71:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;550:71:1;;;;;;;;;;;;;;;2664:85:::1;2678:6;2686;2694:14;2710;2726:10;2738;2664:13;:85::i;:::-;2643:106:::0;;-1:-1:-1;2643:106:1;-1:-1:-1;2759:12:1::1;2774:56;2806:7;2815:6:::0;2823;2774:31:::1;:56::i;:::-;2759:71;;2840:66;2872:6;2880:10;2892:4;2898:7;2840:31;:66::i;:::-;2916;2948:6;2956:10;2968:4;2974:7;2916:31;:66::i;:::-;3020:4;-1:-1:-1::0;;;;;3004:26:1::1;;3031:2;3004:30;;;;;;;;;;;;;-1:-1:-1::0;;;;;3004:30:1::1;-1:-1:-1::0;;;;;3004:30:1::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;3004:30:1;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;3004:30:1;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;3004:30:1;2318:723;;;;-1:-1:-1;3004:30:1;;-1:-1:-1;2318:723:1;;-1:-1:-1;;;;;;;;;2318:723:1:o;3046:943::-;3284:16;3302:14;3318;3265:8;570:15;558:8;:27;;550:71;;;;;-1:-1:-1;;;550:71:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;550:71:1;;;;;;;;;;;;;;;3371:169:::1;3398:5;3417:4;3435:18;3467:9;3490:14;3518:12;3371:13;:169::i;:::-;3344:196:::0;;-1:-1:-1;3344:196:1;-1:-1:-1;3550:12:1::1;3565:53;3597:7;3606:5:::0;3613:4:::1;3565:31;:53::i;:::-;3550:68;;3628:69;3660:5;3667:10;3679:4;3685:11;3628:31;:69::i;:::-;3713:4;-1:-1:-1::0;;;;;3707:19:1::1;;3734:9;3707:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;3707:39:1;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;3707:39:1;;;;;3769:4;-1:-1:-1::0;;;;;3763:20:1::1;;3784:4;3790:9;3763:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;3763:37:1::1;-1:-1:-1::0;;;;;3763:37:1::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;3763:37:1;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;3763:37:1;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;3763:37:1;3756:45:::1;;;;3839:4;-1:-1:-1::0;;;;;3823:26:1::1;;3850:2;3823:30;;;;;;;;;;;;;-1:-1:-1::0;;;;;3823:30:1::1;-1:-1:-1::0;;;;;3823:30:1::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;3823:30:1;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;3823:30:1;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;3823:30:1;;-1:-1:-1;3867:9:1::1;:21:::0;-1:-1:-1;3863:92:1::1;;;3890:65;3921:10;3945:9;3933;:21;3890:30;:65::i;:::-;631:1;3046:943:::0;;;;;;;;;;;:::o;11234:798::-;11425:21;11398:8;570:15;558:8;:27;;550:71;;;;;-1:-1:-1;;;550:71:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;550:71:1;;;;;;;;;;;;;;;11481:4:::1;-1:-1:-1::0;;;;;11470:15:1::1;:4;;11475:1;11470:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;11470:7:1::1;-1:-1:-1::0;;;;;11470:15:1::1;;11462:64;;;;-1:-1:-1::0;;;11462:64:1::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11546:62;11583:7;11592:9;11603:4;;11546:62;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;11546:36:1::1;::::0;-1:-1:-1;;;11546:62:1:i:1;:::-;11536:72;;11640:9;11626:7;11634:1;11626:10;;;;;;;;;;;;;;:23;;11618:82;;;;-1:-1:-1::0;;;11618:82:1::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11716:4;-1:-1:-1::0;;;;;11710:19:1::1;;11737:7;11745:1;11737:10;;;;;;;;;;;;;;11710:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;11710:40:1;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;11710:40:1;;;;;11773:4;-1:-1:-1::0;;;;;11767:20:1::1;;11788:58;11820:7;11829:4;;11834:1;11829:7;;;;;;11788:58;11848:7;11856:1;11848:10;;;;;;;;;;;;;;11767:92;;;;;;;;;;;;;-1:-1:-1::0;;;;;11767:92:1::1;-1:-1:-1::0;;;;;11767:92:1::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;11767:92:1;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;11767:92:1;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;11767:92:1;11760:100:::1;;;;11870:24;11876:7;11885:4;;11870:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;11891:2:1;;-1:-1:-1;11870:5:1::1;::::0;-1:-1:-1;;11870:24:1:i:1;:::-;11920:7;11928:1;11920:10;;;;;;;;;;;;;;11908:9;:22;11904:94;;;11932:66;11963:10;11987:7;11995:1;11987:10;;;;;;;;;;;;;;11975:9;:22;11932:30;:66::i;652:438:22:-:0;878:45;;;-1:-1:-1;;;;;878:45:22;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;878:45:22;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;867:57:22;;;;832:12;;846:17;;867:10;;;;878:45;867:57;;;25:18:-1;867:57:22;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;867:57:22;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;831:93:22;;;;955:7;:57;;;;-1:-1:-1;967:11:22;;:16;;:44;;;998:4;987:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;987:24:22;967:44;934:149;;;;-1:-1:-1;;;934:149:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;652:438;;;;;:::o;1588:214::-;1700:12;;;1660;1700;;;;;;;;;-1:-1:-1;;;;;1678:7:22;;;1693:5;;1678:35;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1678:35:22;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;1659:54:22;;;1731:7;1723:72;;;;-1:-1:-1;;;1723:72:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1588:214;;;:::o;2216:524:10:-;2309:14;2354:1;2343:8;:12;2335:75;;;;-1:-1:-1;;;2335:75:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2440:1;2428:9;:13;:31;;;;;2458:1;2445:10;:14;2428:31;2420:91;;;;-1:-1:-1;;;2420:91:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2521:20;2544:17;:8;2557:3;2544:17;:12;:17;:::i;:::-;2521:40;-1:-1:-1;2571:14:10;2588:31;2521:40;2608:10;2588:31;:19;:31;:::i;:::-;2571:48;-1:-1:-1;2629:16:10;2648:40;2672:15;2648:19;:9;2662:4;2648:19;:13;:19;:::i;:::-;:23;:40;:23;:40;:::i;:::-;2629:59;;2722:11;2710:9;:23;;;;;;;2216:524;-1:-1:-1;;;;;;;2216:524:10:o;3417:510::-;3518:21;3574:1;3559:4;:11;:16;;3551:66;;;;-1:-1:-1;;;3551:66:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3648:4;:11;3637:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;3637:23:10;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;3637:23:10;;3627:33;;3683:8;3670:7;3678:1;3670:10;;;;;;;;;;;;;:21;;;;;3706:6;3701:220;3732:1;3718:4;:11;:15;3714:1;:19;3701:220;;;3755:14;3771:15;3790:42;3802:7;3811:4;3816:1;3811:7;;;;;;;;;;;;;;3820:4;3825:1;3829;3825:5;3820:11;;;;;;;;;;;;;;3790;:42::i;:::-;3754:78;;;;3863:47;3876:7;3884:1;3876:10;;;;;;;;;;;;;;3888:9;3899:10;3863:12;:47::i;:::-;3846:7;3854:1;3858;3854:5;3846:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;3735:3:10;;3701:220;;;;3417:510;;;;;:::o;743:470::-;832:12;857:14;873;891:26;902:6;910;891:10;:26::i;:::-;1051:32;;;-1:-1:-1;;1051:32:10;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;1051:32:10;;;;;1041:43;;;;;;-1:-1:-1;;;;;;957:246:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;957:246:10;;;;;;;947:257;;;;;;;;;743:470;-1:-1:-1;;;;;743:470:10:o;1096:486:22:-;1360:51;;;-1:-1:-1;;;;;1360:51:22;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1360:51:22;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;1349:63:22;;;;1314:12;;1328:17;;1349:10;;;;1360:51;1349:63;;;25:18:-1;1349:63:22;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1349:63:22;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;1313:99:22;;;;1443:7;:57;;;;-1:-1:-1;1455:11:22;;:16;;:44;;;1486:4;1475:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1475:24:22;1455:44;1422:153;;;;-1:-1:-1;;;1422:153:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1096:486;;;;;;:::o;6986:707:1:-;7083:6;7078:609;7109:1;7095:4;:11;:15;7091:1;:19;7078:609;;;7132:13;7147:14;7166:4;7171:1;7166:7;;;;;;;;;;;;;;7175:4;7180:1;7184;7180:5;7175:11;;;;;;;;;;;;;;7131:56;;;;7202:14;7221:49;7256:5;7263:6;7221:34;:49::i;:::-;7201:69;;;7284:14;7301:7;7309:1;7313;7309:5;7301:14;;;;;;;;;;;;;;7284:31;;7330:15;7347;7375:6;-1:-1:-1;;;;;7366:15:1;:5;-1:-1:-1;;;;;7366:15:1;;:61;;7408:9;7424:1;7366:61;;;7390:1;7394:9;7366:61;7329:98;;;;7441:10;7472:1;7458:4;:11;:15;7454:1;:19;:89;;7540:3;7454:89;;;7476:61;7508:7;7517:6;7525:4;7530:1;7534;7530:5;7525:11;;;;;;;;;;;;;;7476:31;:61::i;:::-;7441:102;;7573:55;7605:7;7614:5;7621:6;7573:31;:55::i;:::-;-1:-1:-1;;;;;7557:77:1;;7635:10;7647;7659:2;7673:1;7663:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;7663:12:1;87:42:-1;143:17;;-1:-1;7663:12:1;;7557:119;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7557:119:1;-1:-1:-1;;;;;7557:119:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;7557:119:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;7557:119:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;7112:3:1;;;;;-1:-1:-1;7078:609:1;;-1:-1:-1;;;;;;;;7078:609:1;;;6986:707;;;:::o;4005:531:10:-;4106:21;4162:1;4147:4;:11;:16;;4139:66;;;;-1:-1:-1;;;4139:66:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4236:4;:11;4225:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;4225:23:10;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;4225:23:10;;4215:33;;4288:9;4258:7;4283:1;4266:7;:14;:18;4258:27;;;;;;;;;;;;;;;;;:39;4321:11;;-1:-1:-1;;4321:15:10;4307:223;4338:5;;4307:223;;4365:14;4381:15;4400:42;4412:7;4421:4;4430:1;4426;:5;4421:11;;;;;;;;;;;;;;4434:4;4439:1;4434:7;;;;;;;4400:42;4364:78;;;;4473:46;4485:7;4493:1;4485:10;;;;;;;;;;;;;;4497:9;4508:10;4473:11;:46::i;:::-;4456:7;4468:1;4464;:5;4456:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;4345:3:10;4307:223;;1766:331;1848:12;1890:1;1880:7;:11;1872:68;;;;-1:-1:-1;;;1872:68:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1969:1;1958:8;:12;:28;;;;;1985:1;1974:8;:12;1958:28;1950:88;;;;-1:-1:-1;;;1950:88:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2082:8;2058:21;:7;2070:8;2058:21;:11;:21;:::i;:::-;:32;;;;;;;1766:331;-1:-1:-1;;;;1766:331:10:o;295:359::-;370:14;386;430:6;-1:-1:-1;;;;;420:16:10;:6;-1:-1:-1;;;;;420:16:10;;;412:73;;;;-1:-1:-1;;;412:73:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;523:6;-1:-1:-1;;;;;514:15:10;:6;-1:-1:-1;;;;;514:15:10;;:53;;552:6;560;514:53;;;533:6;541;514:53;495:72;;-1:-1:-1;495:72:10;-1:-1:-1;;;;;;585:20:10;;577:70;;;;-1:-1:-1;;;577:70:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;295:359;;;;;:::o;922:1391:1:-;1217:51;;;-1:-1:-1;;;1217:51:1;;-1:-1:-1;;;;;1217:51:1;;;;;;;;;;;;;;;;1124:12;;;;;;1236:7;1217:35;;;;;;:51;;;;;;;;;;;;;;;:35;:51;;;2:2:-1;;;;27:1;24;17:12;2:2;1217:51:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1217:51:1;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1217:51:1;-1:-1:-1;;;;;1217:65:1;;1213:150;;;1298:54;;;-1:-1:-1;;;1298:54:1;;-1:-1:-1;;;;;1298:54:1;;;;;;;;;;;;;;;;1317:7;1298:38;;;;;;:54;;;;;;;;;;;;;;;-1:-1:-1;1298:38:1;:54;;;2:2:-1;;;;27:1;24;17:12;2:2;1298:54:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1298:54:1;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;1213:150:1;1373:13;1388;1405:60;1441:7;1450:6;1458;1405:35;:60::i;:::-;1372:93;;;;1479:8;1491:1;1479:13;:30;;;;-1:-1:-1;1496:13:1;;1479:30;1475:832;;;1547:14;;-1:-1:-1;1563:14:1;;-1:-1:-1;1475:832:1;;;1609:19;1631:65;1661:14;1677:8;1687;1631:29;:65::i;:::-;1609:87;;1732:14;1714;:32;1710:587;;1792:10;1774:14;:28;;1766:86;;;;-1:-1:-1;;;1766:86:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1892:14;;-1:-1:-1;1908:14:1;-1:-1:-1;1908:14:1;1710:587;;;1962:19;1984:65;2014:14;2030:8;2040;1984:29;:65::i;:::-;1962:87;;2092:14;2074;:32;;2067:40;;;;2151:10;2133:14;:28;;2125:86;;;;-1:-1:-1;;;2125:86:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2251:14;-1:-1:-1;2267:14:1;;-1:-1:-1;1710:587:1;1475:832;;922:1391;;;;;;;;;;;:::o;419:140:13:-;471:6;497;;;:30;;-1:-1:-1;;512:5:13;;;526:1;521;512:5;521:1;507:15;;;;;:20;497:30;489:63;;;;;-1:-1:-1;;;489:63:13;;;;;;;;;;;;-1:-1:-1;;;489:63:13;;;;;;;;;;;;;;154:126;237:5;;;232:16;;;;224:49;;;;;-1:-1:-1;;;224:49:13;;;;;;;;;;;;-1:-1:-1;;;224:49:13;;;;;;;;;;;;;;1268:388:10;1361:13;1376;1402:14;1421:26;1432:6;1440;1421:10;:26::i;:::-;1401:46;;;1458:13;1473;1507:32;1515:7;1524:6;1532;1507:7;:32::i;:::-;-1:-1:-1;;;;;1491:61:10;;:63;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;1491:63:10;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1491:63:10;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1491:63:10;;;;;;;1457:97;;;;;-1:-1:-1;1457:97:10;;-1:-1:-1;;;;;;1587:16:10;;;;;;;:62;;1630:8;1640;1587:62;;;1607:8;1617;1587:62;1564:85;;;;-1:-1:-1;1268:388:10;-1:-1:-1;;;;;;;1268:388:10:o;2858:480::-;2951:13;2996:1;2984:9;:13;2976:77;;;;-1:-1:-1;;;2976:77:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3083:1;3071:9;:13;:31;;;;;3101:1;3088:10;:14;3071:31;3063:91;;;;-1:-1:-1;;;3063:91:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3164:14;3181:34;3210:4;3181:24;:9;3195;3181:24;:13;:24;:::i;:::-;:28;:34;:28;:34;:::i;:::-;3164:51;-1:-1:-1;3225:16:10;3244:34;3274:3;3244:25;:10;3259:9;3244:25;:14;:25;:::i;:34::-;3225:53;;3299:32;3329:1;3312:11;3300:9;:23;;;;;;;3299:32;:29;:32;:::i;:::-;3288:43;2858:480;-1:-1:-1;;;;;;2858:480:10:o;286:127:13:-;369:5;;;364:16;;;;356:50;;;;;-1:-1:-1;;;356:50:13;;;;;;;;;;;;-1:-1:-1;;;356:50:13;;;;;;;;;;;;;",
  "source": "pragma solidity =0.6.6;\n\nimport 'moonwalkerswap-v2-core/contracts/interfaces/IMoonwalkerFactory.sol';\nimport 'moonwalkerswap-libraries/contracts/libraries/TransferHelper.sol';\n\nimport './libraries/MoonwalkerswapV2Library.sol';\nimport './interfaces/IMoonwalkerswapV2Router01.sol';\nimport './interfaces/IERC20.sol';\nimport './interfaces/IWETH.sol';\n\ncontract MoonwalkerswapV2Router01 is IMoonwalkerswapV2Router01 {\n    address public immutable override factory;\n    address public immutable override WETH;\n\n    modifier ensure(uint deadline) {\n        require(deadline >= block.timestamp, 'MoonwalkerswapV2Router: EXPIRED');\n        _;\n    }\n\n    constructor(address _factory, address _WETH) public {\n        factory = _factory;\n        WETH = _WETH;\n    }\n\n    receive() external payable {\n        assert(msg.sender == WETH); // only accept ETH via fallback from the WETH contract\n    }\n\n    // **** ADD LIQUIDITY ****\n    function _addLiquidity(\n        address tokenA,\n        address tokenB,\n        uint amountADesired,\n        uint amountBDesired,\n        uint amountAMin,\n        uint amountBMin\n    ) private returns (uint amountA, uint amountB) {\n        // create the pair if it doesn't exist yet\n        if (IMoonwalkerFactory(factory).getPair(tokenA, tokenB) == address(0)) {\n            IMoonwalkerFactory(factory).createPair(tokenA, tokenB);\n        }\n        (uint reserveA, uint reserveB) = MoonwalkerswapV2Library.getReserves(factory, tokenA, tokenB);\n        if (reserveA == 0 && reserveB == 0) {\n            (amountA, amountB) = (amountADesired, amountBDesired);\n        } else {\n            uint amountBOptimal = MoonwalkerswapV2Library.quote(amountADesired, reserveA, reserveB);\n            if (amountBOptimal <= amountBDesired) {\n                require(amountBOptimal >= amountBMin, 'MoonwalkerswapV2Router: INSUFFICIENT_B_AMOUNT');\n                (amountA, amountB) = (amountADesired, amountBOptimal);\n            } else {\n                uint amountAOptimal = MoonwalkerswapV2Library.quote(amountBDesired, reserveB, reserveA);\n                assert(amountAOptimal <= amountADesired);\n                require(amountAOptimal >= amountAMin, 'MoonwalkerswapV2Router: INSUFFICIENT_A_AMOUNT');\n                (amountA, amountB) = (amountAOptimal, amountBDesired);\n            }\n        }\n    }\n    function addLiquidity(\n        address tokenA,\n        address tokenB,\n        uint amountADesired,\n        uint amountBDesired,\n        uint amountAMin,\n        uint amountBMin,\n        address to,\n        uint deadline\n    ) external override ensure(deadline) returns (uint amountA, uint amountB, uint liquidity) {\n        (amountA, amountB) = _addLiquidity(tokenA, tokenB, amountADesired, amountBDesired, amountAMin, amountBMin);\n        address pair = MoonwalkerswapV2Library.pairFor(factory, tokenA, tokenB);\n        TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA);\n        TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB);\n        liquidity = IMoonwalkerPair(pair).mint(to);\n    }\n    function addLiquidityETH(\n        address token,\n        uint amountTokenDesired,\n        uint amountTokenMin,\n        uint amountETHMin,\n        address to,\n        uint deadline\n    ) external override payable ensure(deadline) returns (uint amountToken, uint amountETH, uint liquidity) {\n        (amountToken, amountETH) = _addLiquidity(\n            token,\n            WETH,\n            amountTokenDesired,\n            msg.value,\n            amountTokenMin,\n            amountETHMin\n        );\n        address pair = MoonwalkerswapV2Library.pairFor(factory, token, WETH);\n        TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken);\n        IWETH(WETH).deposit{value: amountETH}();\n        assert(IWETH(WETH).transfer(pair, amountETH));\n        liquidity = IMoonwalkerPair(pair).mint(to);\n        if (msg.value > amountETH) TransferHelper.safeTransferETH(msg.sender, msg.value - amountETH); // refund dust eth, if any\n    }\n\n    // **** REMOVE LIQUIDITY ****\n    function removeLiquidity(\n        address tokenA,\n        address tokenB,\n        uint liquidity,\n        uint amountAMin,\n        uint amountBMin,\n        address to,\n        uint deadline\n    ) public override ensure(deadline) returns (uint amountA, uint amountB) {\n        address pair = MoonwalkerswapV2Library.pairFor(factory, tokenA, tokenB);\n        IMoonwalkerPair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair\n        (uint amount0, uint amount1) = IMoonwalkerPair(pair).burn(to);\n        (address token0,) = MoonwalkerswapV2Library.sortTokens(tokenA, tokenB);\n        (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0);\n        require(amountA >= amountAMin, 'MoonwalkerswapV2Router: INSUFFICIENT_A_AMOUNT');\n        require(amountB >= amountBMin, 'MoonwalkerswapV2Router: INSUFFICIENT_B_AMOUNT');\n    }\n    function removeLiquidityETH(\n        address token,\n        uint liquidity,\n        uint amountTokenMin,\n        uint amountETHMin,\n        address to,\n        uint deadline\n    ) public override ensure(deadline) returns (uint amountToken, uint amountETH) {\n        (amountToken, amountETH) = removeLiquidity(\n            token,\n            WETH,\n            liquidity,\n            amountTokenMin,\n            amountETHMin,\n            address(this),\n            deadline\n        );\n        TransferHelper.safeTransfer(token, to, amountToken);\n        IWETH(WETH).withdraw(amountETH);\n        TransferHelper.safeTransferETH(to, amountETH);\n    }\n    function removeLiquidityWithPermit(\n        address tokenA,\n        address tokenB,\n        uint liquidity,\n        uint amountAMin,\n        uint amountBMin,\n        address to,\n        uint deadline,\n        bool approveMax, uint8 v, bytes32 r, bytes32 s\n    ) external override returns (uint amountA, uint amountB) {\n        address pair = MoonwalkerswapV2Library.pairFor(factory, tokenA, tokenB);\n        uint value = approveMax ? uint(-1) : liquidity;\n        IMoonwalkerPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);\n        (amountA, amountB) = removeLiquidity(tokenA, tokenB, liquidity, amountAMin, amountBMin, to, deadline);\n    }\n    function removeLiquidityETHWithPermit(\n        address token,\n        uint liquidity,\n        uint amountTokenMin,\n        uint amountETHMin,\n        address to,\n        uint deadline,\n        bool approveMax, uint8 v, bytes32 r, bytes32 s\n    ) external override returns (uint amountToken, uint amountETH) {\n        address pair = MoonwalkerswapV2Library.pairFor(factory, token, WETH);\n        uint value = approveMax ? uint(-1) : liquidity;\n        IMoonwalkerPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);\n        (amountToken, amountETH) = removeLiquidityETH(token, liquidity, amountTokenMin, amountETHMin, to, deadline);\n    }\n\n    // **** SWAP ****\n    // requires the initial amount to have already been sent to the first pair\n    function _swap(uint[] memory amounts, address[] memory path, address _to) private {\n        for (uint i; i < path.length - 1; i++) {\n            (address input, address output) = (path[i], path[i + 1]);\n            (address token0,) = MoonwalkerswapV2Library.sortTokens(input, output);\n            uint amountOut = amounts[i + 1];\n            (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOut) : (amountOut, uint(0));\n            address to = i < path.length - 2 ? MoonwalkerswapV2Library.pairFor(factory, output, path[i + 2]) : _to;\n            IMoonwalkerPair(MoonwalkerswapV2Library.pairFor(factory, input, output)).swap(amount0Out, amount1Out, to, new bytes(0));\n        }\n    }\n    function swapExactTokensForTokens(\n        uint amountIn,\n        uint amountOutMin,\n        address[] calldata path,\n        address to,\n        uint deadline\n    ) external override ensure(deadline) returns (uint[] memory amounts) {\n        amounts = MoonwalkerswapV2Library.getAmountsOut(factory, amountIn, path);\n        require(amounts[amounts.length - 1] >= amountOutMin, 'MoonwalkerswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT');\n        TransferHelper.safeTransferFrom(path[0], msg.sender, MoonwalkerswapV2Library.pairFor(factory, path[0], path[1]), amounts[0]);\n        _swap(amounts, path, to);\n    }\n    function swapTokensForExactTokens(\n        uint amountOut,\n        uint amountInMax,\n        address[] calldata path,\n        address to,\n        uint deadline\n    ) external override ensure(deadline) returns (uint[] memory amounts) {\n        amounts = MoonwalkerswapV2Library.getAmountsIn(factory, amountOut, path);\n        require(amounts[0] <= amountInMax, 'MoonwalkerswapV2Router: EXCESSIVE_INPUT_AMOUNT');\n        TransferHelper.safeTransferFrom(path[0], msg.sender, MoonwalkerswapV2Library.pairFor(factory, path[0], path[1]), amounts[0]);\n        _swap(amounts, path, to);\n    }\n    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)\n        external\n        override\n        payable\n        ensure(deadline)\n        returns (uint[] memory amounts)\n    {\n        require(path[0] == WETH, 'MoonwalkerswapV2Router: INVALID_PATH');\n        amounts = MoonwalkerswapV2Library.getAmountsOut(factory, msg.value, path);\n        require(amounts[amounts.length - 1] >= amountOutMin, 'MoonwalkerswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT');\n        IWETH(WETH).deposit{value: amounts[0]}();\n        assert(IWETH(WETH).transfer(MoonwalkerswapV2Library.pairFor(factory, path[0], path[1]), amounts[0]));\n        _swap(amounts, path, to);\n    }\n    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)\n        external\n        override\n        ensure(deadline)\n        returns (uint[] memory amounts)\n    {\n        require(path[path.length - 1] == WETH, 'MoonwalkerswapV2Router: INVALID_PATH');\n        amounts = MoonwalkerswapV2Library.getAmountsIn(factory, amountOut, path);\n        require(amounts[0] <= amountInMax, 'MoonwalkerswapV2Router: EXCESSIVE_INPUT_AMOUNT');\n        TransferHelper.safeTransferFrom(path[0], msg.sender, MoonwalkerswapV2Library.pairFor(factory, path[0], path[1]), amounts[0]);\n        _swap(amounts, path, address(this));\n        IWETH(WETH).withdraw(amounts[amounts.length - 1]);\n        TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]);\n    }\n    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)\n        external\n        override\n        ensure(deadline)\n        returns (uint[] memory amounts)\n    {\n        require(path[path.length - 1] == WETH, 'MoonwalkerswapV2Router: INVALID_PATH');\n        amounts = MoonwalkerswapV2Library.getAmountsOut(factory, amountIn, path);\n        require(amounts[amounts.length - 1] >= amountOutMin, 'MoonwalkerswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT');\n        TransferHelper.safeTransferFrom(path[0], msg.sender, MoonwalkerswapV2Library.pairFor(factory, path[0], path[1]), amounts[0]);\n        _swap(amounts, path, address(this));\n        IWETH(WETH).withdraw(amounts[amounts.length - 1]);\n        TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]);\n    }\n    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)\n        external\n        override\n        payable\n        ensure(deadline)\n        returns (uint[] memory amounts)\n    {\n        require(path[0] == WETH, 'MoonwalkerswapV2Router: INVALID_PATH');\n        amounts = MoonwalkerswapV2Library.getAmountsIn(factory, amountOut, path);\n        require(amounts[0] <= msg.value, 'MoonwalkerswapV2Router: EXCESSIVE_INPUT_AMOUNT');\n        IWETH(WETH).deposit{value: amounts[0]}();\n        assert(IWETH(WETH).transfer(MoonwalkerswapV2Library.pairFor(factory, path[0], path[1]), amounts[0]));\n        _swap(amounts, path, to);\n        if (msg.value > amounts[0]) TransferHelper.safeTransferETH(msg.sender, msg.value - amounts[0]); // refund dust eth, if any\n    }\n\n    function quote(uint amountA, uint reserveA, uint reserveB) public pure override returns (uint amountB) {\n        return MoonwalkerswapV2Library.quote(amountA, reserveA, reserveB);\n    }\n\n    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) public pure override returns (uint amountOut) {\n        return MoonwalkerswapV2Library.getAmountOut(amountIn, reserveIn, reserveOut);\n    }\n\n    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) public pure override returns (uint amountIn) {\n        return MoonwalkerswapV2Library.getAmountOut(amountOut, reserveIn, reserveOut);\n    }\n\n    function getAmountsOut(uint amountIn, address[] memory path) public view override returns (uint[] memory amounts) {\n        return MoonwalkerswapV2Library.getAmountsOut(factory, amountIn, path);\n    }\n\n    function getAmountsIn(uint amountOut, address[] memory path) public view override returns (uint[] memory amounts) {\n        return MoonwalkerswapV2Library.getAmountsIn(factory, amountOut, path);\n    }\n}\n",
  "sourcePath": "/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/Moonwalkerswap-v2-periphery/contracts/MoonwalkerswapV2Router01.sol",
  "ast": {
    "absolutePath": "/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/Moonwalkerswap-v2-periphery/contracts/MoonwalkerswapV2Router01.sol",
    "exportedSymbols": {
      "MoonwalkerswapV2Router01": [
        1627
      ]
    },
    "id": 1628,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 171,
        "literals": [
          "solidity",
          "=",
          "0.6",
          ".6"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:1"
      },
      {
        "absolutePath": "moonwalkerswap-v2-core/contracts/interfaces/IMoonwalkerFactory.sol",
        "file": "moonwalkerswap-v2-core/contracts/interfaces/IMoonwalkerFactory.sol",
        "id": 172,
        "nodeType": "ImportDirective",
        "scope": 1628,
        "sourceUnit": 8303,
        "src": "25:76:1",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "moonwalkerswap-libraries/contracts/libraries/TransferHelper.sol",
        "file": "moonwalkerswap-libraries/contracts/libraries/TransferHelper.sol",
        "id": 173,
        "nodeType": "ImportDirective",
        "scope": 1628,
        "sourceUnit": 8240,
        "src": "102:73:1",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/Moonwalkerswap-v2-periphery/contracts/libraries/MoonwalkerswapV2Library.sol",
        "file": "./libraries/MoonwalkerswapV2Library.sol",
        "id": 174,
        "nodeType": "ImportDirective",
        "scope": 1628,
        "sourceUnit": 4720,
        "src": "177:49:1",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/Moonwalkerswap-v2-periphery/contracts/interfaces/IMoonwalkerswapV2Router01.sol",
        "file": "./interfaces/IMoonwalkerswapV2Router01.sol",
        "id": 175,
        "nodeType": "ImportDirective",
        "scope": 1628,
        "sourceUnit": 4074,
        "src": "227:52:1",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/Moonwalkerswap-v2-periphery/contracts/interfaces/IERC20.sol",
        "file": "./interfaces/IERC20.sol",
        "id": 176,
        "nodeType": "ImportDirective",
        "scope": 1628,
        "sourceUnit": 3750,
        "src": "280:33:1",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/Moonwalkerswap-v2-periphery/contracts/interfaces/IWETH.sol",
        "file": "./interfaces/IWETH.sol",
        "id": 177,
        "nodeType": "ImportDirective",
        "scope": 1628,
        "sourceUnit": 4182,
        "src": "314:32:1",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 178,
              "name": "IMoonwalkerswapV2Router01",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 4073,
              "src": "385:25:1",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IMoonwalkerswapV2Router01_$4073",
                "typeString": "contract IMoonwalkerswapV2Router01"
              }
            },
            "id": 179,
            "nodeType": "InheritanceSpecifier",
            "src": "385:25:1"
          }
        ],
        "contractDependencies": [
          4073
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 1627,
        "linearizedBaseContracts": [
          1627,
          4073
        ],
        "name": "MoonwalkerswapV2Router01",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "baseFunctions": [
              3772
            ],
            "constant": false,
            "functionSelector": "c45a0155",
            "id": 182,
            "mutability": "immutable",
            "name": "factory",
            "nodeType": "VariableDeclaration",
            "overrides": {
              "id": 181,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "442:8:1"
            },
            "scope": 1627,
            "src": "417:41:1",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 180,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "417:7:1",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              3777
            ],
            "constant": false,
            "functionSelector": "ad5c4648",
            "id": 185,
            "mutability": "immutable",
            "name": "WETH",
            "nodeType": "VariableDeclaration",
            "overrides": {
              "id": 184,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "489:8:1"
            },
            "scope": 1627,
            "src": "464:38:1",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 183,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "464:7:1",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 198,
              "nodeType": "Block",
              "src": "540:99:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 193,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 190,
                          "name": "deadline",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 187,
                          "src": "558:8:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 191,
                            "name": "block",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -4,
                            "src": "570:5:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_block",
                              "typeString": "block"
                            }
                          },
                          "id": 192,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "timestamp",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "570:15:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "558:27:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4d6f6f6e77616c6b6572737761705632526f757465723a2045585049524544",
                        "id": 194,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "587:33:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_140ff281f276813c08b6ee05ec93db8d2ad7aacaf48fd0b61a8a0dd439b5ae27",
                          "typeString": "literal_string \"MoonwalkerswapV2Router: EXPIRED\""
                        },
                        "value": "MoonwalkerswapV2Router: EXPIRED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_140ff281f276813c08b6ee05ec93db8d2ad7aacaf48fd0b61a8a0dd439b5ae27",
                          "typeString": "literal_string \"MoonwalkerswapV2Router: EXPIRED\""
                        }
                      ],
                      "id": 189,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "550:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 195,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "550:71:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 196,
                  "nodeType": "ExpressionStatement",
                  "src": "550:71:1"
                },
                {
                  "id": 197,
                  "nodeType": "PlaceholderStatement",
                  "src": "631:1:1"
                }
              ]
            },
            "documentation": null,
            "id": 199,
            "name": "ensure",
            "nodeType": "ModifierDefinition",
            "overrides": null,
            "parameters": {
              "id": 188,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 187,
                  "mutability": "mutable",
                  "name": "deadline",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 199,
                  "src": "525:13:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 186,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "525:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "524:15:1"
            },
            "src": "509:130:1",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 214,
              "nodeType": "Block",
              "src": "697:57:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 208,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 206,
                      "name": "factory",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 182,
                      "src": "707:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 207,
                      "name": "_factory",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 201,
                      "src": "717:8:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "707:18:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 209,
                  "nodeType": "ExpressionStatement",
                  "src": "707:18:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 212,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 210,
                      "name": "WETH",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 185,
                      "src": "735:4:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 211,
                      "name": "_WETH",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 203,
                      "src": "742:5:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "735:12:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 213,
                  "nodeType": "ExpressionStatement",
                  "src": "735:12:1"
                }
              ]
            },
            "documentation": null,
            "id": 215,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 204,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 201,
                  "mutability": "mutable",
                  "name": "_factory",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 215,
                  "src": "657:16:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 200,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "657:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 203,
                  "mutability": "mutable",
                  "name": "_WETH",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 215,
                  "src": "675:13:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 202,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "675:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "656:33:1"
            },
            "returnParameters": {
              "id": 205,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "697:0:1"
            },
            "scope": 1627,
            "src": "645:109:1",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 225,
              "nodeType": "Block",
              "src": "787:98:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 222,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 219,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "804:3:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 220,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "804:10:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 221,
                          "name": "WETH",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 185,
                          "src": "818:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "804:18:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 218,
                      "name": "assert",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -3,
                      "src": "797:6:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_assert_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 223,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "797:26:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 224,
                  "nodeType": "ExpressionStatement",
                  "src": "797:26:1"
                }
              ]
            },
            "documentation": null,
            "id": 226,
            "implemented": true,
            "kind": "receive",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 216,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "767:2:1"
            },
            "returnParameters": {
              "id": 217,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "787:0:1"
            },
            "scope": 1627,
            "src": "760:125:1",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 356,
              "nodeType": "Block",
              "src": "1152:1161:1",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 256,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 249,
                          "name": "tokenA",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 228,
                          "src": "1253:6:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 250,
                          "name": "tokenB",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 230,
                          "src": "1261:6:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 246,
                              "name": "factory",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 182,
                              "src": "1236:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 245,
                            "name": "IMoonwalkerFactory",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8302,
                            "src": "1217:18:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_IMoonwalkerFactory_$8302_$",
                              "typeString": "type(contract IMoonwalkerFactory)"
                            }
                          },
                          "id": 247,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1217:27:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IMoonwalkerFactory_$8302",
                            "typeString": "contract IMoonwalkerFactory"
                          }
                        },
                        "id": 248,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "getPair",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 8270,
                        "src": "1217:35:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_address_$",
                          "typeString": "function (address,address) view external returns (address)"
                        }
                      },
                      "id": 251,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1217:51:1",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 254,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1280:1:1",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 253,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "1272:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 252,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1272:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 255,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1272:10:1",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "1217:65:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 266,
                  "nodeType": "IfStatement",
                  "src": "1213:150:1",
                  "trueBody": {
                    "id": 265,
                    "nodeType": "Block",
                    "src": "1284:79:1",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 261,
                              "name": "tokenA",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 228,
                              "src": "1337:6:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 262,
                              "name": "tokenB",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 230,
                              "src": "1345:6:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 258,
                                  "name": "factory",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 182,
                                  "src": "1317:7:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 257,
                                "name": "IMoonwalkerFactory",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8302,
                                "src": "1298:18:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IMoonwalkerFactory_$8302_$",
                                  "typeString": "type(contract IMoonwalkerFactory)"
                                }
                              },
                              "id": 259,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1298:27:1",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IMoonwalkerFactory_$8302",
                                "typeString": "contract IMoonwalkerFactory"
                              }
                            },
                            "id": 260,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "createPair",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 8291,
                            "src": "1298:38:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$returns$_t_address_$",
                              "typeString": "function (address,address) external returns (address)"
                            }
                          },
                          "id": 263,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1298:54:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 264,
                        "nodeType": "ExpressionStatement",
                        "src": "1298:54:1"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    268,
                    270
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 268,
                      "mutability": "mutable",
                      "name": "reserveA",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 356,
                      "src": "1373:13:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 267,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "1373:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 270,
                      "mutability": "mutable",
                      "name": "reserveB",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 356,
                      "src": "1388:13:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 269,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "1388:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 277,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 273,
                        "name": "factory",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 182,
                        "src": "1441:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 274,
                        "name": "tokenA",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 228,
                        "src": "1450:6:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 275,
                        "name": "tokenB",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 230,
                        "src": "1458:6:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 271,
                        "name": "MoonwalkerswapV2Library",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4719,
                        "src": "1405:23:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_MoonwalkerswapV2Library_$4719_$",
                          "typeString": "type(library MoonwalkerswapV2Library)"
                        }
                      },
                      "id": 272,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getReserves",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4393,
                      "src": "1405:35:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_address_$returns$_t_uint256_$_t_uint256_$",
                        "typeString": "function (address,address,address) view returns (uint256,uint256)"
                      }
                    },
                    "id": 276,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1405:60:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1372:93:1"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 284,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 280,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 278,
                        "name": "reserveA",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 268,
                        "src": "1479:8:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 279,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1491:1:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "1479:13:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 283,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 281,
                        "name": "reserveB",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 270,
                        "src": "1496:8:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 282,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1508:1:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "1496:13:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "1479:30:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 354,
                    "nodeType": "Block",
                    "src": "1595:712:1",
                    "statements": [
                      {
                        "assignments": [
                          295
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 295,
                            "mutability": "mutable",
                            "name": "amountBOptimal",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 354,
                            "src": "1609:19:1",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 294,
                              "name": "uint",
                              "nodeType": "ElementaryTypeName",
                              "src": "1609:4:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 302,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 298,
                              "name": "amountADesired",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 232,
                              "src": "1661:14:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 299,
                              "name": "reserveA",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 268,
                              "src": "1677:8:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 300,
                              "name": "reserveB",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 270,
                              "src": "1687:8:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 296,
                              "name": "MoonwalkerswapV2Library",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4719,
                              "src": "1631:23:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_MoonwalkerswapV2Library_$4719_$",
                                "typeString": "type(library MoonwalkerswapV2Library)"
                              }
                            },
                            "id": 297,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "quote",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4432,
                            "src": "1631:29:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 301,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1631:65:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1609:87:1"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 305,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 303,
                            "name": "amountBOptimal",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 295,
                            "src": "1714:14:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 304,
                            "name": "amountBDesired",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 234,
                            "src": "1732:14:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "1714:32:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 352,
                          "nodeType": "Block",
                          "src": "1944:353:1",
                          "statements": [
                            {
                              "assignments": [
                                323
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 323,
                                  "mutability": "mutable",
                                  "name": "amountAOptimal",
                                  "nodeType": "VariableDeclaration",
                                  "overrides": null,
                                  "scope": 352,
                                  "src": "1962:19:1",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 322,
                                    "name": "uint",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "1962:4:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 330,
                              "initialValue": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 326,
                                    "name": "amountBDesired",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 234,
                                    "src": "2014:14:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 327,
                                    "name": "reserveB",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 270,
                                    "src": "2030:8:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 328,
                                    "name": "reserveA",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 268,
                                    "src": "2040:8:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 324,
                                    "name": "MoonwalkerswapV2Library",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4719,
                                    "src": "1984:23:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_MoonwalkerswapV2Library_$4719_$",
                                      "typeString": "type(library MoonwalkerswapV2Library)"
                                    }
                                  },
                                  "id": 325,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "quote",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 4432,
                                  "src": "1984:29:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                    "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 329,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1984:65:1",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "1962:87:1"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 334,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 332,
                                      "name": "amountAOptimal",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 323,
                                      "src": "2074:14:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "<=",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "id": 333,
                                      "name": "amountADesired",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 232,
                                      "src": "2092:14:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "2074:32:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  ],
                                  "id": 331,
                                  "name": "assert",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -3,
                                  "src": "2067:6:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_assert_pure$_t_bool_$returns$__$",
                                    "typeString": "function (bool) pure"
                                  }
                                },
                                "id": 335,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2067:40:1",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 336,
                              "nodeType": "ExpressionStatement",
                              "src": "2067:40:1"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 340,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 338,
                                      "name": "amountAOptimal",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 323,
                                      "src": "2133:14:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": ">=",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "id": 339,
                                      "name": "amountAMin",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 236,
                                      "src": "2151:10:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "2133:28:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "4d6f6f6e77616c6b6572737761705632526f757465723a20494e53554646494349454e545f415f414d4f554e54",
                                    "id": 341,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2163:47:1",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_077734a4f7cf9428f7f4c6d3609667308f8cccd0a28f5aeb61695694480df8b8",
                                      "typeString": "literal_string \"MoonwalkerswapV2Router: INSUFFICIENT_A_AMOUNT\""
                                    },
                                    "value": "MoonwalkerswapV2Router: INSUFFICIENT_A_AMOUNT"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    {
                                      "typeIdentifier": "t_stringliteral_077734a4f7cf9428f7f4c6d3609667308f8cccd0a28f5aeb61695694480df8b8",
                                      "typeString": "literal_string \"MoonwalkerswapV2Router: INSUFFICIENT_A_AMOUNT\""
                                    }
                                  ],
                                  "id": 337,
                                  "name": "require",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    -18,
                                    -18
                                  ],
                                  "referencedDeclaration": -18,
                                  "src": "2125:7:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (bool,string memory) pure"
                                  }
                                },
                                "id": 342,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2125:86:1",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 343,
                              "nodeType": "ExpressionStatement",
                              "src": "2125:86:1"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 350,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "components": [
                                    {
                                      "argumentTypes": null,
                                      "id": 344,
                                      "name": "amountA",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 241,
                                      "src": "2230:7:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 345,
                                      "name": "amountB",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 243,
                                      "src": "2239:7:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 346,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "TupleExpression",
                                  "src": "2229:18:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                                    "typeString": "tuple(uint256,uint256)"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "components": [
                                    {
                                      "argumentTypes": null,
                                      "id": 347,
                                      "name": "amountAOptimal",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 323,
                                      "src": "2251:14:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 348,
                                      "name": "amountBDesired",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 234,
                                      "src": "2267:14:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 349,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "2250:32:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                                    "typeString": "tuple(uint256,uint256)"
                                  }
                                },
                                "src": "2229:53:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 351,
                              "nodeType": "ExpressionStatement",
                              "src": "2229:53:1"
                            }
                          ]
                        },
                        "id": 353,
                        "nodeType": "IfStatement",
                        "src": "1710:587:1",
                        "trueBody": {
                          "id": 321,
                          "nodeType": "Block",
                          "src": "1748:190:1",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 309,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 307,
                                      "name": "amountBOptimal",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 295,
                                      "src": "1774:14:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": ">=",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "id": 308,
                                      "name": "amountBMin",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 238,
                                      "src": "1792:10:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "1774:28:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "4d6f6f6e77616c6b6572737761705632526f757465723a20494e53554646494349454e545f425f414d4f554e54",
                                    "id": 310,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "1804:47:1",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_ac772567becfb520022da0d75cd7578f37f73655ce5d281319634de23c417ed7",
                                      "typeString": "literal_string \"MoonwalkerswapV2Router: INSUFFICIENT_B_AMOUNT\""
                                    },
                                    "value": "MoonwalkerswapV2Router: INSUFFICIENT_B_AMOUNT"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    {
                                      "typeIdentifier": "t_stringliteral_ac772567becfb520022da0d75cd7578f37f73655ce5d281319634de23c417ed7",
                                      "typeString": "literal_string \"MoonwalkerswapV2Router: INSUFFICIENT_B_AMOUNT\""
                                    }
                                  ],
                                  "id": 306,
                                  "name": "require",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    -18,
                                    -18
                                  ],
                                  "referencedDeclaration": -18,
                                  "src": "1766:7:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (bool,string memory) pure"
                                  }
                                },
                                "id": 311,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1766:86:1",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 312,
                              "nodeType": "ExpressionStatement",
                              "src": "1766:86:1"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 319,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "components": [
                                    {
                                      "argumentTypes": null,
                                      "id": 313,
                                      "name": "amountA",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 241,
                                      "src": "1871:7:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 314,
                                      "name": "amountB",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 243,
                                      "src": "1880:7:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 315,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "TupleExpression",
                                  "src": "1870:18:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                                    "typeString": "tuple(uint256,uint256)"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "components": [
                                    {
                                      "argumentTypes": null,
                                      "id": 316,
                                      "name": "amountADesired",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 232,
                                      "src": "1892:14:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 317,
                                      "name": "amountBOptimal",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 295,
                                      "src": "1908:14:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 318,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "1891:32:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                                    "typeString": "tuple(uint256,uint256)"
                                  }
                                },
                                "src": "1870:53:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 320,
                              "nodeType": "ExpressionStatement",
                              "src": "1870:53:1"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "id": 355,
                  "nodeType": "IfStatement",
                  "src": "1475:832:1",
                  "trueBody": {
                    "id": 293,
                    "nodeType": "Block",
                    "src": "1511:78:1",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 291,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "id": 285,
                                "name": "amountA",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 241,
                                "src": "1526:7:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 286,
                                "name": "amountB",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 243,
                                "src": "1535:7:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 287,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "TupleExpression",
                            "src": "1525:18:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                              "typeString": "tuple(uint256,uint256)"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "id": 288,
                                "name": "amountADesired",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 232,
                                "src": "1547:14:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 289,
                                "name": "amountBDesired",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 234,
                                "src": "1563:14:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 290,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "1546:32:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                              "typeString": "tuple(uint256,uint256)"
                            }
                          },
                          "src": "1525:53:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 292,
                        "nodeType": "ExpressionStatement",
                        "src": "1525:53:1"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": null,
            "id": 357,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_addLiquidity",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 239,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 228,
                  "mutability": "mutable",
                  "name": "tokenA",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 357,
                  "src": "954:14:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 227,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "954:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 230,
                  "mutability": "mutable",
                  "name": "tokenB",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 357,
                  "src": "978:14:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 229,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "978:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 232,
                  "mutability": "mutable",
                  "name": "amountADesired",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 357,
                  "src": "1002:19:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 231,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "1002:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 234,
                  "mutability": "mutable",
                  "name": "amountBDesired",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 357,
                  "src": "1031:19:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 233,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "1031:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 236,
                  "mutability": "mutable",
                  "name": "amountAMin",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 357,
                  "src": "1060:15:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 235,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "1060:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 238,
                  "mutability": "mutable",
                  "name": "amountBMin",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 357,
                  "src": "1085:15:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 237,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "1085:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "944:162:1"
            },
            "returnParameters": {
              "id": 244,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 241,
                  "mutability": "mutable",
                  "name": "amountA",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 357,
                  "src": "1124:12:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 240,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "1124:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 243,
                  "mutability": "mutable",
                  "name": "amountB",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 357,
                  "src": "1138:12:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 242,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "1138:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1123:28:1"
            },
            "scope": 1627,
            "src": "922:1391:1",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "private"
          },
          {
            "baseFunctions": [
              3802
            ],
            "body": {
              "id": 437,
              "nodeType": "Block",
              "src": "2633:408:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 397,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "id": 386,
                          "name": "amountA",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 380,
                          "src": "2644:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 387,
                          "name": "amountB",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 382,
                          "src": "2653:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 388,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "2643:18:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                        "typeString": "tuple(uint256,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 390,
                          "name": "tokenA",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 359,
                          "src": "2678:6:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 391,
                          "name": "tokenB",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 361,
                          "src": "2686:6:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 392,
                          "name": "amountADesired",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 363,
                          "src": "2694:14:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 393,
                          "name": "amountBDesired",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 365,
                          "src": "2710:14:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 394,
                          "name": "amountAMin",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 367,
                          "src": "2726:10:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 395,
                          "name": "amountBMin",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 369,
                          "src": "2738:10:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 389,
                        "name": "_addLiquidity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 357,
                        "src": "2664:13:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                          "typeString": "function (address,address,uint256,uint256,uint256,uint256) returns (uint256,uint256)"
                        }
                      },
                      "id": 396,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2664:85:1",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                        "typeString": "tuple(uint256,uint256)"
                      }
                    },
                    "src": "2643:106:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 398,
                  "nodeType": "ExpressionStatement",
                  "src": "2643:106:1"
                },
                {
                  "assignments": [
                    400
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 400,
                      "mutability": "mutable",
                      "name": "pair",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 437,
                      "src": "2759:12:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 399,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2759:7:1",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 407,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 403,
                        "name": "factory",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 182,
                        "src": "2806:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 404,
                        "name": "tokenA",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 359,
                        "src": "2815:6:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 405,
                        "name": "tokenB",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 361,
                        "src": "2823:6:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 401,
                        "name": "MoonwalkerswapV2Library",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4719,
                        "src": "2774:23:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_MoonwalkerswapV2Library_$4719_$",
                          "typeString": "type(library MoonwalkerswapV2Library)"
                        }
                      },
                      "id": 402,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "pairFor",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4343,
                      "src": "2774:31:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_address_$returns$_t_address_$",
                        "typeString": "function (address,address,address) pure returns (address)"
                      }
                    },
                    "id": 406,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2774:56:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2759:71:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 411,
                        "name": "tokenA",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 359,
                        "src": "2872:6:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 412,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "2880:3:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 413,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "2880:10:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 414,
                        "name": "pair",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 400,
                        "src": "2892:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 415,
                        "name": "amountA",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 380,
                        "src": "2898:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 408,
                        "name": "TransferHelper",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8239,
                        "src": "2840:14:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_TransferHelper_$8239_$",
                          "typeString": "type(library TransferHelper)"
                        }
                      },
                      "id": 410,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "safeTransferFrom",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8213,
                      "src": "2840:31:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,address,uint256)"
                      }
                    },
                    "id": 416,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2840:66:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 417,
                  "nodeType": "ExpressionStatement",
                  "src": "2840:66:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 421,
                        "name": "tokenB",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 361,
                        "src": "2948:6:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 422,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "2956:3:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 423,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "2956:10:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 424,
                        "name": "pair",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 400,
                        "src": "2968:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 425,
                        "name": "amountB",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 382,
                        "src": "2974:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 418,
                        "name": "TransferHelper",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8239,
                        "src": "2916:14:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_TransferHelper_$8239_$",
                          "typeString": "type(library TransferHelper)"
                        }
                      },
                      "id": 420,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "safeTransferFrom",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8213,
                      "src": "2916:31:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,address,uint256)"
                      }
                    },
                    "id": 426,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2916:66:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 427,
                  "nodeType": "ExpressionStatement",
                  "src": "2916:66:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 435,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 428,
                      "name": "liquidity",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 384,
                      "src": "2992:9:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 433,
                          "name": "to",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 371,
                          "src": "3031:2:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 430,
                              "name": "pair",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 400,
                              "src": "3020:4:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 429,
                            "name": "IMoonwalkerPair",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8544,
                            "src": "3004:15:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_IMoonwalkerPair_$8544_$",
                              "typeString": "type(contract IMoonwalkerPair)"
                            }
                          },
                          "id": 431,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3004:21:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IMoonwalkerPair_$8544",
                            "typeString": "contract IMoonwalkerPair"
                          }
                        },
                        "id": 432,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "mint",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 8508,
                        "src": "3004:26:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$_t_uint256_$",
                          "typeString": "function (address) external returns (uint256)"
                        }
                      },
                      "id": 434,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3004:30:1",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2992:42:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 436,
                  "nodeType": "ExpressionStatement",
                  "src": "2992:42:1"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "e8e33700",
            "id": 438,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 377,
                    "name": "deadline",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 373,
                    "src": "2570:8:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 378,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 376,
                  "name": "ensure",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 199,
                  "src": "2563:6:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2563:16:1"
              }
            ],
            "name": "addLiquidity",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 375,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2554:8:1"
            },
            "parameters": {
              "id": 374,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 359,
                  "mutability": "mutable",
                  "name": "tokenA",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 438,
                  "src": "2349:14:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 358,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2349:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 361,
                  "mutability": "mutable",
                  "name": "tokenB",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 438,
                  "src": "2373:14:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 360,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2373:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 363,
                  "mutability": "mutable",
                  "name": "amountADesired",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 438,
                  "src": "2397:19:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 362,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2397:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 365,
                  "mutability": "mutable",
                  "name": "amountBDesired",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 438,
                  "src": "2426:19:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 364,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2426:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 367,
                  "mutability": "mutable",
                  "name": "amountAMin",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 438,
                  "src": "2455:15:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 366,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2455:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 369,
                  "mutability": "mutable",
                  "name": "amountBMin",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 438,
                  "src": "2480:15:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 368,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2480:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 371,
                  "mutability": "mutable",
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 438,
                  "src": "2505:10:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 370,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2505:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 373,
                  "mutability": "mutable",
                  "name": "deadline",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 438,
                  "src": "2525:13:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 372,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2525:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2339:205:1"
            },
            "returnParameters": {
              "id": 385,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 380,
                  "mutability": "mutable",
                  "name": "amountA",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 438,
                  "src": "2589:12:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 379,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2589:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 382,
                  "mutability": "mutable",
                  "name": "amountB",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 438,
                  "src": "2603:12:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 381,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2603:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 384,
                  "mutability": "mutable",
                  "name": "liquidity",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 438,
                  "src": "2617:14:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 383,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2617:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2588:44:1"
            },
            "scope": 1627,
            "src": "2318:723:1",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              3823
            ],
            "body": {
              "id": 539,
              "nodeType": "Block",
              "src": "3334:655:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 475,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "id": 463,
                          "name": "amountToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 457,
                          "src": "3345:11:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 464,
                          "name": "amountETH",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 459,
                          "src": "3358:9:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 465,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "3344:24:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                        "typeString": "tuple(uint256,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 467,
                          "name": "token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 440,
                          "src": "3398:5:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 468,
                          "name": "WETH",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 185,
                          "src": "3417:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 469,
                          "name": "amountTokenDesired",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 442,
                          "src": "3435:18:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 470,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "3467:3:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 471,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "3467:9:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 472,
                          "name": "amountTokenMin",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 444,
                          "src": "3490:14:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 473,
                          "name": "amountETHMin",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 446,
                          "src": "3518:12:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 466,
                        "name": "_addLiquidity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 357,
                        "src": "3371:13:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                          "typeString": "function (address,address,uint256,uint256,uint256,uint256) returns (uint256,uint256)"
                        }
                      },
                      "id": 474,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3371:169:1",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                        "typeString": "tuple(uint256,uint256)"
                      }
                    },
                    "src": "3344:196:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 476,
                  "nodeType": "ExpressionStatement",
                  "src": "3344:196:1"
                },
                {
                  "assignments": [
                    478
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 478,
                      "mutability": "mutable",
                      "name": "pair",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 539,
                      "src": "3550:12:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 477,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "3550:7:1",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 485,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 481,
                        "name": "factory",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 182,
                        "src": "3597:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 482,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 440,
                        "src": "3606:5:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 483,
                        "name": "WETH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 185,
                        "src": "3613:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 479,
                        "name": "MoonwalkerswapV2Library",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4719,
                        "src": "3565:23:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_MoonwalkerswapV2Library_$4719_$",
                          "typeString": "type(library MoonwalkerswapV2Library)"
                        }
                      },
                      "id": 480,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "pairFor",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4343,
                      "src": "3565:31:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_address_$returns$_t_address_$",
                        "typeString": "function (address,address,address) pure returns (address)"
                      }
                    },
                    "id": 484,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3565:53:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3550:68:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 489,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 440,
                        "src": "3660:5:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 490,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "3667:3:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 491,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "3667:10:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 492,
                        "name": "pair",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 478,
                        "src": "3679:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 493,
                        "name": "amountToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 457,
                        "src": "3685:11:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 486,
                        "name": "TransferHelper",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8239,
                        "src": "3628:14:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_TransferHelper_$8239_$",
                          "typeString": "type(library TransferHelper)"
                        }
                      },
                      "id": 488,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "safeTransferFrom",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8213,
                      "src": "3628:31:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,address,uint256)"
                      }
                    },
                    "id": 494,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3628:69:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 495,
                  "nodeType": "ExpressionStatement",
                  "src": "3628:69:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 497,
                              "name": "WETH",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 185,
                              "src": "3713:4:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 496,
                            "name": "IWETH",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4181,
                            "src": "3707:5:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_IWETH_$4181_$",
                              "typeString": "type(contract IWETH)"
                            }
                          },
                          "id": 498,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3707:11:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IWETH_$4181",
                            "typeString": "contract IWETH"
                          }
                        },
                        "id": 499,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "deposit",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 4166,
                        "src": "3707:19:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_payable$__$returns$__$",
                          "typeString": "function () payable external"
                        }
                      },
                      "id": 501,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "names": [
                        "value"
                      ],
                      "nodeType": "FunctionCallOptions",
                      "options": [
                        {
                          "argumentTypes": null,
                          "id": 500,
                          "name": "amountETH",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 459,
                          "src": "3734:9:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "src": "3707:37:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_payable$__$returns$__$value",
                        "typeString": "function () payable external"
                      }
                    },
                    "id": 502,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3707:39:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 503,
                  "nodeType": "ExpressionStatement",
                  "src": "3707:39:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 509,
                            "name": "pair",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 478,
                            "src": "3784:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 510,
                            "name": "amountETH",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 459,
                            "src": "3790:9:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 506,
                                "name": "WETH",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 185,
                                "src": "3769:4:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 505,
                              "name": "IWETH",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4181,
                              "src": "3763:5:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_IWETH_$4181_$",
                                "typeString": "type(contract IWETH)"
                              }
                            },
                            "id": 507,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3763:11:1",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IWETH_$4181",
                              "typeString": "contract IWETH"
                            }
                          },
                          "id": 508,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "transfer",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 4175,
                          "src": "3763:20:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,uint256) external returns (bool)"
                          }
                        },
                        "id": 511,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3763:37:1",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 504,
                      "name": "assert",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -3,
                      "src": "3756:6:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_assert_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 512,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3756:45:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 513,
                  "nodeType": "ExpressionStatement",
                  "src": "3756:45:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 521,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 514,
                      "name": "liquidity",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 461,
                      "src": "3811:9:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 519,
                          "name": "to",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 448,
                          "src": "3850:2:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 516,
                              "name": "pair",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 478,
                              "src": "3839:4:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 515,
                            "name": "IMoonwalkerPair",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8544,
                            "src": "3823:15:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_IMoonwalkerPair_$8544_$",
                              "typeString": "type(contract IMoonwalkerPair)"
                            }
                          },
                          "id": 517,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3823:21:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IMoonwalkerPair_$8544",
                            "typeString": "contract IMoonwalkerPair"
                          }
                        },
                        "id": 518,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "mint",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 8508,
                        "src": "3823:26:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$_t_uint256_$",
                          "typeString": "function (address) external returns (uint256)"
                        }
                      },
                      "id": 520,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3823:30:1",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3811:42:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 522,
                  "nodeType": "ExpressionStatement",
                  "src": "3811:42:1"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 526,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 523,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -15,
                        "src": "3867:3:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 524,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "value",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "3867:9:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 525,
                      "name": "amountETH",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 459,
                      "src": "3879:9:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3867:21:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 538,
                  "nodeType": "IfStatement",
                  "src": "3863:92:1",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 530,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "3921:3:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 531,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "3921:10:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 535,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 532,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "3933:3:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 533,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "value",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "3933:9:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 534,
                            "name": "amountETH",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 459,
                            "src": "3945:9:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3933:21:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 527,
                          "name": "TransferHelper",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8239,
                          "src": "3890:14:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_TransferHelper_$8239_$",
                            "typeString": "type(library TransferHelper)"
                          }
                        },
                        "id": 529,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "safeTransferETH",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 8238,
                        "src": "3890:30:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                          "typeString": "function (address,uint256)"
                        }
                      },
                      "id": 536,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3890:65:1",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 537,
                    "nodeType": "ExpressionStatement",
                    "src": "3890:65:1"
                  }
                }
              ]
            },
            "documentation": null,
            "functionSelector": "f305d719",
            "id": 540,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 454,
                    "name": "deadline",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 450,
                    "src": "3265:8:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 455,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 453,
                  "name": "ensure",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 199,
                  "src": "3258:6:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3258:16:1"
              }
            ],
            "name": "addLiquidityETH",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 452,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3241:8:1"
            },
            "parameters": {
              "id": 451,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 440,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 540,
                  "src": "3080:13:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 439,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3080:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 442,
                  "mutability": "mutable",
                  "name": "amountTokenDesired",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 540,
                  "src": "3103:23:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 441,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "3103:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 444,
                  "mutability": "mutable",
                  "name": "amountTokenMin",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 540,
                  "src": "3136:19:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 443,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "3136:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 446,
                  "mutability": "mutable",
                  "name": "amountETHMin",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 540,
                  "src": "3165:17:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 445,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "3165:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 448,
                  "mutability": "mutable",
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 540,
                  "src": "3192:10:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 447,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3192:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 450,
                  "mutability": "mutable",
                  "name": "deadline",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 540,
                  "src": "3212:13:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 449,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "3212:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3070:161:1"
            },
            "returnParameters": {
              "id": 462,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 457,
                  "mutability": "mutable",
                  "name": "amountToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 540,
                  "src": "3284:16:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 456,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "3284:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 459,
                  "mutability": "mutable",
                  "name": "amountETH",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 540,
                  "src": "3302:14:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 458,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "3302:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 461,
                  "mutability": "mutable",
                  "name": "liquidity",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 540,
                  "src": "3318:14:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 460,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "3318:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3283:50:1"
            },
            "scope": 1627,
            "src": "3046:943:1",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              3844
            ],
            "body": {
              "id": 632,
              "nodeType": "Block",
              "src": "4295:605:1",
              "statements": [
                {
                  "assignments": [
                    566
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 566,
                      "mutability": "mutable",
                      "name": "pair",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 632,
                      "src": "4305:12:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 565,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "4305:7:1",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 573,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 569,
                        "name": "factory",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 182,
                        "src": "4352:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 570,
                        "name": "tokenA",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 542,
                        "src": "4361:6:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 571,
                        "name": "tokenB",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 544,
                        "src": "4369:6:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 567,
                        "name": "MoonwalkerswapV2Library",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4719,
                        "src": "4320:23:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_MoonwalkerswapV2Library_$4719_$",
                          "typeString": "type(library MoonwalkerswapV2Library)"
                        }
                      },
                      "id": 568,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "pairFor",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4343,
                      "src": "4320:31:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_address_$returns$_t_address_$",
                        "typeString": "function (address,address,address) pure returns (address)"
                      }
                    },
                    "id": 572,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4320:56:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4305:71:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 578,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "4421:3:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 579,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "4421:10:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 580,
                        "name": "pair",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 566,
                        "src": "4433:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 581,
                        "name": "liquidity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 546,
                        "src": "4439:9:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 575,
                            "name": "pair",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 566,
                            "src": "4402:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 574,
                          "name": "IMoonwalkerPair",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8544,
                          "src": "4386:15:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IMoonwalkerPair_$8544_$",
                            "typeString": "type(contract IMoonwalkerPair)"
                          }
                        },
                        "id": 576,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4386:21:1",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IMoonwalkerPair_$8544",
                          "typeString": "contract IMoonwalkerPair"
                        }
                      },
                      "id": 577,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transferFrom",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8385,
                      "src": "4386:34: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": 582,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4386:63:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 583,
                  "nodeType": "ExpressionStatement",
                  "src": "4386:63:1"
                },
                {
                  "assignments": [
                    585,
                    587
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 585,
                      "mutability": "mutable",
                      "name": "amount0",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 632,
                      "src": "4486:12:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 584,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "4486:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 587,
                      "mutability": "mutable",
                      "name": "amount1",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 632,
                      "src": "4500:12:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 586,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "4500:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 594,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 592,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 552,
                        "src": "4543:2:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 589,
                            "name": "pair",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 566,
                            "src": "4532:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 588,
                          "name": "IMoonwalkerPair",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8544,
                          "src": "4516:15:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IMoonwalkerPair_$8544_$",
                            "typeString": "type(contract IMoonwalkerPair)"
                          }
                        },
                        "id": 590,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4516:21:1",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IMoonwalkerPair_$8544",
                          "typeString": "contract IMoonwalkerPair"
                        }
                      },
                      "id": 591,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "burn",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8517,
                      "src": "4516:26:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$_t_uint256_$_t_uint256_$",
                        "typeString": "function (address) external returns (uint256,uint256)"
                      }
                    },
                    "id": 593,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4516:30:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4485:61:1"
                },
                {
                  "assignments": [
                    596,
                    null
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 596,
                      "mutability": "mutable",
                      "name": "token0",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 632,
                      "src": "4557:14:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 595,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "4557:7:1",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    null
                  ],
                  "id": 602,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 599,
                        "name": "tokenA",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 542,
                        "src": "4611:6:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 600,
                        "name": "tokenB",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 544,
                        "src": "4619:6:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 597,
                        "name": "MoonwalkerswapV2Library",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4719,
                        "src": "4576:23:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_MoonwalkerswapV2Library_$4719_$",
                          "typeString": "type(library MoonwalkerswapV2Library)"
                        }
                      },
                      "id": 598,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sortTokens",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4298,
                      "src": "4576:34:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$returns$_t_address_$_t_address_$",
                        "typeString": "function (address,address) pure returns (address,address)"
                      }
                    },
                    "id": 601,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4576:50:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_address_$_t_address_$",
                      "typeString": "tuple(address,address)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4556:70:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 616,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "id": 603,
                          "name": "amountA",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 561,
                          "src": "4637:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 604,
                          "name": "amountB",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 563,
                          "src": "4646:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 605,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "4636:18:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                        "typeString": "tuple(uint256,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 608,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 606,
                          "name": "tokenA",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 542,
                          "src": "4657:6:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 607,
                          "name": "token0",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 596,
                          "src": "4667:6:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "4657:16:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseExpression": {
                        "argumentTypes": null,
                        "components": [
                          {
                            "argumentTypes": null,
                            "id": 612,
                            "name": "amount1",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 587,
                            "src": "4698:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 613,
                            "name": "amount0",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 585,
                            "src": "4707:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 614,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "4697:18:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                          "typeString": "tuple(uint256,uint256)"
                        }
                      },
                      "id": 615,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "Conditional",
                      "src": "4657:58:1",
                      "trueExpression": {
                        "argumentTypes": null,
                        "components": [
                          {
                            "argumentTypes": null,
                            "id": 609,
                            "name": "amount0",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 585,
                            "src": "4677:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 610,
                            "name": "amount1",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 587,
                            "src": "4686:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 611,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "4676:18:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                          "typeString": "tuple(uint256,uint256)"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                        "typeString": "tuple(uint256,uint256)"
                      }
                    },
                    "src": "4636:79:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 617,
                  "nodeType": "ExpressionStatement",
                  "src": "4636:79:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 621,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 619,
                          "name": "amountA",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 561,
                          "src": "4733:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 620,
                          "name": "amountAMin",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 548,
                          "src": "4744:10:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "4733:21:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4d6f6f6e77616c6b6572737761705632526f757465723a20494e53554646494349454e545f415f414d4f554e54",
                        "id": 622,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4756:47:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_077734a4f7cf9428f7f4c6d3609667308f8cccd0a28f5aeb61695694480df8b8",
                          "typeString": "literal_string \"MoonwalkerswapV2Router: INSUFFICIENT_A_AMOUNT\""
                        },
                        "value": "MoonwalkerswapV2Router: INSUFFICIENT_A_AMOUNT"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_077734a4f7cf9428f7f4c6d3609667308f8cccd0a28f5aeb61695694480df8b8",
                          "typeString": "literal_string \"MoonwalkerswapV2Router: INSUFFICIENT_A_AMOUNT\""
                        }
                      ],
                      "id": 618,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "4725:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 623,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4725:79:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 624,
                  "nodeType": "ExpressionStatement",
                  "src": "4725:79:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 628,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 626,
                          "name": "amountB",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 563,
                          "src": "4822:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 627,
                          "name": "amountBMin",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 550,
                          "src": "4833:10:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "4822:21:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4d6f6f6e77616c6b6572737761705632526f757465723a20494e53554646494349454e545f425f414d4f554e54",
                        "id": 629,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4845:47:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ac772567becfb520022da0d75cd7578f37f73655ce5d281319634de23c417ed7",
                          "typeString": "literal_string \"MoonwalkerswapV2Router: INSUFFICIENT_B_AMOUNT\""
                        },
                        "value": "MoonwalkerswapV2Router: INSUFFICIENT_B_AMOUNT"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ac772567becfb520022da0d75cd7578f37f73655ce5d281319634de23c417ed7",
                          "typeString": "literal_string \"MoonwalkerswapV2Router: INSUFFICIENT_B_AMOUNT\""
                        }
                      ],
                      "id": 625,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "4814:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 630,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4814:79:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 631,
                  "nodeType": "ExpressionStatement",
                  "src": "4814:79:1"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "baa2abde",
            "id": 633,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 558,
                    "name": "deadline",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 554,
                    "src": "4248:8:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 559,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 557,
                  "name": "ensure",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 199,
                  "src": "4241:6:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4241:16:1"
              }
            ],
            "name": "removeLiquidity",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 556,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "4232:8:1"
            },
            "parameters": {
              "id": 555,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 542,
                  "mutability": "mutable",
                  "name": "tokenA",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 633,
                  "src": "4063:14:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 541,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4063:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 544,
                  "mutability": "mutable",
                  "name": "tokenB",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 633,
                  "src": "4087:14:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 543,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4087:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 546,
                  "mutability": "mutable",
                  "name": "liquidity",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 633,
                  "src": "4111:14:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 545,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "4111:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 548,
                  "mutability": "mutable",
                  "name": "amountAMin",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 633,
                  "src": "4135:15:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 547,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "4135:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 550,
                  "mutability": "mutable",
                  "name": "amountBMin",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 633,
                  "src": "4160:15:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 549,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "4160:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 552,
                  "mutability": "mutable",
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 633,
                  "src": "4185:10:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 551,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4185:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 554,
                  "mutability": "mutable",
                  "name": "deadline",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 633,
                  "src": "4205:13:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 553,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "4205:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4053:171:1"
            },
            "returnParameters": {
              "id": 564,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 561,
                  "mutability": "mutable",
                  "name": "amountA",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 633,
                  "src": "4267:12:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 560,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "4267:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 563,
                  "mutability": "mutable",
                  "name": "amountB",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 633,
                  "src": "4281:12:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 562,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "4281:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4266:28:1"
            },
            "scope": 1627,
            "src": "4029:871:1",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              3863
            ],
            "body": {
              "id": 695,
              "nodeType": "Block",
              "src": "5161:389:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 671,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "id": 656,
                          "name": "amountToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 652,
                          "src": "5172:11:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 657,
                          "name": "amountETH",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 654,
                          "src": "5185:9:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 658,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "5171:24:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                        "typeString": "tuple(uint256,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 660,
                          "name": "token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 635,
                          "src": "5227:5:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 661,
                          "name": "WETH",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 185,
                          "src": "5246:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 662,
                          "name": "liquidity",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 637,
                          "src": "5264:9:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 663,
                          "name": "amountTokenMin",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 639,
                          "src": "5287:14:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 664,
                          "name": "amountETHMin",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 641,
                          "src": "5315:12:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 667,
                              "name": "this",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -28,
                              "src": "5349:4:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_MoonwalkerswapV2Router01_$1627",
                                "typeString": "contract MoonwalkerswapV2Router01"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_MoonwalkerswapV2Router01_$1627",
                                "typeString": "contract MoonwalkerswapV2Router01"
                              }
                            ],
                            "id": 666,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "5341:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 665,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "5341:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 668,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5341:13:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 669,
                          "name": "deadline",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 645,
                          "src": "5368:8:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 659,
                        "name": "removeLiquidity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 633,
                        "src": "5198:15:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                          "typeString": "function (address,address,uint256,uint256,uint256,address,uint256) returns (uint256,uint256)"
                        }
                      },
                      "id": 670,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5198:188:1",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                        "typeString": "tuple(uint256,uint256)"
                      }
                    },
                    "src": "5171:215:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 672,
                  "nodeType": "ExpressionStatement",
                  "src": "5171:215:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 676,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 635,
                        "src": "5424:5:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 677,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 643,
                        "src": "5431:2:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 678,
                        "name": "amountToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 652,
                        "src": "5435:11:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 673,
                        "name": "TransferHelper",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8239,
                        "src": "5396:14:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_TransferHelper_$8239_$",
                          "typeString": "type(library TransferHelper)"
                        }
                      },
                      "id": 675,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "safeTransfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8167,
                      "src": "5396:27:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 679,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5396:51:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 680,
                  "nodeType": "ExpressionStatement",
                  "src": "5396:51:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 685,
                        "name": "amountETH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 654,
                        "src": "5478:9:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 682,
                            "name": "WETH",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 185,
                            "src": "5463:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 681,
                          "name": "IWETH",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4181,
                          "src": "5457:5:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IWETH_$4181_$",
                            "typeString": "type(contract IWETH)"
                          }
                        },
                        "id": 683,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5457:11:1",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IWETH_$4181",
                          "typeString": "contract IWETH"
                        }
                      },
                      "id": 684,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "withdraw",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4180,
                      "src": "5457:20:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256) external"
                      }
                    },
                    "id": 686,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5457:31:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 687,
                  "nodeType": "ExpressionStatement",
                  "src": "5457:31:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 691,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 643,
                        "src": "5529:2:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 692,
                        "name": "amountETH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 654,
                        "src": "5533:9:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 688,
                        "name": "TransferHelper",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8239,
                        "src": "5498:14:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_TransferHelper_$8239_$",
                          "typeString": "type(library TransferHelper)"
                        }
                      },
                      "id": 690,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "safeTransferETH",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8238,
                      "src": "5498:30:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 693,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5498:45:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 694,
                  "nodeType": "ExpressionStatement",
                  "src": "5498:45:1"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "02751cec",
            "id": 696,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 649,
                    "name": "deadline",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 645,
                    "src": "5108:8:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 650,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 648,
                  "name": "ensure",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 199,
                  "src": "5101:6:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5101:16:1"
              }
            ],
            "name": "removeLiquidityETH",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 647,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "5092:8:1"
            },
            "parameters": {
              "id": 646,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 635,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 696,
                  "src": "4942:13:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 634,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4942:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 637,
                  "mutability": "mutable",
                  "name": "liquidity",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 696,
                  "src": "4965:14:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 636,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "4965:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 639,
                  "mutability": "mutable",
                  "name": "amountTokenMin",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 696,
                  "src": "4989:19:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 638,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "4989:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 641,
                  "mutability": "mutable",
                  "name": "amountETHMin",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 696,
                  "src": "5018:17:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 640,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "5018:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 643,
                  "mutability": "mutable",
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 696,
                  "src": "5045:10:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 642,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5045:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 645,
                  "mutability": "mutable",
                  "name": "deadline",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 696,
                  "src": "5065:13:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 644,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "5065:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4932:152:1"
            },
            "returnParameters": {
              "id": 655,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 652,
                  "mutability": "mutable",
                  "name": "amountToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 696,
                  "src": "5127:16:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 651,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "5127:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 654,
                  "mutability": "mutable",
                  "name": "amountETH",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 696,
                  "src": "5145:14:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 653,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "5145:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5126:34:1"
            },
            "scope": 1627,
            "src": "4905:645:1",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              3892
            ],
            "body": {
              "id": 777,
              "nodeType": "Block",
              "src": "5872:346:1",
              "statements": [
                {
                  "assignments": [
                    727
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 727,
                      "mutability": "mutable",
                      "name": "pair",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 777,
                      "src": "5882:12:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 726,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "5882:7:1",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 734,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 730,
                        "name": "factory",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 182,
                        "src": "5929:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 731,
                        "name": "tokenA",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 698,
                        "src": "5938:6:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 732,
                        "name": "tokenB",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 700,
                        "src": "5946:6:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 728,
                        "name": "MoonwalkerswapV2Library",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4719,
                        "src": "5897:23:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_MoonwalkerswapV2Library_$4719_$",
                          "typeString": "type(library MoonwalkerswapV2Library)"
                        }
                      },
                      "id": 729,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "pairFor",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4343,
                      "src": "5897:31:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_address_$returns$_t_address_$",
                        "typeString": "function (address,address,address) pure returns (address)"
                      }
                    },
                    "id": 733,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5897:56:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5882:71:1"
                },
                {
                  "assignments": [
                    736
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 736,
                      "mutability": "mutable",
                      "name": "value",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 777,
                      "src": "5963:10:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 735,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "5963:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 745,
                  "initialValue": {
                    "argumentTypes": null,
                    "condition": {
                      "argumentTypes": null,
                      "id": 737,
                      "name": "approveMax",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 712,
                      "src": "5976:10:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "argumentTypes": null,
                      "id": 743,
                      "name": "liquidity",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 702,
                      "src": "6000:9:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 744,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "5976:33:1",
                    "trueExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 741,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "-",
                          "prefix": true,
                          "src": "5994:2:1",
                          "subExpression": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 740,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5995:1:1",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_minus_1_by_1",
                            "typeString": "int_const -1"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_minus_1_by_1",
                            "typeString": "int_const -1"
                          }
                        ],
                        "id": 739,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "5989:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": {
                          "id": 738,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "5989:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 742,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5989:8:1",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5963:46:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 750,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "6048:3:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 751,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "6048:10:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 754,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -28,
                            "src": "6068:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_MoonwalkerswapV2Router01_$1627",
                              "typeString": "contract MoonwalkerswapV2Router01"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_MoonwalkerswapV2Router01_$1627",
                              "typeString": "contract MoonwalkerswapV2Router01"
                            }
                          ],
                          "id": 753,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "6060:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 752,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "6060:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 755,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6060:13:1",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 756,
                        "name": "value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 736,
                        "src": "6075:5:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 757,
                        "name": "deadline",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 710,
                        "src": "6082:8:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 758,
                        "name": "v",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 714,
                        "src": "6092:1:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 759,
                        "name": "r",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 716,
                        "src": "6095:1:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 760,
                        "name": "s",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 718,
                        "src": "6098:1:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 747,
                            "name": "pair",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 727,
                            "src": "6035:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 746,
                          "name": "IMoonwalkerPair",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8544,
                          "src": "6019:15:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IMoonwalkerPair_$8544_$",
                            "typeString": "type(contract IMoonwalkerPair)"
                          }
                        },
                        "id": 748,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6019:21:1",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IMoonwalkerPair_$8544",
                          "typeString": "contract IMoonwalkerPair"
                        }
                      },
                      "id": 749,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "permit",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8419,
                      "src": "6019:28:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,uint256,uint256,uint8,bytes32,bytes32) external"
                      }
                    },
                    "id": 761,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6019:81:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 762,
                  "nodeType": "ExpressionStatement",
                  "src": "6019:81:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 775,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "id": 763,
                          "name": "amountA",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 722,
                          "src": "6111:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 764,
                          "name": "amountB",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 724,
                          "src": "6120:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 765,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "6110:18:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                        "typeString": "tuple(uint256,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 767,
                          "name": "tokenA",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 698,
                          "src": "6147:6:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 768,
                          "name": "tokenB",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 700,
                          "src": "6155:6:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 769,
                          "name": "liquidity",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 702,
                          "src": "6163:9:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 770,
                          "name": "amountAMin",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 704,
                          "src": "6174:10:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 771,
                          "name": "amountBMin",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 706,
                          "src": "6186:10:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 772,
                          "name": "to",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 708,
                          "src": "6198:2:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 773,
                          "name": "deadline",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 710,
                          "src": "6202:8:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 766,
                        "name": "removeLiquidity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 633,
                        "src": "6131:15:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                          "typeString": "function (address,address,uint256,uint256,uint256,address,uint256) returns (uint256,uint256)"
                        }
                      },
                      "id": 774,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6131:80:1",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                        "typeString": "tuple(uint256,uint256)"
                      }
                    },
                    "src": "6110:101:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 776,
                  "nodeType": "ExpressionStatement",
                  "src": "6110:101:1"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "2195995c",
            "id": 778,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "removeLiquidityWithPermit",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 720,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "5826:8:1"
            },
            "parameters": {
              "id": 719,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 698,
                  "mutability": "mutable",
                  "name": "tokenA",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 778,
                  "src": "5599:14:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 697,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5599:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 700,
                  "mutability": "mutable",
                  "name": "tokenB",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 778,
                  "src": "5623:14:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 699,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5623:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 702,
                  "mutability": "mutable",
                  "name": "liquidity",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 778,
                  "src": "5647:14:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 701,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "5647:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 704,
                  "mutability": "mutable",
                  "name": "amountAMin",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 778,
                  "src": "5671:15:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 703,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "5671:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 706,
                  "mutability": "mutable",
                  "name": "amountBMin",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 778,
                  "src": "5696:15:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 705,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "5696:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 708,
                  "mutability": "mutable",
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 778,
                  "src": "5721:10:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 707,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5721:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 710,
                  "mutability": "mutable",
                  "name": "deadline",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 778,
                  "src": "5741:13:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 709,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "5741:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 712,
                  "mutability": "mutable",
                  "name": "approveMax",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 778,
                  "src": "5764:15:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 711,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5764:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 714,
                  "mutability": "mutable",
                  "name": "v",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 778,
                  "src": "5781:7:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 713,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "5781:5:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 716,
                  "mutability": "mutable",
                  "name": "r",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 778,
                  "src": "5790:9:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 715,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5790:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 718,
                  "mutability": "mutable",
                  "name": "s",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 778,
                  "src": "5801:9:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 717,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5801:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5589:227:1"
            },
            "returnParameters": {
              "id": 725,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 722,
                  "mutability": "mutable",
                  "name": "amountA",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 778,
                  "src": "5844:12:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 721,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "5844:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 724,
                  "mutability": "mutable",
                  "name": "amountB",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 778,
                  "src": "5858:12:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 723,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "5858:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5843:28:1"
            },
            "scope": 1627,
            "src": "5555:663:1",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              3919
            ],
            "body": {
              "id": 856,
              "nodeType": "Block",
              "src": "6530:349:1",
              "statements": [
                {
                  "assignments": [
                    807
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 807,
                      "mutability": "mutable",
                      "name": "pair",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 856,
                      "src": "6540:12:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 806,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "6540:7:1",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 814,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 810,
                        "name": "factory",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 182,
                        "src": "6587:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 811,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 780,
                        "src": "6596:5:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 812,
                        "name": "WETH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 185,
                        "src": "6603:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 808,
                        "name": "MoonwalkerswapV2Library",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4719,
                        "src": "6555:23:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_MoonwalkerswapV2Library_$4719_$",
                          "typeString": "type(library MoonwalkerswapV2Library)"
                        }
                      },
                      "id": 809,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "pairFor",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4343,
                      "src": "6555:31:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_address_$returns$_t_address_$",
                        "typeString": "function (address,address,address) pure returns (address)"
                      }
                    },
                    "id": 813,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6555:53:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6540:68:1"
                },
                {
                  "assignments": [
                    816
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 816,
                      "mutability": "mutable",
                      "name": "value",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 856,
                      "src": "6618:10:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 815,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "6618:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 825,
                  "initialValue": {
                    "argumentTypes": null,
                    "condition": {
                      "argumentTypes": null,
                      "id": 817,
                      "name": "approveMax",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 792,
                      "src": "6631:10:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "argumentTypes": null,
                      "id": 823,
                      "name": "liquidity",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 782,
                      "src": "6655:9:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 824,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "6631:33:1",
                    "trueExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 821,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "-",
                          "prefix": true,
                          "src": "6649:2:1",
                          "subExpression": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 820,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6650:1:1",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_minus_1_by_1",
                            "typeString": "int_const -1"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_minus_1_by_1",
                            "typeString": "int_const -1"
                          }
                        ],
                        "id": 819,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "6644:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": {
                          "id": 818,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "6644:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 822,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6644:8:1",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6618:46:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 830,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "6703:3:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 831,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "6703:10:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 834,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -28,
                            "src": "6723:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_MoonwalkerswapV2Router01_$1627",
                              "typeString": "contract MoonwalkerswapV2Router01"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_MoonwalkerswapV2Router01_$1627",
                              "typeString": "contract MoonwalkerswapV2Router01"
                            }
                          ],
                          "id": 833,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "6715:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 832,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "6715:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 835,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6715:13:1",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 836,
                        "name": "value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 816,
                        "src": "6730:5:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 837,
                        "name": "deadline",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 790,
                        "src": "6737:8:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 838,
                        "name": "v",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 794,
                        "src": "6747:1:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 839,
                        "name": "r",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 796,
                        "src": "6750:1:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 840,
                        "name": "s",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 798,
                        "src": "6753:1:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 827,
                            "name": "pair",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 807,
                            "src": "6690:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 826,
                          "name": "IMoonwalkerPair",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8544,
                          "src": "6674:15:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IMoonwalkerPair_$8544_$",
                            "typeString": "type(contract IMoonwalkerPair)"
                          }
                        },
                        "id": 828,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6674:21:1",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IMoonwalkerPair_$8544",
                          "typeString": "contract IMoonwalkerPair"
                        }
                      },
                      "id": 829,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "permit",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8419,
                      "src": "6674:28:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,uint256,uint256,uint8,bytes32,bytes32) external"
                      }
                    },
                    "id": 841,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6674:81:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 842,
                  "nodeType": "ExpressionStatement",
                  "src": "6674:81:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 854,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "id": 843,
                          "name": "amountToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 802,
                          "src": "6766:11:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 844,
                          "name": "amountETH",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 804,
                          "src": "6779:9:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 845,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "6765:24:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                        "typeString": "tuple(uint256,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 847,
                          "name": "token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 780,
                          "src": "6811:5:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 848,
                          "name": "liquidity",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 782,
                          "src": "6818:9:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 849,
                          "name": "amountTokenMin",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 784,
                          "src": "6829:14:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 850,
                          "name": "amountETHMin",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 786,
                          "src": "6845:12:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 851,
                          "name": "to",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 788,
                          "src": "6859:2:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 852,
                          "name": "deadline",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 790,
                          "src": "6863:8:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 846,
                        "name": "removeLiquidityETH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 696,
                        "src": "6792:18:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                          "typeString": "function (address,uint256,uint256,uint256,address,uint256) returns (uint256,uint256)"
                        }
                      },
                      "id": 853,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6792:80:1",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                        "typeString": "tuple(uint256,uint256)"
                      }
                    },
                    "src": "6765:107:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 855,
                  "nodeType": "ExpressionStatement",
                  "src": "6765:107:1"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "ded9382a",
            "id": 857,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "removeLiquidityETHWithPermit",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 800,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "6478:8:1"
            },
            "parameters": {
              "id": 799,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 780,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 857,
                  "src": "6270:13:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 779,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6270:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 782,
                  "mutability": "mutable",
                  "name": "liquidity",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 857,
                  "src": "6293:14:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 781,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "6293:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 784,
                  "mutability": "mutable",
                  "name": "amountTokenMin",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 857,
                  "src": "6317:19:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 783,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "6317:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 786,
                  "mutability": "mutable",
                  "name": "amountETHMin",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 857,
                  "src": "6346:17:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 785,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "6346:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 788,
                  "mutability": "mutable",
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 857,
                  "src": "6373:10:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 787,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6373:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 790,
                  "mutability": "mutable",
                  "name": "deadline",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 857,
                  "src": "6393:13:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 789,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "6393:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 792,
                  "mutability": "mutable",
                  "name": "approveMax",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 857,
                  "src": "6416:15:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 791,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6416:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 794,
                  "mutability": "mutable",
                  "name": "v",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 857,
                  "src": "6433:7:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 793,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "6433:5:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 796,
                  "mutability": "mutable",
                  "name": "r",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 857,
                  "src": "6442:9:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 795,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6442:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 798,
                  "mutability": "mutable",
                  "name": "s",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 857,
                  "src": "6453:9:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 797,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6453:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6260:208:1"
            },
            "returnParameters": {
              "id": 805,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 802,
                  "mutability": "mutable",
                  "name": "amountToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 857,
                  "src": "6496:16:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 801,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "6496:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 804,
                  "mutability": "mutable",
                  "name": "amountETH",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 857,
                  "src": "6514:14:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 803,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "6514:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6495:34:1"
            },
            "scope": 1627,
            "src": "6223:656:1",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 972,
              "nodeType": "Block",
              "src": "7068:625:1",
              "statements": [
                {
                  "body": {
                    "id": 970,
                    "nodeType": "Block",
                    "src": "7117:570:1",
                    "statements": [
                      {
                        "assignments": [
                          881,
                          883
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 881,
                            "mutability": "mutable",
                            "name": "input",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 970,
                            "src": "7132:13:1",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 880,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "7132:7:1",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 883,
                            "mutability": "mutable",
                            "name": "output",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 970,
                            "src": "7147:14:1",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 882,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "7147:7:1",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 893,
                        "initialValue": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 884,
                                "name": "path",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 863,
                                "src": "7166:4:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[] memory"
                                }
                              },
                              "id": 886,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 885,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 869,
                                "src": "7171:1:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "7166:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 887,
                                "name": "path",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 863,
                                "src": "7175:4:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[] memory"
                                }
                              },
                              "id": 891,
                              "indexExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 890,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 888,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 869,
                                  "src": "7180:1:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "+",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "31",
                                  "id": 889,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "7184:1:1",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "7180:5:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "7175:11:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "id": 892,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "7165:22:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_address_$_t_address_$",
                            "typeString": "tuple(address,address)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7131:56:1"
                      },
                      {
                        "assignments": [
                          895,
                          null
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 895,
                            "mutability": "mutable",
                            "name": "token0",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 970,
                            "src": "7202:14:1",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 894,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "7202:7:1",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          },
                          null
                        ],
                        "id": 901,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 898,
                              "name": "input",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 881,
                              "src": "7256:5:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 899,
                              "name": "output",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 883,
                              "src": "7263:6:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 896,
                              "name": "MoonwalkerswapV2Library",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4719,
                              "src": "7221:23:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_MoonwalkerswapV2Library_$4719_$",
                                "typeString": "type(library MoonwalkerswapV2Library)"
                              }
                            },
                            "id": 897,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sortTokens",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4298,
                            "src": "7221:34:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$returns$_t_address_$_t_address_$",
                              "typeString": "function (address,address) pure returns (address,address)"
                            }
                          },
                          "id": 900,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7221:49:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_address_$_t_address_$",
                            "typeString": "tuple(address,address)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7201:69:1"
                      },
                      {
                        "assignments": [
                          903
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 903,
                            "mutability": "mutable",
                            "name": "amountOut",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 970,
                            "src": "7284:14:1",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 902,
                              "name": "uint",
                              "nodeType": "ElementaryTypeName",
                              "src": "7284:4:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 909,
                        "initialValue": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 904,
                            "name": "amounts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 860,
                            "src": "7301:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                              "typeString": "uint256[] memory"
                            }
                          },
                          "id": 908,
                          "indexExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 907,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 905,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 869,
                              "src": "7309:1:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 906,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7313:1:1",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "7309:5:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "7301:14:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7284:31:1"
                      },
                      {
                        "assignments": [
                          911,
                          913
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 911,
                            "mutability": "mutable",
                            "name": "amount0Out",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 970,
                            "src": "7330:15:1",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 910,
                              "name": "uint",
                              "nodeType": "ElementaryTypeName",
                              "src": "7330:4:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 913,
                            "mutability": "mutable",
                            "name": "amount1Out",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 970,
                            "src": "7347:15:1",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 912,
                              "name": "uint",
                              "nodeType": "ElementaryTypeName",
                              "src": "7347:4:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 930,
                        "initialValue": {
                          "argumentTypes": null,
                          "condition": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 916,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 914,
                              "name": "input",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 881,
                              "src": "7366:5:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 915,
                              "name": "token0",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 895,
                              "src": "7375:6:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "src": "7366:15:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseExpression": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "id": 923,
                                "name": "amountOut",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 903,
                                "src": "7408:9:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 926,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "7424:1:1",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 925,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "7419:4:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": {
                                    "id": 924,
                                    "name": "uint",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "7419:4:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": null,
                                      "typeString": null
                                    }
                                  }
                                },
                                "id": 927,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7419:7:1",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 928,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "7407:20:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                              "typeString": "tuple(uint256,uint256)"
                            }
                          },
                          "id": 929,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "Conditional",
                          "src": "7366:61:1",
                          "trueExpression": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 919,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "7390:1:1",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 918,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "7385:4:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": {
                                    "id": 917,
                                    "name": "uint",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "7385:4:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": null,
                                      "typeString": null
                                    }
                                  }
                                },
                                "id": 920,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7385:7:1",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 921,
                                "name": "amountOut",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 903,
                                "src": "7394:9:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 922,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "7384:20:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                              "typeString": "tuple(uint256,uint256)"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                            "typeString": "tuple(uint256,uint256)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7329:98:1"
                      },
                      {
                        "assignments": [
                          932
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 932,
                            "mutability": "mutable",
                            "name": "to",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 970,
                            "src": "7441:10:1",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 931,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "7441:7:1",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 951,
                        "initialValue": {
                          "argumentTypes": null,
                          "condition": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 938,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 933,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 869,
                              "src": "7454:1:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<",
                            "rightExpression": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 937,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 934,
                                  "name": "path",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 863,
                                  "src": "7458:4:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                    "typeString": "address[] memory"
                                  }
                                },
                                "id": 935,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "length",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "7458:11:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "-",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "32",
                                "id": 936,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "7472:1:1",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_2_by_1",
                                  "typeString": "int_const 2"
                                },
                                "value": "2"
                              },
                              "src": "7458:15:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "7454:19:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseExpression": {
                            "argumentTypes": null,
                            "id": 949,
                            "name": "_to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 865,
                            "src": "7540:3:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 950,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "Conditional",
                          "src": "7454:89:1",
                          "trueExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 941,
                                "name": "factory",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 182,
                                "src": "7508:7:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 942,
                                "name": "output",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 883,
                                "src": "7517:6:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 943,
                                  "name": "path",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 863,
                                  "src": "7525:4:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                    "typeString": "address[] memory"
                                  }
                                },
                                "id": 947,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 946,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 944,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 869,
                                    "src": "7530:1:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "+",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "32",
                                    "id": 945,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "7534:1:1",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_2_by_1",
                                      "typeString": "int_const 2"
                                    },
                                    "value": "2"
                                  },
                                  "src": "7530:5:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "7525:11:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 939,
                                "name": "MoonwalkerswapV2Library",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4719,
                                "src": "7476:23:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_MoonwalkerswapV2Library_$4719_$",
                                  "typeString": "type(library MoonwalkerswapV2Library)"
                                }
                              },
                              "id": 940,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "pairFor",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 4343,
                              "src": "7476:31:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_address_$returns$_t_address_$",
                                "typeString": "function (address,address,address) pure returns (address)"
                              }
                            },
                            "id": 948,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7476:61:1",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7441:102:1"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 961,
                              "name": "amount0Out",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 911,
                              "src": "7635:10:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 962,
                              "name": "amount1Out",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 913,
                              "src": "7647:10:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 963,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 932,
                              "src": "7659:2:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 966,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "7673:1:1",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 965,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "NewExpression",
                                "src": "7663:9:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function (uint256) pure returns (bytes memory)"
                                },
                                "typeName": {
                                  "id": 964,
                                  "name": "bytes",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "7667:5:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_storage_ptr",
                                    "typeString": "bytes"
                                  }
                                }
                              },
                              "id": 967,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "7663:12:1",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 955,
                                      "name": "factory",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 182,
                                      "src": "7605:7:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 956,
                                      "name": "input",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 881,
                                      "src": "7614:5:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 957,
                                      "name": "output",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 883,
                                      "src": "7621:6:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 953,
                                      "name": "MoonwalkerswapV2Library",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4719,
                                      "src": "7573:23:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_MoonwalkerswapV2Library_$4719_$",
                                        "typeString": "type(library MoonwalkerswapV2Library)"
                                      }
                                    },
                                    "id": 954,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "pairFor",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 4343,
                                    "src": "7573:31:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_address_$returns$_t_address_$",
                                      "typeString": "function (address,address,address) pure returns (address)"
                                    }
                                  },
                                  "id": 958,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "7573:55:1",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 952,
                                "name": "IMoonwalkerPair",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8544,
                                "src": "7557:15:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IMoonwalkerPair_$8544_$",
                                  "typeString": "type(contract IMoonwalkerPair)"
                                }
                              },
                              "id": 959,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "7557:72:1",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IMoonwalkerPair_$8544",
                                "typeString": "contract IMoonwalkerPair"
                              }
                            },
                            "id": 960,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "swap",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 8528,
                            "src": "7557:77:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_uint256_$_t_address_$_t_bytes_memory_ptr_$returns$__$",
                              "typeString": "function (uint256,uint256,address,bytes memory) external"
                            }
                          },
                          "id": 968,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7557:119:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 969,
                        "nodeType": "ExpressionStatement",
                        "src": "7557:119:1"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 876,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 871,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 869,
                      "src": "7091:1:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 875,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 872,
                          "name": "path",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 863,
                          "src": "7095:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                            "typeString": "address[] memory"
                          }
                        },
                        "id": 873,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "7095:11:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 874,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7109:1:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "src": "7095:15:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7091:19:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 971,
                  "initializationExpression": {
                    "assignments": [
                      869
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 869,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 971,
                        "src": "7083:6:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 868,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "7083:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 870,
                    "initialValue": null,
                    "nodeType": "VariableDeclarationStatement",
                    "src": "7083:6:1"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 878,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "7112:3:1",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 877,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 869,
                        "src": "7112:1:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 879,
                    "nodeType": "ExpressionStatement",
                    "src": "7112:3:1"
                  },
                  "nodeType": "ForStatement",
                  "src": "7078:609:1"
                }
              ]
            },
            "documentation": null,
            "id": 973,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_swap",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 866,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 860,
                  "mutability": "mutable",
                  "name": "amounts",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 973,
                  "src": "7001:21:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 858,
                      "name": "uint",
                      "nodeType": "ElementaryTypeName",
                      "src": "7001:4:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 859,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "7001:6:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 863,
                  "mutability": "mutable",
                  "name": "path",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 973,
                  "src": "7024:21:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 861,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "7024:7:1",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 862,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "7024:9:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 865,
                  "mutability": "mutable",
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 973,
                  "src": "7047:11:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 864,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7047:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7000:59:1"
            },
            "returnParameters": {
              "id": 867,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7068:0:1"
            },
            "scope": 1627,
            "src": "6986:707:1",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "private"
          },
          {
            "baseFunctions": [
              3936
            ],
            "body": {
              "id": 1044,
              "nodeType": "Block",
              "src": "7931:373:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1001,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 994,
                      "name": "amounts",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 992,
                      "src": "7941:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                        "typeString": "uint256[] memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 997,
                          "name": "factory",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 182,
                          "src": "7989:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 998,
                          "name": "amountIn",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 975,
                          "src": "7998:8:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 999,
                          "name": "path",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 980,
                          "src": "8008:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                            "typeString": "address[] calldata"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                            "typeString": "address[] calldata"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 995,
                          "name": "MoonwalkerswapV2Library",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4719,
                          "src": "7951:23:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_MoonwalkerswapV2Library_$4719_$",
                            "typeString": "type(library MoonwalkerswapV2Library)"
                          }
                        },
                        "id": 996,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "getAmountsOut",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 4633,
                        "src": "7951:37:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$_t_array$_t_address_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                          "typeString": "function (address,uint256,address[] memory) view returns (uint256[] memory)"
                        }
                      },
                      "id": 1000,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7951:62:1",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                        "typeString": "uint256[] memory"
                      }
                    },
                    "src": "7941:72:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  },
                  "id": 1002,
                  "nodeType": "ExpressionStatement",
                  "src": "7941:72:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1011,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 1004,
                            "name": "amounts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 992,
                            "src": "8031:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                              "typeString": "uint256[] memory"
                            }
                          },
                          "id": 1009,
                          "indexExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1008,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1005,
                                "name": "amounts",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 992,
                                "src": "8039:7:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                  "typeString": "uint256[] memory"
                                }
                              },
                              "id": 1006,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "8039:14:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 1007,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "8056:1:1",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "8039:18:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "8031:27:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 1010,
                          "name": "amountOutMin",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 977,
                          "src": "8062:12:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "8031:43:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4d6f6f6e77616c6b6572737761705632526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e54",
                        "id": 1012,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8076:52:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_731a86f993ae4871030ec3ef0201a3d29bdf48ac3eb60fad6c37632dfa349dd5",
                          "typeString": "literal_string \"MoonwalkerswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT\""
                        },
                        "value": "MoonwalkerswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_731a86f993ae4871030ec3ef0201a3d29bdf48ac3eb60fad6c37632dfa349dd5",
                          "typeString": "literal_string \"MoonwalkerswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT\""
                        }
                      ],
                      "id": 1003,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "8023:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1013,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8023:106:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1014,
                  "nodeType": "ExpressionStatement",
                  "src": "8023:106:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 1018,
                          "name": "path",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 980,
                          "src": "8171:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                            "typeString": "address[] calldata"
                          }
                        },
                        "id": 1020,
                        "indexExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1019,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "8176:1:1",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "8171:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1021,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "8180:3:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 1022,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "8180:10:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1025,
                            "name": "factory",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 182,
                            "src": "8224:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1026,
                              "name": "path",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 980,
                              "src": "8233:4:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                "typeString": "address[] calldata"
                              }
                            },
                            "id": 1028,
                            "indexExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 1027,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "8238:1:1",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "8233:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1029,
                              "name": "path",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 980,
                              "src": "8242:4:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                "typeString": "address[] calldata"
                              }
                            },
                            "id": 1031,
                            "indexExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 1030,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "8247:1:1",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "8242:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 1023,
                            "name": "MoonwalkerswapV2Library",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4719,
                            "src": "8192:23:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_MoonwalkerswapV2Library_$4719_$",
                              "typeString": "type(library MoonwalkerswapV2Library)"
                            }
                          },
                          "id": 1024,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "pairFor",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 4343,
                          "src": "8192:31:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_address_$returns$_t_address_$",
                            "typeString": "function (address,address,address) pure returns (address)"
                          }
                        },
                        "id": 1032,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8192:58:1",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 1033,
                          "name": "amounts",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 992,
                          "src": "8252:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        },
                        "id": 1035,
                        "indexExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1034,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "8260:1:1",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "8252:10:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1015,
                        "name": "TransferHelper",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8239,
                        "src": "8139:14:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_TransferHelper_$8239_$",
                          "typeString": "type(library TransferHelper)"
                        }
                      },
                      "id": 1017,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "safeTransferFrom",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8213,
                      "src": "8139:31:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,address,uint256)"
                      }
                    },
                    "id": 1036,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8139:124:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1037,
                  "nodeType": "ExpressionStatement",
                  "src": "8139:124:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1039,
                        "name": "amounts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 992,
                        "src": "8279:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1040,
                        "name": "path",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 980,
                        "src": "8288:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[] calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1041,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 982,
                        "src": "8294:2:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        },
                        {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[] calldata"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 1038,
                      "name": "_swap",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 973,
                      "src": "8273:5:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$_t_address_$returns$__$",
                        "typeString": "function (uint256[] memory,address[] memory,address)"
                      }
                    },
                    "id": 1042,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8273:24:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1043,
                  "nodeType": "ExpressionStatement",
                  "src": "8273:24:1"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "38ed1739",
            "id": 1045,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 988,
                    "name": "deadline",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 984,
                    "src": "7889:8:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 989,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 987,
                  "name": "ensure",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 199,
                  "src": "7882:6:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7882:16:1"
              }
            ],
            "name": "swapExactTokensForTokens",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 986,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "7873:8:1"
            },
            "parameters": {
              "id": 985,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 975,
                  "mutability": "mutable",
                  "name": "amountIn",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1045,
                  "src": "7741:13:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 974,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "7741:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 977,
                  "mutability": "mutable",
                  "name": "amountOutMin",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1045,
                  "src": "7764:17:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 976,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "7764:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 980,
                  "mutability": "mutable",
                  "name": "path",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1045,
                  "src": "7791:23:1",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 978,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "7791:7:1",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 979,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "7791:9:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 982,
                  "mutability": "mutable",
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1045,
                  "src": "7824:10:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 981,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7824:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 984,
                  "mutability": "mutable",
                  "name": "deadline",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1045,
                  "src": "7844:13:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 983,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "7844:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7731:132:1"
            },
            "returnParameters": {
              "id": 993,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 992,
                  "mutability": "mutable",
                  "name": "amounts",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1045,
                  "src": "7908:21:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 990,
                      "name": "uint",
                      "nodeType": "ElementaryTypeName",
                      "src": "7908:4:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 991,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "7908:6:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7907:23:1"
            },
            "scope": 1627,
            "src": "7698:606:1",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              3953
            ],
            "body": {
              "id": 1113,
              "nodeType": "Block",
              "src": "8542:351:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1073,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1066,
                      "name": "amounts",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1064,
                      "src": "8552:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                        "typeString": "uint256[] memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 1069,
                          "name": "factory",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 182,
                          "src": "8599:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1070,
                          "name": "amountOut",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1047,
                          "src": "8608:9:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1071,
                          "name": "path",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1052,
                          "src": "8619:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                            "typeString": "address[] calldata"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                            "typeString": "address[] calldata"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 1067,
                          "name": "MoonwalkerswapV2Library",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4719,
                          "src": "8562:23:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_MoonwalkerswapV2Library_$4719_$",
                            "typeString": "type(library MoonwalkerswapV2Library)"
                          }
                        },
                        "id": 1068,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "getAmountsIn",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 4718,
                        "src": "8562:36:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$_t_array$_t_address_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                          "typeString": "function (address,uint256,address[] memory) view returns (uint256[] memory)"
                        }
                      },
                      "id": 1072,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8562:62:1",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                        "typeString": "uint256[] memory"
                      }
                    },
                    "src": "8552:72:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  },
                  "id": 1074,
                  "nodeType": "ExpressionStatement",
                  "src": "8552:72:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1080,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 1076,
                            "name": "amounts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1064,
                            "src": "8642:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                              "typeString": "uint256[] memory"
                            }
                          },
                          "id": 1078,
                          "indexExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 1077,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "8650:1:1",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "8642:10:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 1079,
                          "name": "amountInMax",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1049,
                          "src": "8656:11:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "8642:25:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4d6f6f6e77616c6b6572737761705632526f757465723a204558434553534956455f494e5055545f414d4f554e54",
                        "id": 1081,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8669:48:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_28764956f6436edee07992f748e71fb23001e9f660ab59ca28fb88f321f33b9d",
                          "typeString": "literal_string \"MoonwalkerswapV2Router: EXCESSIVE_INPUT_AMOUNT\""
                        },
                        "value": "MoonwalkerswapV2Router: EXCESSIVE_INPUT_AMOUNT"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_28764956f6436edee07992f748e71fb23001e9f660ab59ca28fb88f321f33b9d",
                          "typeString": "literal_string \"MoonwalkerswapV2Router: EXCESSIVE_INPUT_AMOUNT\""
                        }
                      ],
                      "id": 1075,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "8634:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1082,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8634:84:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1083,
                  "nodeType": "ExpressionStatement",
                  "src": "8634:84:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 1087,
                          "name": "path",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1052,
                          "src": "8760:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                            "typeString": "address[] calldata"
                          }
                        },
                        "id": 1089,
                        "indexExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1088,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "8765:1:1",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "8760:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1090,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "8769:3:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 1091,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "8769:10:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1094,
                            "name": "factory",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 182,
                            "src": "8813:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1095,
                              "name": "path",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1052,
                              "src": "8822:4:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                "typeString": "address[] calldata"
                              }
                            },
                            "id": 1097,
                            "indexExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 1096,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "8827:1:1",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "8822:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1098,
                              "name": "path",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1052,
                              "src": "8831:4:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                "typeString": "address[] calldata"
                              }
                            },
                            "id": 1100,
                            "indexExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 1099,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "8836:1:1",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "8831:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 1092,
                            "name": "MoonwalkerswapV2Library",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4719,
                            "src": "8781:23:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_MoonwalkerswapV2Library_$4719_$",
                              "typeString": "type(library MoonwalkerswapV2Library)"
                            }
                          },
                          "id": 1093,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "pairFor",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 4343,
                          "src": "8781:31:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_address_$returns$_t_address_$",
                            "typeString": "function (address,address,address) pure returns (address)"
                          }
                        },
                        "id": 1101,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8781:58:1",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 1102,
                          "name": "amounts",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1064,
                          "src": "8841:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        },
                        "id": 1104,
                        "indexExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1103,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "8849:1:1",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "8841:10:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1084,
                        "name": "TransferHelper",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8239,
                        "src": "8728:14:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_TransferHelper_$8239_$",
                          "typeString": "type(library TransferHelper)"
                        }
                      },
                      "id": 1086,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "safeTransferFrom",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8213,
                      "src": "8728:31:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,address,uint256)"
                      }
                    },
                    "id": 1105,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8728:124:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1106,
                  "nodeType": "ExpressionStatement",
                  "src": "8728:124:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1108,
                        "name": "amounts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1064,
                        "src": "8868:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1109,
                        "name": "path",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1052,
                        "src": "8877:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[] calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1110,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1054,
                        "src": "8883:2:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        },
                        {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[] calldata"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 1107,
                      "name": "_swap",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 973,
                      "src": "8862:5:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$_t_address_$returns$__$",
                        "typeString": "function (uint256[] memory,address[] memory,address)"
                      }
                    },
                    "id": 1111,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8862:24:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1112,
                  "nodeType": "ExpressionStatement",
                  "src": "8862:24:1"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "8803dbee",
            "id": 1114,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 1060,
                    "name": "deadline",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1056,
                    "src": "8500:8:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 1061,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1059,
                  "name": "ensure",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 199,
                  "src": "8493:6:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8493:16:1"
              }
            ],
            "name": "swapTokensForExactTokens",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 1058,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "8484:8:1"
            },
            "parameters": {
              "id": 1057,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1047,
                  "mutability": "mutable",
                  "name": "amountOut",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1114,
                  "src": "8352:14:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1046,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "8352:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1049,
                  "mutability": "mutable",
                  "name": "amountInMax",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1114,
                  "src": "8376:16:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1048,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "8376:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1052,
                  "mutability": "mutable",
                  "name": "path",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1114,
                  "src": "8402:23:1",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1050,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "8402:7:1",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 1051,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "8402:9:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1054,
                  "mutability": "mutable",
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1114,
                  "src": "8435:10:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1053,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8435:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1056,
                  "mutability": "mutable",
                  "name": "deadline",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1114,
                  "src": "8455:13:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1055,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "8455:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8342:132:1"
            },
            "returnParameters": {
              "id": 1065,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1064,
                  "mutability": "mutable",
                  "name": "amounts",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1114,
                  "src": "8519:21:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1062,
                      "name": "uint",
                      "nodeType": "ElementaryTypeName",
                      "src": "8519:4:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1063,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "8519:6:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8518:23:1"
            },
            "scope": 1627,
            "src": "8309:584:1",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              3968
            ],
            "body": {
              "id": 1201,
              "nodeType": "Block",
              "src": "9119:474:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 1138,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 1134,
                            "name": "path",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1119,
                            "src": "9137:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                              "typeString": "address[] calldata"
                            }
                          },
                          "id": 1136,
                          "indexExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 1135,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "9142:1:1",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "9137:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 1137,
                          "name": "WETH",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 185,
                          "src": "9148:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "9137:15:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4d6f6f6e77616c6b6572737761705632526f757465723a20494e56414c49445f50415448",
                        "id": 1139,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9154:38:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_aaa6fa1c87be4547172c5ac8f95f6d29b3dcd844533e4cd43e007d6da104aefe",
                          "typeString": "literal_string \"MoonwalkerswapV2Router: INVALID_PATH\""
                        },
                        "value": "MoonwalkerswapV2Router: INVALID_PATH"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_aaa6fa1c87be4547172c5ac8f95f6d29b3dcd844533e4cd43e007d6da104aefe",
                          "typeString": "literal_string \"MoonwalkerswapV2Router: INVALID_PATH\""
                        }
                      ],
                      "id": 1133,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "9129:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1140,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9129:64:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1141,
                  "nodeType": "ExpressionStatement",
                  "src": "9129:64:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1150,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1142,
                      "name": "amounts",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1131,
                      "src": "9203:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                        "typeString": "uint256[] memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 1145,
                          "name": "factory",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 182,
                          "src": "9251:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1146,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "9260:3:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 1147,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "9260:9:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1148,
                          "name": "path",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1119,
                          "src": "9271:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                            "typeString": "address[] calldata"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                            "typeString": "address[] calldata"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 1143,
                          "name": "MoonwalkerswapV2Library",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4719,
                          "src": "9213:23:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_MoonwalkerswapV2Library_$4719_$",
                            "typeString": "type(library MoonwalkerswapV2Library)"
                          }
                        },
                        "id": 1144,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "getAmountsOut",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 4633,
                        "src": "9213:37:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$_t_array$_t_address_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                          "typeString": "function (address,uint256,address[] memory) view returns (uint256[] memory)"
                        }
                      },
                      "id": 1149,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9213:63:1",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                        "typeString": "uint256[] memory"
                      }
                    },
                    "src": "9203:73:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  },
                  "id": 1151,
                  "nodeType": "ExpressionStatement",
                  "src": "9203:73:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1160,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 1153,
                            "name": "amounts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1131,
                            "src": "9294:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                              "typeString": "uint256[] memory"
                            }
                          },
                          "id": 1158,
                          "indexExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1157,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1154,
                                "name": "amounts",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1131,
                                "src": "9302:7:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                  "typeString": "uint256[] memory"
                                }
                              },
                              "id": 1155,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "9302:14:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 1156,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "9319:1:1",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "9302:18:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "9294:27:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 1159,
                          "name": "amountOutMin",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1116,
                          "src": "9325:12:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "9294:43:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4d6f6f6e77616c6b6572737761705632526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e54",
                        "id": 1161,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9339:52:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_731a86f993ae4871030ec3ef0201a3d29bdf48ac3eb60fad6c37632dfa349dd5",
                          "typeString": "literal_string \"MoonwalkerswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT\""
                        },
                        "value": "MoonwalkerswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_731a86f993ae4871030ec3ef0201a3d29bdf48ac3eb60fad6c37632dfa349dd5",
                          "typeString": "literal_string \"MoonwalkerswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT\""
                        }
                      ],
                      "id": 1152,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "9286:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1162,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9286:106:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1163,
                  "nodeType": "ExpressionStatement",
                  "src": "9286:106:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1165,
                              "name": "WETH",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 185,
                              "src": "9408:4:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 1164,
                            "name": "IWETH",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4181,
                            "src": "9402:5:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_IWETH_$4181_$",
                              "typeString": "type(contract IWETH)"
                            }
                          },
                          "id": 1166,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9402:11:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IWETH_$4181",
                            "typeString": "contract IWETH"
                          }
                        },
                        "id": 1167,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "deposit",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 4166,
                        "src": "9402:19:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_payable$__$returns$__$",
                          "typeString": "function () payable external"
                        }
                      },
                      "id": 1171,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "names": [
                        "value"
                      ],
                      "nodeType": "FunctionCallOptions",
                      "options": [
                        {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 1168,
                            "name": "amounts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1131,
                            "src": "9429:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                              "typeString": "uint256[] memory"
                            }
                          },
                          "id": 1170,
                          "indexExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 1169,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "9437:1:1",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "9429:10:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "src": "9402:38:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_payable$__$returns$__$value",
                        "typeString": "function () payable external"
                      }
                    },
                    "id": 1172,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9402:40:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1173,
                  "nodeType": "ExpressionStatement",
                  "src": "9402:40:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 1181,
                                "name": "factory",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 182,
                                "src": "9512:7:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 1182,
                                  "name": "path",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1119,
                                  "src": "9521:4:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                    "typeString": "address[] calldata"
                                  }
                                },
                                "id": 1184,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 1183,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "9526:1:1",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "9521:7:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 1185,
                                  "name": "path",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1119,
                                  "src": "9530:4:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                    "typeString": "address[] calldata"
                                  }
                                },
                                "id": 1187,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "31",
                                  "id": 1186,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "9535:1:1",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "9530:7:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 1179,
                                "name": "MoonwalkerswapV2Library",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4719,
                                "src": "9480:23:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_MoonwalkerswapV2Library_$4719_$",
                                  "typeString": "type(library MoonwalkerswapV2Library)"
                                }
                              },
                              "id": 1180,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "pairFor",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 4343,
                              "src": "9480:31:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_address_$returns$_t_address_$",
                                "typeString": "function (address,address,address) pure returns (address)"
                              }
                            },
                            "id": 1188,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "9480:58:1",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1189,
                              "name": "amounts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1131,
                              "src": "9540:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            "id": 1191,
                            "indexExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 1190,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "9548:1:1",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "9540:10:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 1176,
                                "name": "WETH",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 185,
                                "src": "9465:4:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 1175,
                              "name": "IWETH",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4181,
                              "src": "9459:5:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_IWETH_$4181_$",
                                "typeString": "type(contract IWETH)"
                              }
                            },
                            "id": 1177,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "9459:11:1",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IWETH_$4181",
                              "typeString": "contract IWETH"
                            }
                          },
                          "id": 1178,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "transfer",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 4175,
                          "src": "9459:20:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,uint256) external returns (bool)"
                          }
                        },
                        "id": 1192,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9459:92:1",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1174,
                      "name": "assert",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -3,
                      "src": "9452:6:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_assert_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1193,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9452:100:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1194,
                  "nodeType": "ExpressionStatement",
                  "src": "9452:100:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1196,
                        "name": "amounts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1131,
                        "src": "9568:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1197,
                        "name": "path",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1119,
                        "src": "9577:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[] calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1198,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1121,
                        "src": "9583:2:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        },
                        {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[] calldata"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 1195,
                      "name": "_swap",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 973,
                      "src": "9562:5:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$_t_address_$returns$__$",
                        "typeString": "function (uint256[] memory,address[] memory,address)"
                      }
                    },
                    "id": 1199,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9562:24:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1200,
                  "nodeType": "ExpressionStatement",
                  "src": "9562:24:1"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "7ff36ab5",
            "id": 1202,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 1127,
                    "name": "deadline",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1123,
                    "src": "9065:8:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 1128,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1126,
                  "name": "ensure",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 199,
                  "src": "9058:6:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "9058:16:1"
              }
            ],
            "name": "swapExactETHForTokens",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 1125,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "9025:8:1"
            },
            "parameters": {
              "id": 1124,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1116,
                  "mutability": "mutable",
                  "name": "amountOutMin",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1202,
                  "src": "8929:17:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1115,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "8929:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1119,
                  "mutability": "mutable",
                  "name": "path",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1202,
                  "src": "8948:23:1",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1117,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "8948:7:1",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 1118,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "8948:9:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1121,
                  "mutability": "mutable",
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1202,
                  "src": "8973:10:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1120,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8973:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1123,
                  "mutability": "mutable",
                  "name": "deadline",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1202,
                  "src": "8985:13:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1122,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "8985:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8928:71:1"
            },
            "returnParameters": {
              "id": 1132,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1131,
                  "mutability": "mutable",
                  "name": "amounts",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1202,
                  "src": "9092:21:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1129,
                      "name": "uint",
                      "nodeType": "ElementaryTypeName",
                      "src": "9092:4:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1130,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "9092:6:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9091:23:1"
            },
            "scope": 1627,
            "src": "8898:695:1",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              3985
            ],
            "body": {
              "id": 1309,
              "nodeType": "Block",
              "src": "9818:582:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 1231,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 1224,
                            "name": "path",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1209,
                            "src": "9836:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                              "typeString": "address[] calldata"
                            }
                          },
                          "id": 1229,
                          "indexExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1228,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1225,
                                "name": "path",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1209,
                                "src": "9841:4:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                  "typeString": "address[] calldata"
                                }
                              },
                              "id": 1226,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "9841:11:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 1227,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "9855:1:1",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "9841:15:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "9836:21:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 1230,
                          "name": "WETH",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 185,
                          "src": "9861:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "9836:29:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4d6f6f6e77616c6b6572737761705632526f757465723a20494e56414c49445f50415448",
                        "id": 1232,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9867:38:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_aaa6fa1c87be4547172c5ac8f95f6d29b3dcd844533e4cd43e007d6da104aefe",
                          "typeString": "literal_string \"MoonwalkerswapV2Router: INVALID_PATH\""
                        },
                        "value": "MoonwalkerswapV2Router: INVALID_PATH"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_aaa6fa1c87be4547172c5ac8f95f6d29b3dcd844533e4cd43e007d6da104aefe",
                          "typeString": "literal_string \"MoonwalkerswapV2Router: INVALID_PATH\""
                        }
                      ],
                      "id": 1223,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "9828:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1233,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9828:78:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1234,
                  "nodeType": "ExpressionStatement",
                  "src": "9828:78:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1242,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1235,
                      "name": "amounts",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1221,
                      "src": "9916:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                        "typeString": "uint256[] memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 1238,
                          "name": "factory",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 182,
                          "src": "9963:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1239,
                          "name": "amountOut",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1204,
                          "src": "9972:9:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1240,
                          "name": "path",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1209,
                          "src": "9983:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                            "typeString": "address[] calldata"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                            "typeString": "address[] calldata"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 1236,
                          "name": "MoonwalkerswapV2Library",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4719,
                          "src": "9926:23:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_MoonwalkerswapV2Library_$4719_$",
                            "typeString": "type(library MoonwalkerswapV2Library)"
                          }
                        },
                        "id": 1237,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "getAmountsIn",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 4718,
                        "src": "9926:36:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$_t_array$_t_address_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                          "typeString": "function (address,uint256,address[] memory) view returns (uint256[] memory)"
                        }
                      },
                      "id": 1241,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9926:62:1",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                        "typeString": "uint256[] memory"
                      }
                    },
                    "src": "9916:72:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  },
                  "id": 1243,
                  "nodeType": "ExpressionStatement",
                  "src": "9916:72:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1249,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 1245,
                            "name": "amounts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1221,
                            "src": "10006:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                              "typeString": "uint256[] memory"
                            }
                          },
                          "id": 1247,
                          "indexExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 1246,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "10014:1:1",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "10006:10:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 1248,
                          "name": "amountInMax",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1206,
                          "src": "10020:11:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "10006:25:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4d6f6f6e77616c6b6572737761705632526f757465723a204558434553534956455f494e5055545f414d4f554e54",
                        "id": 1250,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10033:48:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_28764956f6436edee07992f748e71fb23001e9f660ab59ca28fb88f321f33b9d",
                          "typeString": "literal_string \"MoonwalkerswapV2Router: EXCESSIVE_INPUT_AMOUNT\""
                        },
                        "value": "MoonwalkerswapV2Router: EXCESSIVE_INPUT_AMOUNT"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_28764956f6436edee07992f748e71fb23001e9f660ab59ca28fb88f321f33b9d",
                          "typeString": "literal_string \"MoonwalkerswapV2Router: EXCESSIVE_INPUT_AMOUNT\""
                        }
                      ],
                      "id": 1244,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "9998:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1251,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9998:84:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1252,
                  "nodeType": "ExpressionStatement",
                  "src": "9998:84:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 1256,
                          "name": "path",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1209,
                          "src": "10124:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                            "typeString": "address[] calldata"
                          }
                        },
                        "id": 1258,
                        "indexExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1257,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "10129:1:1",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "10124:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1259,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "10133:3:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 1260,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "10133:10:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1263,
                            "name": "factory",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 182,
                            "src": "10177:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1264,
                              "name": "path",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1209,
                              "src": "10186:4:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                "typeString": "address[] calldata"
                              }
                            },
                            "id": 1266,
                            "indexExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 1265,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "10191:1:1",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "10186:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1267,
                              "name": "path",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1209,
                              "src": "10195:4:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                "typeString": "address[] calldata"
                              }
                            },
                            "id": 1269,
                            "indexExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 1268,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "10200:1:1",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "10195:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 1261,
                            "name": "MoonwalkerswapV2Library",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4719,
                            "src": "10145:23:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_MoonwalkerswapV2Library_$4719_$",
                              "typeString": "type(library MoonwalkerswapV2Library)"
                            }
                          },
                          "id": 1262,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "pairFor",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 4343,
                          "src": "10145:31:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_address_$returns$_t_address_$",
                            "typeString": "function (address,address,address) pure returns (address)"
                          }
                        },
                        "id": 1270,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "10145:58:1",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 1271,
                          "name": "amounts",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1221,
                          "src": "10205:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        },
                        "id": 1273,
                        "indexExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1272,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "10213:1:1",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "10205:10:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1253,
                        "name": "TransferHelper",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8239,
                        "src": "10092:14:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_TransferHelper_$8239_$",
                          "typeString": "type(library TransferHelper)"
                        }
                      },
                      "id": 1255,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "safeTransferFrom",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8213,
                      "src": "10092:31:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,address,uint256)"
                      }
                    },
                    "id": 1274,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10092:124:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1275,
                  "nodeType": "ExpressionStatement",
                  "src": "10092:124:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1277,
                        "name": "amounts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1221,
                        "src": "10232:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1278,
                        "name": "path",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1209,
                        "src": "10241:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[] calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1281,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -28,
                            "src": "10255:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_MoonwalkerswapV2Router01_$1627",
                              "typeString": "contract MoonwalkerswapV2Router01"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_MoonwalkerswapV2Router01_$1627",
                              "typeString": "contract MoonwalkerswapV2Router01"
                            }
                          ],
                          "id": 1280,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "10247:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 1279,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "10247:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 1282,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "10247:13:1",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        },
                        {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[] calldata"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 1276,
                      "name": "_swap",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 973,
                      "src": "10226:5:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$_t_address_$returns$__$",
                        "typeString": "function (uint256[] memory,address[] memory,address)"
                      }
                    },
                    "id": 1283,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10226:35:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1284,
                  "nodeType": "ExpressionStatement",
                  "src": "10226:35:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 1289,
                          "name": "amounts",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1221,
                          "src": "10292:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        },
                        "id": 1294,
                        "indexExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1293,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1290,
                              "name": "amounts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1221,
                              "src": "10300:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            "id": 1291,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "10300:14:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 1292,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "10317:1:1",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "10300:18:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "10292:27:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1286,
                            "name": "WETH",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 185,
                            "src": "10277:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 1285,
                          "name": "IWETH",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4181,
                          "src": "10271:5:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IWETH_$4181_$",
                            "typeString": "type(contract IWETH)"
                          }
                        },
                        "id": 1287,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "10271:11:1",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IWETH_$4181",
                          "typeString": "contract IWETH"
                        }
                      },
                      "id": 1288,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "withdraw",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4180,
                      "src": "10271:20:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256) external"
                      }
                    },
                    "id": 1295,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10271:49:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1296,
                  "nodeType": "ExpressionStatement",
                  "src": "10271:49:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1300,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1211,
                        "src": "10361:2:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 1301,
                          "name": "amounts",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1221,
                          "src": "10365:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        },
                        "id": 1306,
                        "indexExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1305,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1302,
                              "name": "amounts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1221,
                              "src": "10373:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            "id": 1303,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "10373:14:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 1304,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "10390:1:1",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "10373:18:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "10365:27:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1297,
                        "name": "TransferHelper",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8239,
                        "src": "10330:14:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_TransferHelper_$8239_$",
                          "typeString": "type(library TransferHelper)"
                        }
                      },
                      "id": 1299,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "safeTransferETH",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8238,
                      "src": "10330:30:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 1307,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10330:63:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1308,
                  "nodeType": "ExpressionStatement",
                  "src": "10330:63:1"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "4a25d94a",
            "id": 1310,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 1217,
                    "name": "deadline",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1213,
                    "src": "9764:8:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 1218,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1216,
                  "name": "ensure",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 199,
                  "src": "9757:6:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "9757:16:1"
              }
            ],
            "name": "swapTokensForExactETH",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 1215,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "9740:8:1"
            },
            "parameters": {
              "id": 1214,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1204,
                  "mutability": "mutable",
                  "name": "amountOut",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1310,
                  "src": "9629:14:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1203,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "9629:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1206,
                  "mutability": "mutable",
                  "name": "amountInMax",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1310,
                  "src": "9645:16:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1205,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "9645:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1209,
                  "mutability": "mutable",
                  "name": "path",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1310,
                  "src": "9663:23:1",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1207,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "9663:7:1",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 1208,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "9663:9:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1211,
                  "mutability": "mutable",
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1310,
                  "src": "9688:10:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1210,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9688:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1213,
                  "mutability": "mutable",
                  "name": "deadline",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1310,
                  "src": "9700:13:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1212,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "9700:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9628:86:1"
            },
            "returnParameters": {
              "id": 1222,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1221,
                  "mutability": "mutable",
                  "name": "amounts",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1310,
                  "src": "9791:21:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1219,
                      "name": "uint",
                      "nodeType": "ElementaryTypeName",
                      "src": "9791:4:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1220,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "9791:6:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9790:23:1"
            },
            "scope": 1627,
            "src": "9598:802:1",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              4002
            ],
            "body": {
              "id": 1420,
              "nodeType": "Block",
              "src": "10625:604:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 1339,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 1332,
                            "name": "path",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1317,
                            "src": "10643:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                              "typeString": "address[] calldata"
                            }
                          },
                          "id": 1337,
                          "indexExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1336,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1333,
                                "name": "path",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1317,
                                "src": "10648:4:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                  "typeString": "address[] calldata"
                                }
                              },
                              "id": 1334,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "10648:11:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 1335,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "10662:1:1",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "10648:15:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "10643:21:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 1338,
                          "name": "WETH",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 185,
                          "src": "10668:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "10643:29:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4d6f6f6e77616c6b6572737761705632526f757465723a20494e56414c49445f50415448",
                        "id": 1340,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10674:38:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_aaa6fa1c87be4547172c5ac8f95f6d29b3dcd844533e4cd43e007d6da104aefe",
                          "typeString": "literal_string \"MoonwalkerswapV2Router: INVALID_PATH\""
                        },
                        "value": "MoonwalkerswapV2Router: INVALID_PATH"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_aaa6fa1c87be4547172c5ac8f95f6d29b3dcd844533e4cd43e007d6da104aefe",
                          "typeString": "literal_string \"MoonwalkerswapV2Router: INVALID_PATH\""
                        }
                      ],
                      "id": 1331,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "10635:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1341,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10635:78:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1342,
                  "nodeType": "ExpressionStatement",
                  "src": "10635:78:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1350,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1343,
                      "name": "amounts",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1329,
                      "src": "10723:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                        "typeString": "uint256[] memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 1346,
                          "name": "factory",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 182,
                          "src": "10771:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1347,
                          "name": "amountIn",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1312,
                          "src": "10780:8:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1348,
                          "name": "path",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1317,
                          "src": "10790:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                            "typeString": "address[] calldata"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                            "typeString": "address[] calldata"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 1344,
                          "name": "MoonwalkerswapV2Library",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4719,
                          "src": "10733:23:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_MoonwalkerswapV2Library_$4719_$",
                            "typeString": "type(library MoonwalkerswapV2Library)"
                          }
                        },
                        "id": 1345,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "getAmountsOut",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 4633,
                        "src": "10733:37:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$_t_array$_t_address_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                          "typeString": "function (address,uint256,address[] memory) view returns (uint256[] memory)"
                        }
                      },
                      "id": 1349,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "10733:62:1",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                        "typeString": "uint256[] memory"
                      }
                    },
                    "src": "10723:72:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  },
                  "id": 1351,
                  "nodeType": "ExpressionStatement",
                  "src": "10723:72:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1360,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 1353,
                            "name": "amounts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1329,
                            "src": "10813:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                              "typeString": "uint256[] memory"
                            }
                          },
                          "id": 1358,
                          "indexExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1357,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1354,
                                "name": "amounts",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1329,
                                "src": "10821:7:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                  "typeString": "uint256[] memory"
                                }
                              },
                              "id": 1355,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "10821:14:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 1356,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "10838:1:1",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "10821:18:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "10813:27:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 1359,
                          "name": "amountOutMin",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1314,
                          "src": "10844:12:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "10813:43:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4d6f6f6e77616c6b6572737761705632526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e54",
                        "id": 1361,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10858:52:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_731a86f993ae4871030ec3ef0201a3d29bdf48ac3eb60fad6c37632dfa349dd5",
                          "typeString": "literal_string \"MoonwalkerswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT\""
                        },
                        "value": "MoonwalkerswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_731a86f993ae4871030ec3ef0201a3d29bdf48ac3eb60fad6c37632dfa349dd5",
                          "typeString": "literal_string \"MoonwalkerswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT\""
                        }
                      ],
                      "id": 1352,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "10805:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1362,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10805:106:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1363,
                  "nodeType": "ExpressionStatement",
                  "src": "10805:106:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 1367,
                          "name": "path",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1317,
                          "src": "10953:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                            "typeString": "address[] calldata"
                          }
                        },
                        "id": 1369,
                        "indexExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1368,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "10958:1:1",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "10953:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1370,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "10962:3:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 1371,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "10962:10:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1374,
                            "name": "factory",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 182,
                            "src": "11006:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1375,
                              "name": "path",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1317,
                              "src": "11015:4:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                "typeString": "address[] calldata"
                              }
                            },
                            "id": 1377,
                            "indexExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 1376,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "11020:1:1",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "11015:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1378,
                              "name": "path",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1317,
                              "src": "11024:4:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                "typeString": "address[] calldata"
                              }
                            },
                            "id": 1380,
                            "indexExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 1379,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "11029:1:1",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "11024:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 1372,
                            "name": "MoonwalkerswapV2Library",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4719,
                            "src": "10974:23:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_MoonwalkerswapV2Library_$4719_$",
                              "typeString": "type(library MoonwalkerswapV2Library)"
                            }
                          },
                          "id": 1373,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "pairFor",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 4343,
                          "src": "10974:31:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_address_$returns$_t_address_$",
                            "typeString": "function (address,address,address) pure returns (address)"
                          }
                        },
                        "id": 1381,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "10974:58:1",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 1382,
                          "name": "amounts",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1329,
                          "src": "11034:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        },
                        "id": 1384,
                        "indexExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1383,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11042:1:1",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "11034:10:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1364,
                        "name": "TransferHelper",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8239,
                        "src": "10921:14:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_TransferHelper_$8239_$",
                          "typeString": "type(library TransferHelper)"
                        }
                      },
                      "id": 1366,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "safeTransferFrom",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8213,
                      "src": "10921:31:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,address,uint256)"
                      }
                    },
                    "id": 1385,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10921:124:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1386,
                  "nodeType": "ExpressionStatement",
                  "src": "10921:124:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1388,
                        "name": "amounts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1329,
                        "src": "11061:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1389,
                        "name": "path",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1317,
                        "src": "11070:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[] calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1392,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -28,
                            "src": "11084:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_MoonwalkerswapV2Router01_$1627",
                              "typeString": "contract MoonwalkerswapV2Router01"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_MoonwalkerswapV2Router01_$1627",
                              "typeString": "contract MoonwalkerswapV2Router01"
                            }
                          ],
                          "id": 1391,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "11076:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 1390,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "11076:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 1393,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "11076:13:1",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        },
                        {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[] calldata"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 1387,
                      "name": "_swap",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 973,
                      "src": "11055:5:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$_t_address_$returns$__$",
                        "typeString": "function (uint256[] memory,address[] memory,address)"
                      }
                    },
                    "id": 1394,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11055:35:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1395,
                  "nodeType": "ExpressionStatement",
                  "src": "11055:35:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 1400,
                          "name": "amounts",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1329,
                          "src": "11121:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        },
                        "id": 1405,
                        "indexExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1404,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1401,
                              "name": "amounts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1329,
                              "src": "11129:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            "id": 1402,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "11129:14:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 1403,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "11146:1:1",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "11129:18:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "11121:27:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1397,
                            "name": "WETH",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 185,
                            "src": "11106:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 1396,
                          "name": "IWETH",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4181,
                          "src": "11100:5:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IWETH_$4181_$",
                            "typeString": "type(contract IWETH)"
                          }
                        },
                        "id": 1398,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "11100:11:1",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IWETH_$4181",
                          "typeString": "contract IWETH"
                        }
                      },
                      "id": 1399,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "withdraw",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4180,
                      "src": "11100:20:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256) external"
                      }
                    },
                    "id": 1406,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11100:49:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1407,
                  "nodeType": "ExpressionStatement",
                  "src": "11100:49:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1411,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1319,
                        "src": "11190:2:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 1412,
                          "name": "amounts",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1329,
                          "src": "11194:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        },
                        "id": 1417,
                        "indexExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1416,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1413,
                              "name": "amounts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1329,
                              "src": "11202:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            "id": 1414,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "11202:14:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 1415,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "11219:1:1",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "11202:18:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "11194:27:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1408,
                        "name": "TransferHelper",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8239,
                        "src": "11159:14:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_TransferHelper_$8239_$",
                          "typeString": "type(library TransferHelper)"
                        }
                      },
                      "id": 1410,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "safeTransferETH",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8238,
                      "src": "11159:30:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 1418,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11159:63:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1419,
                  "nodeType": "ExpressionStatement",
                  "src": "11159:63:1"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "18cbafe5",
            "id": 1421,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 1325,
                    "name": "deadline",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1321,
                    "src": "10571:8:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 1326,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1324,
                  "name": "ensure",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 199,
                  "src": "10564:6:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "10564:16:1"
              }
            ],
            "name": "swapExactTokensForETH",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 1323,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "10547:8:1"
            },
            "parameters": {
              "id": 1322,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1312,
                  "mutability": "mutable",
                  "name": "amountIn",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1421,
                  "src": "10436:13:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1311,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "10436:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1314,
                  "mutability": "mutable",
                  "name": "amountOutMin",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1421,
                  "src": "10451:17:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1313,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "10451:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1317,
                  "mutability": "mutable",
                  "name": "path",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1421,
                  "src": "10470:23:1",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1315,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "10470:7:1",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 1316,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "10470:9:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1319,
                  "mutability": "mutable",
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1421,
                  "src": "10495:10:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1318,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10495:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1321,
                  "mutability": "mutable",
                  "name": "deadline",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1421,
                  "src": "10507:13:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1320,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "10507:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10435:86:1"
            },
            "returnParameters": {
              "id": 1330,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1329,
                  "mutability": "mutable",
                  "name": "amounts",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1421,
                  "src": "10598:21:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1327,
                      "name": "uint",
                      "nodeType": "ElementaryTypeName",
                      "src": "10598:4:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1328,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "10598:6:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10597:23:1"
            },
            "scope": 1627,
            "src": "10405:824:1",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              4017
            ],
            "body": {
              "id": 1525,
              "nodeType": "Block",
              "src": "11452:580:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 1445,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 1441,
                            "name": "path",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1426,
                            "src": "11470:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                              "typeString": "address[] calldata"
                            }
                          },
                          "id": 1443,
                          "indexExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 1442,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "11475:1:1",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "11470:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 1444,
                          "name": "WETH",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 185,
                          "src": "11481:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "11470:15:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4d6f6f6e77616c6b6572737761705632526f757465723a20494e56414c49445f50415448",
                        "id": 1446,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11487:38:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_aaa6fa1c87be4547172c5ac8f95f6d29b3dcd844533e4cd43e007d6da104aefe",
                          "typeString": "literal_string \"MoonwalkerswapV2Router: INVALID_PATH\""
                        },
                        "value": "MoonwalkerswapV2Router: INVALID_PATH"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_aaa6fa1c87be4547172c5ac8f95f6d29b3dcd844533e4cd43e007d6da104aefe",
                          "typeString": "literal_string \"MoonwalkerswapV2Router: INVALID_PATH\""
                        }
                      ],
                      "id": 1440,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "11462:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1447,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11462:64:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1448,
                  "nodeType": "ExpressionStatement",
                  "src": "11462:64:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1456,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1449,
                      "name": "amounts",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1438,
                      "src": "11536:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                        "typeString": "uint256[] memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 1452,
                          "name": "factory",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 182,
                          "src": "11583:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1453,
                          "name": "amountOut",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1423,
                          "src": "11592:9:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1454,
                          "name": "path",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1426,
                          "src": "11603:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                            "typeString": "address[] calldata"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                            "typeString": "address[] calldata"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 1450,
                          "name": "MoonwalkerswapV2Library",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4719,
                          "src": "11546:23:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_MoonwalkerswapV2Library_$4719_$",
                            "typeString": "type(library MoonwalkerswapV2Library)"
                          }
                        },
                        "id": 1451,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "getAmountsIn",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 4718,
                        "src": "11546:36:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$_t_array$_t_address_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                          "typeString": "function (address,uint256,address[] memory) view returns (uint256[] memory)"
                        }
                      },
                      "id": 1455,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11546:62:1",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                        "typeString": "uint256[] memory"
                      }
                    },
                    "src": "11536:72:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  },
                  "id": 1457,
                  "nodeType": "ExpressionStatement",
                  "src": "11536:72:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1464,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 1459,
                            "name": "amounts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1438,
                            "src": "11626:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                              "typeString": "uint256[] memory"
                            }
                          },
                          "id": 1461,
                          "indexExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 1460,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "11634:1:1",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "11626:10:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1462,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "11640:3:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 1463,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "11640:9:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "11626:23:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4d6f6f6e77616c6b6572737761705632526f757465723a204558434553534956455f494e5055545f414d4f554e54",
                        "id": 1465,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11651:48:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_28764956f6436edee07992f748e71fb23001e9f660ab59ca28fb88f321f33b9d",
                          "typeString": "literal_string \"MoonwalkerswapV2Router: EXCESSIVE_INPUT_AMOUNT\""
                        },
                        "value": "MoonwalkerswapV2Router: EXCESSIVE_INPUT_AMOUNT"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_28764956f6436edee07992f748e71fb23001e9f660ab59ca28fb88f321f33b9d",
                          "typeString": "literal_string \"MoonwalkerswapV2Router: EXCESSIVE_INPUT_AMOUNT\""
                        }
                      ],
                      "id": 1458,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "11618:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1466,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11618:82:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1467,
                  "nodeType": "ExpressionStatement",
                  "src": "11618:82:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1469,
                              "name": "WETH",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 185,
                              "src": "11716:4:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 1468,
                            "name": "IWETH",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4181,
                            "src": "11710:5:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_IWETH_$4181_$",
                              "typeString": "type(contract IWETH)"
                            }
                          },
                          "id": 1470,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11710:11:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IWETH_$4181",
                            "typeString": "contract IWETH"
                          }
                        },
                        "id": 1471,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "deposit",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 4166,
                        "src": "11710:19:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_payable$__$returns$__$",
                          "typeString": "function () payable external"
                        }
                      },
                      "id": 1475,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "names": [
                        "value"
                      ],
                      "nodeType": "FunctionCallOptions",
                      "options": [
                        {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 1472,
                            "name": "amounts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1438,
                            "src": "11737:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                              "typeString": "uint256[] memory"
                            }
                          },
                          "id": 1474,
                          "indexExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 1473,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "11745:1:1",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "11737:10:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "src": "11710:38:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_payable$__$returns$__$value",
                        "typeString": "function () payable external"
                      }
                    },
                    "id": 1476,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11710:40:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1477,
                  "nodeType": "ExpressionStatement",
                  "src": "11710:40:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 1485,
                                "name": "factory",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 182,
                                "src": "11820:7:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 1486,
                                  "name": "path",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1426,
                                  "src": "11829:4:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                    "typeString": "address[] calldata"
                                  }
                                },
                                "id": 1488,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 1487,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "11834:1:1",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "11829:7:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 1489,
                                  "name": "path",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1426,
                                  "src": "11838:4:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                    "typeString": "address[] calldata"
                                  }
                                },
                                "id": 1491,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "31",
                                  "id": 1490,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "11843:1:1",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "11838:7:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 1483,
                                "name": "MoonwalkerswapV2Library",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4719,
                                "src": "11788:23:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_MoonwalkerswapV2Library_$4719_$",
                                  "typeString": "type(library MoonwalkerswapV2Library)"
                                }
                              },
                              "id": 1484,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "pairFor",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 4343,
                              "src": "11788:31:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_address_$returns$_t_address_$",
                                "typeString": "function (address,address,address) pure returns (address)"
                              }
                            },
                            "id": 1492,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "11788:58:1",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1493,
                              "name": "amounts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1438,
                              "src": "11848:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            "id": 1495,
                            "indexExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 1494,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "11856:1:1",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "11848:10:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 1480,
                                "name": "WETH",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 185,
                                "src": "11773:4:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 1479,
                              "name": "IWETH",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4181,
                              "src": "11767:5:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_IWETH_$4181_$",
                                "typeString": "type(contract IWETH)"
                              }
                            },
                            "id": 1481,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "11767:11:1",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IWETH_$4181",
                              "typeString": "contract IWETH"
                            }
                          },
                          "id": 1482,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "transfer",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 4175,
                          "src": "11767:20:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,uint256) external returns (bool)"
                          }
                        },
                        "id": 1496,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "11767:92:1",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1478,
                      "name": "assert",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -3,
                      "src": "11760:6:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_assert_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1497,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11760:100:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1498,
                  "nodeType": "ExpressionStatement",
                  "src": "11760:100:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1500,
                        "name": "amounts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1438,
                        "src": "11876:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1501,
                        "name": "path",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1426,
                        "src": "11885:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[] calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1502,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1428,
                        "src": "11891:2:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        },
                        {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[] calldata"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 1499,
                      "name": "_swap",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 973,
                      "src": "11870:5:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$_t_address_$returns$__$",
                        "typeString": "function (uint256[] memory,address[] memory,address)"
                      }
                    },
                    "id": 1503,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11870:24:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1504,
                  "nodeType": "ExpressionStatement",
                  "src": "11870:24:1"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1510,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1505,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -15,
                        "src": "11908:3:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 1506,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "value",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "11908:9:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 1507,
                        "name": "amounts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1438,
                        "src": "11920:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      },
                      "id": 1509,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 1508,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11928:1:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "11920:10:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11908:22:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1524,
                  "nodeType": "IfStatement",
                  "src": "11904:94:1",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1514,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "11963:3:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 1515,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "11963:10:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1521,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1516,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "11975:3:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 1517,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "value",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "11975:9:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1518,
                              "name": "amounts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1438,
                              "src": "11987:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            "id": 1520,
                            "indexExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 1519,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "11995:1:1",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "11987:10:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "11975:22:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 1511,
                          "name": "TransferHelper",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8239,
                          "src": "11932:14:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_TransferHelper_$8239_$",
                            "typeString": "type(library TransferHelper)"
                          }
                        },
                        "id": 1513,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "safeTransferETH",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 8238,
                        "src": "11932:30:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                          "typeString": "function (address,uint256)"
                        }
                      },
                      "id": 1522,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11932:66:1",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 1523,
                    "nodeType": "ExpressionStatement",
                    "src": "11932:66:1"
                  }
                }
              ]
            },
            "documentation": null,
            "functionSelector": "fb3bdb41",
            "id": 1526,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 1434,
                    "name": "deadline",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1430,
                    "src": "11398:8:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 1435,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1433,
                  "name": "ensure",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 199,
                  "src": "11391:6:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "11391:16:1"
              }
            ],
            "name": "swapETHForExactTokens",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 1432,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "11358:8:1"
            },
            "parameters": {
              "id": 1431,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1423,
                  "mutability": "mutable",
                  "name": "amountOut",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1526,
                  "src": "11265:14:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1422,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "11265:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1426,
                  "mutability": "mutable",
                  "name": "path",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1526,
                  "src": "11281:23:1",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1424,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "11281:7:1",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 1425,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "11281:9:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1428,
                  "mutability": "mutable",
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1526,
                  "src": "11306:10:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1427,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11306:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1430,
                  "mutability": "mutable",
                  "name": "deadline",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1526,
                  "src": "11318:13:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1429,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "11318:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11264:68:1"
            },
            "returnParameters": {
              "id": 1439,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1438,
                  "mutability": "mutable",
                  "name": "amounts",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1526,
                  "src": "11425:21:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1436,
                      "name": "uint",
                      "nodeType": "ElementaryTypeName",
                      "src": "11425:4:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1437,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "11425:6:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11424:23:1"
            },
            "scope": 1627,
            "src": "11234:798:1",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              4028
            ],
            "body": {
              "id": 1545,
              "nodeType": "Block",
              "src": "12141:82:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1540,
                        "name": "amountA",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1528,
                        "src": "12188:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1541,
                        "name": "reserveA",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1530,
                        "src": "12197:8:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1542,
                        "name": "reserveB",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1532,
                        "src": "12207:8:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1538,
                        "name": "MoonwalkerswapV2Library",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4719,
                        "src": "12158:23:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_MoonwalkerswapV2Library_$4719_$",
                          "typeString": "type(library MoonwalkerswapV2Library)"
                        }
                      },
                      "id": 1539,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "quote",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4432,
                      "src": "12158:29:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 1543,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12158:58:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1537,
                  "id": 1544,
                  "nodeType": "Return",
                  "src": "12151:65:1"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "ad615dec",
            "id": 1546,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "quote",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 1534,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "12109:8:1"
            },
            "parameters": {
              "id": 1533,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1528,
                  "mutability": "mutable",
                  "name": "amountA",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1546,
                  "src": "12053:12:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1527,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "12053:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1530,
                  "mutability": "mutable",
                  "name": "reserveA",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1546,
                  "src": "12067:13:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1529,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "12067:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1532,
                  "mutability": "mutable",
                  "name": "reserveB",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1546,
                  "src": "12082:13:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1531,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "12082:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12052:44:1"
            },
            "returnParameters": {
              "id": 1537,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1536,
                  "mutability": "mutable",
                  "name": "amountB",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1546,
                  "src": "12127:12:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1535,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "12127:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12126:14:1"
            },
            "scope": 1627,
            "src": "12038:185:1",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              4039
            ],
            "body": {
              "id": 1565,
              "nodeType": "Block",
              "src": "12345:93:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1560,
                        "name": "amountIn",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1548,
                        "src": "12399:8:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1561,
                        "name": "reserveIn",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1550,
                        "src": "12409:9:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1562,
                        "name": "reserveOut",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1552,
                        "src": "12420:10:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1558,
                        "name": "MoonwalkerswapV2Library",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4719,
                        "src": "12362:23:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_MoonwalkerswapV2Library_$4719_$",
                          "typeString": "type(library MoonwalkerswapV2Library)"
                        }
                      },
                      "id": 1559,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getAmountOut",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4492,
                      "src": "12362:36:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 1563,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12362:69:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1557,
                  "id": 1564,
                  "nodeType": "Return",
                  "src": "12355:76:1"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "054d50d4",
            "id": 1566,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getAmountOut",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 1554,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "12311:8:1"
            },
            "parameters": {
              "id": 1553,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1548,
                  "mutability": "mutable",
                  "name": "amountIn",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1566,
                  "src": "12251:13:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1547,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "12251:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1550,
                  "mutability": "mutable",
                  "name": "reserveIn",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1566,
                  "src": "12266:14:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1549,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "12266:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1552,
                  "mutability": "mutable",
                  "name": "reserveOut",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1566,
                  "src": "12282:15:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1551,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "12282:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12250:48:1"
            },
            "returnParameters": {
              "id": 1557,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1556,
                  "mutability": "mutable",
                  "name": "amountOut",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1566,
                  "src": "12329:14:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1555,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "12329:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12328:16:1"
            },
            "scope": 1627,
            "src": "12229:209:1",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              4050
            ],
            "body": {
              "id": 1585,
              "nodeType": "Block",
              "src": "12559:94:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1580,
                        "name": "amountOut",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1568,
                        "src": "12613:9:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1581,
                        "name": "reserveIn",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1570,
                        "src": "12624:9:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1582,
                        "name": "reserveOut",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1572,
                        "src": "12635:10:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1578,
                        "name": "MoonwalkerswapV2Library",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4719,
                        "src": "12576:23:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_MoonwalkerswapV2Library_$4719_$",
                          "typeString": "type(library MoonwalkerswapV2Library)"
                        }
                      },
                      "id": 1579,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getAmountOut",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4492,
                      "src": "12576:36:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 1583,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12576:70:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1577,
                  "id": 1584,
                  "nodeType": "Return",
                  "src": "12569:77:1"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "85f8c259",
            "id": 1586,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getAmountIn",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 1574,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "12526:8:1"
            },
            "parameters": {
              "id": 1573,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1568,
                  "mutability": "mutable",
                  "name": "amountOut",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1586,
                  "src": "12465:14:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1567,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "12465:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1570,
                  "mutability": "mutable",
                  "name": "reserveIn",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1586,
                  "src": "12481:14:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1569,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "12481:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1572,
                  "mutability": "mutable",
                  "name": "reserveOut",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1586,
                  "src": "12497:15:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1571,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "12497:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12464:49:1"
            },
            "returnParameters": {
              "id": 1577,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1576,
                  "mutability": "mutable",
                  "name": "amountIn",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1586,
                  "src": "12544:13:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1575,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "12544:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12543:15:1"
            },
            "scope": 1627,
            "src": "12444:209:1",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              4061
            ],
            "body": {
              "id": 1605,
              "nodeType": "Block",
              "src": "12773:86:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1600,
                        "name": "factory",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 182,
                        "src": "12828:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1601,
                        "name": "amountIn",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1588,
                        "src": "12837:8:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1602,
                        "name": "path",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1591,
                        "src": "12847:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1598,
                        "name": "MoonwalkerswapV2Library",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4719,
                        "src": "12790:23:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_MoonwalkerswapV2Library_$4719_$",
                          "typeString": "type(library MoonwalkerswapV2Library)"
                        }
                      },
                      "id": 1599,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getAmountsOut",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4633,
                      "src": "12790:37:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$_t_array$_t_address_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                        "typeString": "function (address,uint256,address[] memory) view returns (uint256[] memory)"
                      }
                    },
                    "id": 1603,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12790:62:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  },
                  "functionReturnParameters": 1597,
                  "id": 1604,
                  "nodeType": "Return",
                  "src": "12783:69:1"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "d06ca61f",
            "id": 1606,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getAmountsOut",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 1593,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "12732:8:1"
            },
            "parameters": {
              "id": 1592,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1588,
                  "mutability": "mutable",
                  "name": "amountIn",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1606,
                  "src": "12682:13:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1587,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "12682:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1591,
                  "mutability": "mutable",
                  "name": "path",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1606,
                  "src": "12697:21:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1589,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "12697:7:1",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 1590,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "12697:9:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12681:38:1"
            },
            "returnParameters": {
              "id": 1597,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1596,
                  "mutability": "mutable",
                  "name": "amounts",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1606,
                  "src": "12750:21:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1594,
                      "name": "uint",
                      "nodeType": "ElementaryTypeName",
                      "src": "12750:4:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1595,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "12750:6:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12749:23:1"
            },
            "scope": 1627,
            "src": "12659:200:1",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              4072
            ],
            "body": {
              "id": 1625,
              "nodeType": "Block",
              "src": "12979:86:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1620,
                        "name": "factory",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 182,
                        "src": "13033:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1621,
                        "name": "amountOut",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1608,
                        "src": "13042:9:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1622,
                        "name": "path",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1611,
                        "src": "13053:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1618,
                        "name": "MoonwalkerswapV2Library",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4719,
                        "src": "12996:23:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_MoonwalkerswapV2Library_$4719_$",
                          "typeString": "type(library MoonwalkerswapV2Library)"
                        }
                      },
                      "id": 1619,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getAmountsIn",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4718,
                      "src": "12996:36:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$_t_array$_t_address_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                        "typeString": "function (address,uint256,address[] memory) view returns (uint256[] memory)"
                      }
                    },
                    "id": 1623,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12996:62:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  },
                  "functionReturnParameters": 1617,
                  "id": 1624,
                  "nodeType": "Return",
                  "src": "12989:69:1"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "1f00ca74",
            "id": 1626,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getAmountsIn",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 1613,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "12938:8:1"
            },
            "parameters": {
              "id": 1612,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1608,
                  "mutability": "mutable",
                  "name": "amountOut",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1626,
                  "src": "12887:14:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1607,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "12887:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1611,
                  "mutability": "mutable",
                  "name": "path",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1626,
                  "src": "12903:21:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1609,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "12903:7:1",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 1610,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "12903:9:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12886:39:1"
            },
            "returnParameters": {
              "id": 1617,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1616,
                  "mutability": "mutable",
                  "name": "amounts",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1626,
                  "src": "12956:21:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1614,
                      "name": "uint",
                      "nodeType": "ElementaryTypeName",
                      "src": "12956:4:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1615,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "12956:6:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12955:23:1"
            },
            "scope": 1627,
            "src": "12865:200:1",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "scope": 1628,
        "src": "348:12719:1"
      }
    ],
    "src": "0:13068:1"
  },
  "legacyAST": {
    "attributes": {
      "absolutePath": "/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/Moonwalkerswap-v2-periphery/contracts/MoonwalkerswapV2Router01.sol",
      "exportedSymbols": {
        "MoonwalkerswapV2Router01": [
          1627
        ]
      }
    },
    "children": [
      {
        "attributes": {
          "literals": [
            "solidity",
            "=",
            "0.6",
            ".6"
          ]
        },
        "id": 171,
        "name": "PragmaDirective",
        "src": "0:23:1"
      },
      {
        "attributes": {
          "SourceUnit": 8303,
          "absolutePath": "moonwalkerswap-v2-core/contracts/interfaces/IMoonwalkerFactory.sol",
          "file": "moonwalkerswap-v2-core/contracts/interfaces/IMoonwalkerFactory.sol",
          "scope": 1628,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 172,
        "name": "ImportDirective",
        "src": "25:76:1"
      },
      {
        "attributes": {
          "SourceUnit": 8240,
          "absolutePath": "moonwalkerswap-libraries/contracts/libraries/TransferHelper.sol",
          "file": "moonwalkerswap-libraries/contracts/libraries/TransferHelper.sol",
          "scope": 1628,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 173,
        "name": "ImportDirective",
        "src": "102:73:1"
      },
      {
        "attributes": {
          "SourceUnit": 4720,
          "absolutePath": "/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/Moonwalkerswap-v2-periphery/contracts/libraries/MoonwalkerswapV2Library.sol",
          "file": "./libraries/MoonwalkerswapV2Library.sol",
          "scope": 1628,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 174,
        "name": "ImportDirective",
        "src": "177:49:1"
      },
      {
        "attributes": {
          "SourceUnit": 4074,
          "absolutePath": "/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/Moonwalkerswap-v2-periphery/contracts/interfaces/IMoonwalkerswapV2Router01.sol",
          "file": "./interfaces/IMoonwalkerswapV2Router01.sol",
          "scope": 1628,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 175,
        "name": "ImportDirective",
        "src": "227:52:1"
      },
      {
        "attributes": {
          "SourceUnit": 3750,
          "absolutePath": "/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/Moonwalkerswap-v2-periphery/contracts/interfaces/IERC20.sol",
          "file": "./interfaces/IERC20.sol",
          "scope": 1628,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 176,
        "name": "ImportDirective",
        "src": "280:33:1"
      },
      {
        "attributes": {
          "SourceUnit": 4182,
          "absolutePath": "/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/Moonwalkerswap-v2-periphery/contracts/interfaces/IWETH.sol",
          "file": "./interfaces/IWETH.sol",
          "scope": 1628,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 177,
        "name": "ImportDirective",
        "src": "314:32:1"
      },
      {
        "attributes": {
          "abstract": false,
          "contractDependencies": [
            4073
          ],
          "contractKind": "contract",
          "documentation": null,
          "fullyImplemented": true,
          "linearizedBaseContracts": [
            1627,
            4073
          ],
          "name": "MoonwalkerswapV2Router01",
          "scope": 1628
        },
        "children": [
          {
            "attributes": {
              "arguments": null
            },
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "IMoonwalkerswapV2Router01",
                  "referencedDeclaration": 4073,
                  "type": "contract IMoonwalkerswapV2Router01"
                },
                "id": 178,
                "name": "UserDefinedTypeName",
                "src": "385:25:1"
              }
            ],
            "id": 179,
            "name": "InheritanceSpecifier",
            "src": "385:25:1"
          },
          {
            "attributes": {
              "baseFunctions": [
                3772
              ],
              "constant": false,
              "functionSelector": "c45a0155",
              "mutability": "immutable",
              "name": "factory",
              "scope": 1627,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "address",
              "value": null,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "name": "address",
                  "stateMutability": "nonpayable",
                  "type": "address"
                },
                "id": 180,
                "name": "ElementaryTypeName",
                "src": "417:7:1"
              },
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 181,
                "name": "OverrideSpecifier",
                "src": "442:8:1"
              }
            ],
            "id": 182,
            "name": "VariableDeclaration",
            "src": "417:41:1"
          },
          {
            "attributes": {
              "baseFunctions": [
                3777
              ],
              "constant": false,
              "functionSelector": "ad5c4648",
              "mutability": "immutable",
              "name": "WETH",
              "scope": 1627,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "address",
              "value": null,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "name": "address",
                  "stateMutability": "nonpayable",
                  "type": "address"
                },
                "id": 183,
                "name": "ElementaryTypeName",
                "src": "464:7:1"
              },
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 184,
                "name": "OverrideSpecifier",
                "src": "489:8:1"
              }
            ],
            "id": 185,
            "name": "VariableDeclaration",
            "src": "464:38:1"
          },
          {
            "attributes": {
              "documentation": null,
              "name": "ensure",
              "overrides": null,
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "deadline",
                      "overrides": null,
                      "scope": 199,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 186,
                        "name": "ElementaryTypeName",
                        "src": "525:4:1"
                      }
                    ],
                    "id": 187,
                    "name": "VariableDeclaration",
                    "src": "525:13:1"
                  }
                ],
                "id": 188,
                "name": "ParameterList",
                "src": "524:15:1"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_140ff281f276813c08b6ee05ec93db8d2ad7aacaf48fd0b61a8a0dd439b5ae27",
                                  "typeString": "literal_string \"MoonwalkerswapV2Router: EXPIRED\""
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 189,
                            "name": "Identifier",
                            "src": "550:7:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": ">=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 187,
                                  "type": "uint256",
                                  "value": "deadline"
                                },
                                "id": 190,
                                "name": "Identifier",
                                "src": "558:8:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "timestamp",
                                  "referencedDeclaration": null,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": -4,
                                      "type": "block",
                                      "value": "block"
                                    },
                                    "id": 191,
                                    "name": "Identifier",
                                    "src": "570:5:1"
                                  }
                                ],
                                "id": 192,
                                "name": "MemberAccess",
                                "src": "570:15:1"
                              }
                            ],
                            "id": 193,
                            "name": "BinaryOperation",
                            "src": "558:27:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "4d6f6f6e77616c6b6572737761705632526f757465723a2045585049524544",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"MoonwalkerswapV2Router: EXPIRED\"",
                              "value": "MoonwalkerswapV2Router: EXPIRED"
                            },
                            "id": 194,
                            "name": "Literal",
                            "src": "587:33:1"
                          }
                        ],
                        "id": 195,
                        "name": "FunctionCall",
                        "src": "550:71:1"
                      }
                    ],
                    "id": 196,
                    "name": "ExpressionStatement",
                    "src": "550:71:1"
                  },
                  {
                    "id": 197,
                    "name": "PlaceholderStatement",
                    "src": "631:1:1"
                  }
                ],
                "id": 198,
                "name": "Block",
                "src": "540:99:1"
              }
            ],
            "id": 199,
            "name": "ModifierDefinition",
            "src": "509:130:1"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": true,
              "kind": "constructor",
              "modifiers": [
                null
              ],
              "name": "",
              "overrides": null,
              "scope": 1627,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "_factory",
                      "overrides": null,
                      "scope": 215,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 200,
                        "name": "ElementaryTypeName",
                        "src": "657:7:1"
                      }
                    ],
                    "id": 201,
                    "name": "VariableDeclaration",
                    "src": "657:16:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "_WETH",
                      "overrides": null,
                      "scope": 215,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 202,
                        "name": "ElementaryTypeName",
                        "src": "675:7:1"
                      }
                    ],
                    "id": 203,
                    "name": "VariableDeclaration",
                    "src": "675:13:1"
                  }
                ],
                "id": 204,
                "name": "ParameterList",
                "src": "656:33:1"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 205,
                "name": "ParameterList",
                "src": "697:0:1"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "address"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 182,
                              "type": "address",
                              "value": "factory"
                            },
                            "id": 206,
                            "name": "Identifier",
                            "src": "707:7:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 201,
                              "type": "address",
                              "value": "_factory"
                            },
                            "id": 207,
                            "name": "Identifier",
                            "src": "717:8:1"
                          }
                        ],
                        "id": 208,
                        "name": "Assignment",
                        "src": "707:18:1"
                      }
                    ],
                    "id": 209,
                    "name": "ExpressionStatement",
                    "src": "707:18:1"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "address"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 185,
                              "type": "address",
                              "value": "WETH"
                            },
                            "id": 210,
                            "name": "Identifier",
                            "src": "735:4:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 203,
                              "type": "address",
                              "value": "_WETH"
                            },
                            "id": 211,
                            "name": "Identifier",
                            "src": "742:5:1"
                          }
                        ],
                        "id": 212,
                        "name": "Assignment",
                        "src": "735:12:1"
                      }
                    ],
                    "id": 213,
                    "name": "ExpressionStatement",
                    "src": "735:12:1"
                  }
                ],
                "id": 214,
                "name": "Block",
                "src": "697:57:1"
              }
            ],
            "id": 215,
            "name": "FunctionDefinition",
            "src": "645:109:1"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "receive",
              "modifiers": [
                null
              ],
              "name": "",
              "overrides": null,
              "scope": 1627,
              "stateMutability": "payable",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 216,
                "name": "ParameterList",
                "src": "767:2:1"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 217,
                "name": "ParameterList",
                "src": "787:0:1"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": -3,
                              "type": "function (bool) pure",
                              "value": "assert"
                            },
                            "id": 218,
                            "name": "Identifier",
                            "src": "797:6:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "sender",
                                  "referencedDeclaration": null,
                                  "type": "address payable"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": -15,
                                      "type": "msg",
                                      "value": "msg"
                                    },
                                    "id": 219,
                                    "name": "Identifier",
                                    "src": "804:3:1"
                                  }
                                ],
                                "id": 220,
                                "name": "MemberAccess",
                                "src": "804:10:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 185,
                                  "type": "address",
                                  "value": "WETH"
                                },
                                "id": 221,
                                "name": "Identifier",
                                "src": "818:4:1"
                              }
                            ],
                            "id": 222,
                            "name": "BinaryOperation",
                            "src": "804:18:1"
                          }
                        ],
                        "id": 223,
                        "name": "FunctionCall",
                        "src": "797:26:1"
                      }
                    ],
                    "id": 224,
                    "name": "ExpressionStatement",
                    "src": "797:26:1"
                  }
                ],
                "id": 225,
                "name": "Block",
                "src": "787:98:1"
              }
            ],
            "id": 226,
            "name": "FunctionDefinition",
            "src": "760:125:1"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "_addLiquidity",
              "overrides": null,
              "scope": 1627,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "private"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenA",
                      "overrides": null,
                      "scope": 357,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 227,
                        "name": "ElementaryTypeName",
                        "src": "954:7:1"
                      }
                    ],
                    "id": 228,
                    "name": "VariableDeclaration",
                    "src": "954:14:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenB",
                      "overrides": null,
                      "scope": 357,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 229,
                        "name": "ElementaryTypeName",
                        "src": "978:7:1"
                      }
                    ],
                    "id": 230,
                    "name": "VariableDeclaration",
                    "src": "978:14:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amountADesired",
                      "overrides": null,
                      "scope": 357,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 231,
                        "name": "ElementaryTypeName",
                        "src": "1002:4:1"
                      }
                    ],
                    "id": 232,
                    "name": "VariableDeclaration",
                    "src": "1002:19:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amountBDesired",
                      "overrides": null,
                      "scope": 357,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 233,
                        "name": "ElementaryTypeName",
                        "src": "1031:4:1"
                      }
                    ],
                    "id": 234,
                    "name": "VariableDeclaration",
                    "src": "1031:19:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amountAMin",
                      "overrides": null,
                      "scope": 357,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 235,
                        "name": "ElementaryTypeName",
                        "src": "1060:4:1"
                      }
                    ],
                    "id": 236,
                    "name": "VariableDeclaration",
                    "src": "1060:15:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amountBMin",
                      "overrides": null,
                      "scope": 357,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 237,
                        "name": "ElementaryTypeName",
                        "src": "1085:4:1"
                      }
                    ],
                    "id": 238,
                    "name": "VariableDeclaration",
                    "src": "1085:15:1"
                  }
                ],
                "id": 239,
                "name": "ParameterList",
                "src": "944:162:1"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amountA",
                      "overrides": null,
                      "scope": 357,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 240,
                        "name": "ElementaryTypeName",
                        "src": "1124:4:1"
                      }
                    ],
                    "id": 241,
                    "name": "VariableDeclaration",
                    "src": "1124:12:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amountB",
                      "overrides": null,
                      "scope": 357,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 242,
                        "name": "ElementaryTypeName",
                        "src": "1138:4:1"
                      }
                    ],
                    "id": 243,
                    "name": "VariableDeclaration",
                    "src": "1138:12:1"
                  }
                ],
                "id": 244,
                "name": "ParameterList",
                "src": "1123:28:1"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "==",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "address",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "getPair",
                                  "referencedDeclaration": 8270,
                                  "type": "function (address,address) view external returns (address)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "contract IMoonwalkerFactory",
                                      "type_conversion": true
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          ],
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 8302,
                                          "type": "type(contract IMoonwalkerFactory)",
                                          "value": "IMoonwalkerFactory"
                                        },
                                        "id": 245,
                                        "name": "Identifier",
                                        "src": "1217:18:1"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 182,
                                          "type": "address",
                                          "value": "factory"
                                        },
                                        "id": 246,
                                        "name": "Identifier",
                                        "src": "1236:7:1"
                                      }
                                    ],
                                    "id": 247,
                                    "name": "FunctionCall",
                                    "src": "1217:27:1"
                                  }
                                ],
                                "id": 248,
                                "name": "MemberAccess",
                                "src": "1217:35:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 228,
                                  "type": "address",
                                  "value": "tokenA"
                                },
                                "id": 249,
                                "name": "Identifier",
                                "src": "1253:6:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 230,
                                  "type": "address",
                                  "value": "tokenB"
                                },
                                "id": 250,
                                "name": "Identifier",
                                "src": "1261:6:1"
                              }
                            ],
                            "id": 251,
                            "name": "FunctionCall",
                            "src": "1217:51:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "address payable",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(address)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "address",
                                      "type": null
                                    },
                                    "id": 252,
                                    "name": "ElementaryTypeName",
                                    "src": "1272:7:1"
                                  }
                                ],
                                "id": 253,
                                "name": "ElementaryTypeNameExpression",
                                "src": "1272:7:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 254,
                                "name": "Literal",
                                "src": "1280:1:1"
                              }
                            ],
                            "id": 255,
                            "name": "FunctionCall",
                            "src": "1272:10:1"
                          }
                        ],
                        "id": 256,
                        "name": "BinaryOperation",
                        "src": "1217:65:1"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "address",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "createPair",
                                      "referencedDeclaration": 8291,
                                      "type": "function (address,address) external returns (address)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "tryCall": false,
                                          "type": "contract IMoonwalkerFactory",
                                          "type_conversion": true
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_address",
                                                  "typeString": "address"
                                                }
                                              ],
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 8302,
                                              "type": "type(contract IMoonwalkerFactory)",
                                              "value": "IMoonwalkerFactory"
                                            },
                                            "id": 257,
                                            "name": "Identifier",
                                            "src": "1298:18:1"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 182,
                                              "type": "address",
                                              "value": "factory"
                                            },
                                            "id": 258,
                                            "name": "Identifier",
                                            "src": "1317:7:1"
                                          }
                                        ],
                                        "id": 259,
                                        "name": "FunctionCall",
                                        "src": "1298:27:1"
                                      }
                                    ],
                                    "id": 260,
                                    "name": "MemberAccess",
                                    "src": "1298:38:1"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 228,
                                      "type": "address",
                                      "value": "tokenA"
                                    },
                                    "id": 261,
                                    "name": "Identifier",
                                    "src": "1337:6:1"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 230,
                                      "type": "address",
                                      "value": "tokenB"
                                    },
                                    "id": 262,
                                    "name": "Identifier",
                                    "src": "1345:6:1"
                                  }
                                ],
                                "id": 263,
                                "name": "FunctionCall",
                                "src": "1298:54:1"
                              }
                            ],
                            "id": 264,
                            "name": "ExpressionStatement",
                            "src": "1298:54:1"
                          }
                        ],
                        "id": 265,
                        "name": "Block",
                        "src": "1284:79:1"
                      }
                    ],
                    "id": 266,
                    "name": "IfStatement",
                    "src": "1213:150:1"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        268,
                        270
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "reserveA",
                          "overrides": null,
                          "scope": 356,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint",
                              "type": "uint256"
                            },
                            "id": 267,
                            "name": "ElementaryTypeName",
                            "src": "1373:4:1"
                          }
                        ],
                        "id": 268,
                        "name": "VariableDeclaration",
                        "src": "1373:13:1"
                      },
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "reserveB",
                          "overrides": null,
                          "scope": 356,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint",
                              "type": "uint256"
                            },
                            "id": 269,
                            "name": "ElementaryTypeName",
                            "src": "1388:4:1"
                          }
                        ],
                        "id": 270,
                        "name": "VariableDeclaration",
                        "src": "1388:13:1"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple(uint256,uint256)",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "getReserves",
                              "referencedDeclaration": 4393,
                              "type": "function (address,address,address) view returns (uint256,uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4719,
                                  "type": "type(library MoonwalkerswapV2Library)",
                                  "value": "MoonwalkerswapV2Library"
                                },
                                "id": 271,
                                "name": "Identifier",
                                "src": "1405:23:1"
                              }
                            ],
                            "id": 272,
                            "name": "MemberAccess",
                            "src": "1405:35:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 182,
                              "type": "address",
                              "value": "factory"
                            },
                            "id": 273,
                            "name": "Identifier",
                            "src": "1441:7:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 228,
                              "type": "address",
                              "value": "tokenA"
                            },
                            "id": 274,
                            "name": "Identifier",
                            "src": "1450:6:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 230,
                              "type": "address",
                              "value": "tokenB"
                            },
                            "id": 275,
                            "name": "Identifier",
                            "src": "1458:6:1"
                          }
                        ],
                        "id": 276,
                        "name": "FunctionCall",
                        "src": "1405:60:1"
                      }
                    ],
                    "id": 277,
                    "name": "VariableDeclarationStatement",
                    "src": "1372:93:1"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "&&",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 268,
                                  "type": "uint256",
                                  "value": "reserveA"
                                },
                                "id": 278,
                                "name": "Identifier",
                                "src": "1479:8:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 279,
                                "name": "Literal",
                                "src": "1491:1:1"
                              }
                            ],
                            "id": 280,
                            "name": "BinaryOperation",
                            "src": "1479:13:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 270,
                                  "type": "uint256",
                                  "value": "reserveB"
                                },
                                "id": 281,
                                "name": "Identifier",
                                "src": "1496:8:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 282,
                                "name": "Literal",
                                "src": "1508:1:1"
                              }
                            ],
                            "id": 283,
                            "name": "BinaryOperation",
                            "src": "1496:13:1"
                          }
                        ],
                        "id": 284,
                        "name": "BinaryOperation",
                        "src": "1479:30:1"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "=",
                                  "type": "tuple()"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": true,
                                      "type": "tuple(uint256,uint256)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 241,
                                          "type": "uint256",
                                          "value": "amountA"
                                        },
                                        "id": 285,
                                        "name": "Identifier",
                                        "src": "1526:7:1"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 243,
                                          "type": "uint256",
                                          "value": "amountB"
                                        },
                                        "id": 286,
                                        "name": "Identifier",
                                        "src": "1535:7:1"
                                      }
                                    ],
                                    "id": 287,
                                    "name": "TupleExpression",
                                    "src": "1525:18:1"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "type": "tuple(uint256,uint256)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 232,
                                          "type": "uint256",
                                          "value": "amountADesired"
                                        },
                                        "id": 288,
                                        "name": "Identifier",
                                        "src": "1547:14:1"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 234,
                                          "type": "uint256",
                                          "value": "amountBDesired"
                                        },
                                        "id": 289,
                                        "name": "Identifier",
                                        "src": "1563:14:1"
                                      }
                                    ],
                                    "id": 290,
                                    "name": "TupleExpression",
                                    "src": "1546:32:1"
                                  }
                                ],
                                "id": 291,
                                "name": "Assignment",
                                "src": "1525:53:1"
                              }
                            ],
                            "id": 292,
                            "name": "ExpressionStatement",
                            "src": "1525:53:1"
                          }
                        ],
                        "id": 293,
                        "name": "Block",
                        "src": "1511:78:1"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "assignments": [
                                295
                              ]
                            },
                            "children": [
                              {
                                "attributes": {
                                  "constant": false,
                                  "mutability": "mutable",
                                  "name": "amountBOptimal",
                                  "overrides": null,
                                  "scope": 354,
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "type": "uint256",
                                  "value": null,
                                  "visibility": "internal"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "uint",
                                      "type": "uint256"
                                    },
                                    "id": 294,
                                    "name": "ElementaryTypeName",
                                    "src": "1609:4:1"
                                  }
                                ],
                                "id": 295,
                                "name": "VariableDeclaration",
                                "src": "1609:19:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "uint256",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "quote",
                                      "referencedDeclaration": 4432,
                                      "type": "function (uint256,uint256,uint256) pure returns (uint256)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4719,
                                          "type": "type(library MoonwalkerswapV2Library)",
                                          "value": "MoonwalkerswapV2Library"
                                        },
                                        "id": 296,
                                        "name": "Identifier",
                                        "src": "1631:23:1"
                                      }
                                    ],
                                    "id": 297,
                                    "name": "MemberAccess",
                                    "src": "1631:29:1"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 232,
                                      "type": "uint256",
                                      "value": "amountADesired"
                                    },
                                    "id": 298,
                                    "name": "Identifier",
                                    "src": "1661:14:1"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 268,
                                      "type": "uint256",
                                      "value": "reserveA"
                                    },
                                    "id": 299,
                                    "name": "Identifier",
                                    "src": "1677:8:1"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 270,
                                      "type": "uint256",
                                      "value": "reserveB"
                                    },
                                    "id": 300,
                                    "name": "Identifier",
                                    "src": "1687:8:1"
                                  }
                                ],
                                "id": 301,
                                "name": "FunctionCall",
                                "src": "1631:65:1"
                              }
                            ],
                            "id": 302,
                            "name": "VariableDeclarationStatement",
                            "src": "1609:87:1"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "<=",
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 295,
                                      "type": "uint256",
                                      "value": "amountBOptimal"
                                    },
                                    "id": 303,
                                    "name": "Identifier",
                                    "src": "1714:14:1"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 234,
                                      "type": "uint256",
                                      "value": "amountBDesired"
                                    },
                                    "id": 304,
                                    "name": "Identifier",
                                    "src": "1732:14:1"
                                  }
                                ],
                                "id": 305,
                                "name": "BinaryOperation",
                                "src": "1714:32:1"
                              },
                              {
                                "children": [
                                  {
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "tryCall": false,
                                          "type": "tuple()",
                                          "type_conversion": false
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_bool",
                                                  "typeString": "bool"
                                                },
                                                {
                                                  "typeIdentifier": "t_stringliteral_ac772567becfb520022da0d75cd7578f37f73655ce5d281319634de23c417ed7",
                                                  "typeString": "literal_string \"MoonwalkerswapV2Router: INSUFFICIENT_B_AMOUNT\""
                                                }
                                              ],
                                              "overloadedDeclarations": [
                                                -18,
                                                -18
                                              ],
                                              "referencedDeclaration": -18,
                                              "type": "function (bool,string memory) pure",
                                              "value": "require"
                                            },
                                            "id": 306,
                                            "name": "Identifier",
                                            "src": "1766:7:1"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              },
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "operator": ">=",
                                              "type": "bool"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 295,
                                                  "type": "uint256",
                                                  "value": "amountBOptimal"
                                                },
                                                "id": 307,
                                                "name": "Identifier",
                                                "src": "1774:14:1"
                                              },
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 238,
                                                  "type": "uint256",
                                                  "value": "amountBMin"
                                                },
                                                "id": 308,
                                                "name": "Identifier",
                                                "src": "1792:10:1"
                                              }
                                            ],
                                            "id": 309,
                                            "name": "BinaryOperation",
                                            "src": "1774:28:1"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "hexvalue": "4d6f6f6e77616c6b6572737761705632526f757465723a20494e53554646494349454e545f425f414d4f554e54",
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "subdenomination": null,
                                              "token": "string",
                                              "type": "literal_string \"MoonwalkerswapV2Router: INSUFFICIENT_B_AMOUNT\"",
                                              "value": "MoonwalkerswapV2Router: INSUFFICIENT_B_AMOUNT"
                                            },
                                            "id": 310,
                                            "name": "Literal",
                                            "src": "1804:47:1"
                                          }
                                        ],
                                        "id": 311,
                                        "name": "FunctionCall",
                                        "src": "1766:86:1"
                                      }
                                    ],
                                    "id": 312,
                                    "name": "ExpressionStatement",
                                    "src": "1766:86:1"
                                  },
                                  {
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "=",
                                          "type": "tuple()"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "isConstant": false,
                                              "isInlineArray": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": true,
                                              "type": "tuple(uint256,uint256)"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 241,
                                                  "type": "uint256",
                                                  "value": "amountA"
                                                },
                                                "id": 313,
                                                "name": "Identifier",
                                                "src": "1871:7:1"
                                              },
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 243,
                                                  "type": "uint256",
                                                  "value": "amountB"
                                                },
                                                "id": 314,
                                                "name": "Identifier",
                                                "src": "1880:7:1"
                                              }
                                            ],
                                            "id": 315,
                                            "name": "TupleExpression",
                                            "src": "1870:18:1"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "isConstant": false,
                                              "isInlineArray": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "type": "tuple(uint256,uint256)"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 232,
                                                  "type": "uint256",
                                                  "value": "amountADesired"
                                                },
                                                "id": 316,
                                                "name": "Identifier",
                                                "src": "1892:14:1"
                                              },
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 295,
                                                  "type": "uint256",
                                                  "value": "amountBOptimal"
                                                },
                                                "id": 317,
                                                "name": "Identifier",
                                                "src": "1908:14:1"
                                              }
                                            ],
                                            "id": 318,
                                            "name": "TupleExpression",
                                            "src": "1891:32:1"
                                          }
                                        ],
                                        "id": 319,
                                        "name": "Assignment",
                                        "src": "1870:53:1"
                                      }
                                    ],
                                    "id": 320,
                                    "name": "ExpressionStatement",
                                    "src": "1870:53:1"
                                  }
                                ],
                                "id": 321,
                                "name": "Block",
                                "src": "1748:190:1"
                              },
                              {
                                "children": [
                                  {
                                    "attributes": {
                                      "assignments": [
                                        323
                                      ]
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "constant": false,
                                          "mutability": "mutable",
                                          "name": "amountAOptimal",
                                          "overrides": null,
                                          "scope": 352,
                                          "stateVariable": false,
                                          "storageLocation": "default",
                                          "type": "uint256",
                                          "value": null,
                                          "visibility": "internal"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "name": "uint",
                                              "type": "uint256"
                                            },
                                            "id": 322,
                                            "name": "ElementaryTypeName",
                                            "src": "1962:4:1"
                                          }
                                        ],
                                        "id": 323,
                                        "name": "VariableDeclaration",
                                        "src": "1962:19:1"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "tryCall": false,
                                          "type": "uint256",
                                          "type_conversion": false
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                },
                                                {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                },
                                                {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              ],
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "member_name": "quote",
                                              "referencedDeclaration": 4432,
                                              "type": "function (uint256,uint256,uint256) pure returns (uint256)"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 4719,
                                                  "type": "type(library MoonwalkerswapV2Library)",
                                                  "value": "MoonwalkerswapV2Library"
                                                },
                                                "id": 324,
                                                "name": "Identifier",
                                                "src": "1984:23:1"
                                              }
                                            ],
                                            "id": 325,
                                            "name": "MemberAccess",
                                            "src": "1984:29:1"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 234,
                                              "type": "uint256",
                                              "value": "amountBDesired"
                                            },
                                            "id": 326,
                                            "name": "Identifier",
                                            "src": "2014:14:1"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 270,
                                              "type": "uint256",
                                              "value": "reserveB"
                                            },
                                            "id": 327,
                                            "name": "Identifier",
                                            "src": "2030:8:1"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 268,
                                              "type": "uint256",
                                              "value": "reserveA"
                                            },
                                            "id": 328,
                                            "name": "Identifier",
                                            "src": "2040:8:1"
                                          }
                                        ],
                                        "id": 329,
                                        "name": "FunctionCall",
                                        "src": "1984:65:1"
                                      }
                                    ],
                                    "id": 330,
                                    "name": "VariableDeclarationStatement",
                                    "src": "1962:87:1"
                                  },
                                  {
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "tryCall": false,
                                          "type": "tuple()",
                                          "type_conversion": false
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_bool",
                                                  "typeString": "bool"
                                                }
                                              ],
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": -3,
                                              "type": "function (bool) pure",
                                              "value": "assert"
                                            },
                                            "id": 331,
                                            "name": "Identifier",
                                            "src": "2067:6:1"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              },
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "operator": "<=",
                                              "type": "bool"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 323,
                                                  "type": "uint256",
                                                  "value": "amountAOptimal"
                                                },
                                                "id": 332,
                                                "name": "Identifier",
                                                "src": "2074:14:1"
                                              },
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 232,
                                                  "type": "uint256",
                                                  "value": "amountADesired"
                                                },
                                                "id": 333,
                                                "name": "Identifier",
                                                "src": "2092:14:1"
                                              }
                                            ],
                                            "id": 334,
                                            "name": "BinaryOperation",
                                            "src": "2074:32:1"
                                          }
                                        ],
                                        "id": 335,
                                        "name": "FunctionCall",
                                        "src": "2067:40:1"
                                      }
                                    ],
                                    "id": 336,
                                    "name": "ExpressionStatement",
                                    "src": "2067:40:1"
                                  },
                                  {
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "tryCall": false,
                                          "type": "tuple()",
                                          "type_conversion": false
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_bool",
                                                  "typeString": "bool"
                                                },
                                                {
                                                  "typeIdentifier": "t_stringliteral_077734a4f7cf9428f7f4c6d3609667308f8cccd0a28f5aeb61695694480df8b8",
                                                  "typeString": "literal_string \"MoonwalkerswapV2Router: INSUFFICIENT_A_AMOUNT\""
                                                }
                                              ],
                                              "overloadedDeclarations": [
                                                -18,
                                                -18
                                              ],
                                              "referencedDeclaration": -18,
                                              "type": "function (bool,string memory) pure",
                                              "value": "require"
                                            },
                                            "id": 337,
                                            "name": "Identifier",
                                            "src": "2125:7:1"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              },
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "operator": ">=",
                                              "type": "bool"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 323,
                                                  "type": "uint256",
                                                  "value": "amountAOptimal"
                                                },
                                                "id": 338,
                                                "name": "Identifier",
                                                "src": "2133:14:1"
                                              },
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 236,
                                                  "type": "uint256",
                                                  "value": "amountAMin"
                                                },
                                                "id": 339,
                                                "name": "Identifier",
                                                "src": "2151:10:1"
                                              }
                                            ],
                                            "id": 340,
                                            "name": "BinaryOperation",
                                            "src": "2133:28:1"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "hexvalue": "4d6f6f6e77616c6b6572737761705632526f757465723a20494e53554646494349454e545f415f414d4f554e54",
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "subdenomination": null,
                                              "token": "string",
                                              "type": "literal_string \"MoonwalkerswapV2Router: INSUFFICIENT_A_AMOUNT\"",
                                              "value": "MoonwalkerswapV2Router: INSUFFICIENT_A_AMOUNT"
                                            },
                                            "id": 341,
                                            "name": "Literal",
                                            "src": "2163:47:1"
                                          }
                                        ],
                                        "id": 342,
                                        "name": "FunctionCall",
                                        "src": "2125:86:1"
                                      }
                                    ],
                                    "id": 343,
                                    "name": "ExpressionStatement",
                                    "src": "2125:86:1"
                                  },
                                  {
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "=",
                                          "type": "tuple()"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "isConstant": false,
                                              "isInlineArray": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": true,
                                              "type": "tuple(uint256,uint256)"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 241,
                                                  "type": "uint256",
                                                  "value": "amountA"
                                                },
                                                "id": 344,
                                                "name": "Identifier",
                                                "src": "2230:7:1"
                                              },
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 243,
                                                  "type": "uint256",
                                                  "value": "amountB"
                                                },
                                                "id": 345,
                                                "name": "Identifier",
                                                "src": "2239:7:1"
                                              }
                                            ],
                                            "id": 346,
                                            "name": "TupleExpression",
                                            "src": "2229:18:1"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "isConstant": false,
                                              "isInlineArray": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "type": "tuple(uint256,uint256)"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 323,
                                                  "type": "uint256",
                                                  "value": "amountAOptimal"
                                                },
                                                "id": 347,
                                                "name": "Identifier",
                                                "src": "2251:14:1"
                                              },
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 234,
                                                  "type": "uint256",
                                                  "value": "amountBDesired"
                                                },
                                                "id": 348,
                                                "name": "Identifier",
                                                "src": "2267:14:1"
                                              }
                                            ],
                                            "id": 349,
                                            "name": "TupleExpression",
                                            "src": "2250:32:1"
                                          }
                                        ],
                                        "id": 350,
                                        "name": "Assignment",
                                        "src": "2229:53:1"
                                      }
                                    ],
                                    "id": 351,
                                    "name": "ExpressionStatement",
                                    "src": "2229:53:1"
                                  }
                                ],
                                "id": 352,
                                "name": "Block",
                                "src": "1944:353:1"
                              }
                            ],
                            "id": 353,
                            "name": "IfStatement",
                            "src": "1710:587:1"
                          }
                        ],
                        "id": 354,
                        "name": "Block",
                        "src": "1595:712:1"
                      }
                    ],
                    "id": 355,
                    "name": "IfStatement",
                    "src": "1475:832:1"
                  }
                ],
                "id": 356,
                "name": "Block",
                "src": "1152:1161:1"
              }
            ],
            "id": 357,
            "name": "FunctionDefinition",
            "src": "922:1391:1"
          },
          {
            "attributes": {
              "baseFunctions": [
                3802
              ],
              "documentation": null,
              "functionSelector": "e8e33700",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "name": "addLiquidity",
              "scope": 1627,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 375,
                "name": "OverrideSpecifier",
                "src": "2554:8:1"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenA",
                      "overrides": null,
                      "scope": 438,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 358,
                        "name": "ElementaryTypeName",
                        "src": "2349:7:1"
                      }
                    ],
                    "id": 359,
                    "name": "VariableDeclaration",
                    "src": "2349:14:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenB",
                      "overrides": null,
                      "scope": 438,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 360,
                        "name": "ElementaryTypeName",
                        "src": "2373:7:1"
                      }
                    ],
                    "id": 361,
                    "name": "VariableDeclaration",
                    "src": "2373:14:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amountADesired",
                      "overrides": null,
                      "scope": 438,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 362,
                        "name": "ElementaryTypeName",
                        "src": "2397:4:1"
                      }
                    ],
                    "id": 363,
                    "name": "VariableDeclaration",
                    "src": "2397:19:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amountBDesired",
                      "overrides": null,
                      "scope": 438,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 364,
                        "name": "ElementaryTypeName",
                        "src": "2426:4:1"
                      }
                    ],
                    "id": 365,
                    "name": "VariableDeclaration",
                    "src": "2426:19:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amountAMin",
                      "overrides": null,
                      "scope": 438,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 366,
                        "name": "ElementaryTypeName",
                        "src": "2455:4:1"
                      }
                    ],
                    "id": 367,
                    "name": "VariableDeclaration",
                    "src": "2455:15:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amountBMin",
                      "overrides": null,
                      "scope": 438,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 368,
                        "name": "ElementaryTypeName",
                        "src": "2480:4:1"
                      }
                    ],
                    "id": 369,
                    "name": "VariableDeclaration",
                    "src": "2480:15:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "to",
                      "overrides": null,
                      "scope": 438,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 370,
                        "name": "ElementaryTypeName",
                        "src": "2505:7:1"
                      }
                    ],
                    "id": 371,
                    "name": "VariableDeclaration",
                    "src": "2505:10:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "deadline",
                      "overrides": null,
                      "scope": 438,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 372,
                        "name": "ElementaryTypeName",
                        "src": "2525:4:1"
                      }
                    ],
                    "id": 373,
                    "name": "VariableDeclaration",
                    "src": "2525:13:1"
                  }
                ],
                "id": 374,
                "name": "ParameterList",
                "src": "2339:205:1"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amountA",
                      "overrides": null,
                      "scope": 438,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 379,
                        "name": "ElementaryTypeName",
                        "src": "2589:4:1"
                      }
                    ],
                    "id": 380,
                    "name": "VariableDeclaration",
                    "src": "2589:12:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amountB",
                      "overrides": null,
                      "scope": 438,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 381,
                        "name": "ElementaryTypeName",
                        "src": "2603:4:1"
                      }
                    ],
                    "id": 382,
                    "name": "VariableDeclaration",
                    "src": "2603:12:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "liquidity",
                      "overrides": null,
                      "scope": 438,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 383,
                        "name": "ElementaryTypeName",
                        "src": "2617:4:1"
                      }
                    ],
                    "id": 384,
                    "name": "VariableDeclaration",
                    "src": "2617:14:1"
                  }
                ],
                "id": 385,
                "name": "ParameterList",
                "src": "2588:44:1"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 199,
                      "type": "modifier (uint256)",
                      "value": "ensure"
                    },
                    "id": 376,
                    "name": "Identifier",
                    "src": "2563:6:1"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 373,
                      "type": "uint256",
                      "value": "deadline"
                    },
                    "id": 377,
                    "name": "Identifier",
                    "src": "2570:8:1"
                  }
                ],
                "id": 378,
                "name": "ModifierInvocation",
                "src": "2563:16:1"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "tuple()"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "type": "tuple(uint256,uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 380,
                                  "type": "uint256",
                                  "value": "amountA"
                                },
                                "id": 386,
                                "name": "Identifier",
                                "src": "2644:7:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 382,
                                  "type": "uint256",
                                  "value": "amountB"
                                },
                                "id": 387,
                                "name": "Identifier",
                                "src": "2653:7:1"
                              }
                            ],
                            "id": 388,
                            "name": "TupleExpression",
                            "src": "2643:18:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "tuple(uint256,uint256)",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 357,
                                  "type": "function (address,address,uint256,uint256,uint256,uint256) returns (uint256,uint256)",
                                  "value": "_addLiquidity"
                                },
                                "id": 389,
                                "name": "Identifier",
                                "src": "2664:13:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 359,
                                  "type": "address",
                                  "value": "tokenA"
                                },
                                "id": 390,
                                "name": "Identifier",
                                "src": "2678:6:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 361,
                                  "type": "address",
                                  "value": "tokenB"
                                },
                                "id": 391,
                                "name": "Identifier",
                                "src": "2686:6:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 363,
                                  "type": "uint256",
                                  "value": "amountADesired"
                                },
                                "id": 392,
                                "name": "Identifier",
                                "src": "2694:14:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 365,
                                  "type": "uint256",
                                  "value": "amountBDesired"
                                },
                                "id": 393,
                                "name": "Identifier",
                                "src": "2710:14:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 367,
                                  "type": "uint256",
                                  "value": "amountAMin"
                                },
                                "id": 394,
                                "name": "Identifier",
                                "src": "2726:10:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 369,
                                  "type": "uint256",
                                  "value": "amountBMin"
                                },
                                "id": 395,
                                "name": "Identifier",
                                "src": "2738:10:1"
                              }
                            ],
                            "id": 396,
                            "name": "FunctionCall",
                            "src": "2664:85:1"
                          }
                        ],
                        "id": 397,
                        "name": "Assignment",
                        "src": "2643:106:1"
                      }
                    ],
                    "id": 398,
                    "name": "ExpressionStatement",
                    "src": "2643:106:1"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        400
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "pair",
                          "overrides": null,
                          "scope": 437,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "address",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "address",
                              "stateMutability": "nonpayable",
                              "type": "address"
                            },
                            "id": 399,
                            "name": "ElementaryTypeName",
                            "src": "2759:7:1"
                          }
                        ],
                        "id": 400,
                        "name": "VariableDeclaration",
                        "src": "2759:12:1"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "address",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "pairFor",
                              "referencedDeclaration": 4343,
                              "type": "function (address,address,address) pure returns (address)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4719,
                                  "type": "type(library MoonwalkerswapV2Library)",
                                  "value": "MoonwalkerswapV2Library"
                                },
                                "id": 401,
                                "name": "Identifier",
                                "src": "2774:23:1"
                              }
                            ],
                            "id": 402,
                            "name": "MemberAccess",
                            "src": "2774:31:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 182,
                              "type": "address",
                              "value": "factory"
                            },
                            "id": 403,
                            "name": "Identifier",
                            "src": "2806:7:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 359,
                              "type": "address",
                              "value": "tokenA"
                            },
                            "id": 404,
                            "name": "Identifier",
                            "src": "2815:6:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 361,
                              "type": "address",
                              "value": "tokenB"
                            },
                            "id": 405,
                            "name": "Identifier",
                            "src": "2823:6:1"
                          }
                        ],
                        "id": 406,
                        "name": "FunctionCall",
                        "src": "2774:56:1"
                      }
                    ],
                    "id": 407,
                    "name": "VariableDeclarationStatement",
                    "src": "2759:71:1"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "safeTransferFrom",
                              "referencedDeclaration": 8213,
                              "type": "function (address,address,address,uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 8239,
                                  "type": "type(library TransferHelper)",
                                  "value": "TransferHelper"
                                },
                                "id": 408,
                                "name": "Identifier",
                                "src": "2840:14:1"
                              }
                            ],
                            "id": 410,
                            "name": "MemberAccess",
                            "src": "2840:31:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 359,
                              "type": "address",
                              "value": "tokenA"
                            },
                            "id": 411,
                            "name": "Identifier",
                            "src": "2872:6:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "sender",
                              "referencedDeclaration": null,
                              "type": "address payable"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": -15,
                                  "type": "msg",
                                  "value": "msg"
                                },
                                "id": 412,
                                "name": "Identifier",
                                "src": "2880:3:1"
                              }
                            ],
                            "id": 413,
                            "name": "MemberAccess",
                            "src": "2880:10:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 400,
                              "type": "address",
                              "value": "pair"
                            },
                            "id": 414,
                            "name": "Identifier",
                            "src": "2892:4:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 380,
                              "type": "uint256",
                              "value": "amountA"
                            },
                            "id": 415,
                            "name": "Identifier",
                            "src": "2898:7:1"
                          }
                        ],
                        "id": 416,
                        "name": "FunctionCall",
                        "src": "2840:66:1"
                      }
                    ],
                    "id": 417,
                    "name": "ExpressionStatement",
                    "src": "2840:66:1"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "safeTransferFrom",
                              "referencedDeclaration": 8213,
                              "type": "function (address,address,address,uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 8239,
                                  "type": "type(library TransferHelper)",
                                  "value": "TransferHelper"
                                },
                                "id": 418,
                                "name": "Identifier",
                                "src": "2916:14:1"
                              }
                            ],
                            "id": 420,
                            "name": "MemberAccess",
                            "src": "2916:31:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 361,
                              "type": "address",
                              "value": "tokenB"
                            },
                            "id": 421,
                            "name": "Identifier",
                            "src": "2948:6:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "sender",
                              "referencedDeclaration": null,
                              "type": "address payable"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": -15,
                                  "type": "msg",
                                  "value": "msg"
                                },
                                "id": 422,
                                "name": "Identifier",
                                "src": "2956:3:1"
                              }
                            ],
                            "id": 423,
                            "name": "MemberAccess",
                            "src": "2956:10:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 400,
                              "type": "address",
                              "value": "pair"
                            },
                            "id": 424,
                            "name": "Identifier",
                            "src": "2968:4:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 382,
                              "type": "uint256",
                              "value": "amountB"
                            },
                            "id": 425,
                            "name": "Identifier",
                            "src": "2974:7:1"
                          }
                        ],
                        "id": 426,
                        "name": "FunctionCall",
                        "src": "2916:66:1"
                      }
                    ],
                    "id": 427,
                    "name": "ExpressionStatement",
                    "src": "2916:66:1"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 384,
                              "type": "uint256",
                              "value": "liquidity"
                            },
                            "id": 428,
                            "name": "Identifier",
                            "src": "2992:9:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "uint256",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "mint",
                                  "referencedDeclaration": 8508,
                                  "type": "function (address) external returns (uint256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "contract IMoonwalkerPair",
                                      "type_conversion": true
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          ],
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 8544,
                                          "type": "type(contract IMoonwalkerPair)",
                                          "value": "IMoonwalkerPair"
                                        },
                                        "id": 429,
                                        "name": "Identifier",
                                        "src": "3004:15:1"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 400,
                                          "type": "address",
                                          "value": "pair"
                                        },
                                        "id": 430,
                                        "name": "Identifier",
                                        "src": "3020:4:1"
                                      }
                                    ],
                                    "id": 431,
                                    "name": "FunctionCall",
                                    "src": "3004:21:1"
                                  }
                                ],
                                "id": 432,
                                "name": "MemberAccess",
                                "src": "3004:26:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 371,
                                  "type": "address",
                                  "value": "to"
                                },
                                "id": 433,
                                "name": "Identifier",
                                "src": "3031:2:1"
                              }
                            ],
                            "id": 434,
                            "name": "FunctionCall",
                            "src": "3004:30:1"
                          }
                        ],
                        "id": 435,
                        "name": "Assignment",
                        "src": "2992:42:1"
                      }
                    ],
                    "id": 436,
                    "name": "ExpressionStatement",
                    "src": "2992:42:1"
                  }
                ],
                "id": 437,
                "name": "Block",
                "src": "2633:408:1"
              }
            ],
            "id": 438,
            "name": "FunctionDefinition",
            "src": "2318:723:1"
          },
          {
            "attributes": {
              "baseFunctions": [
                3823
              ],
              "documentation": null,
              "functionSelector": "f305d719",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "name": "addLiquidityETH",
              "scope": 1627,
              "stateMutability": "payable",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 452,
                "name": "OverrideSpecifier",
                "src": "3241:8:1"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "token",
                      "overrides": null,
                      "scope": 540,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 439,
                        "name": "ElementaryTypeName",
                        "src": "3080:7:1"
                      }
                    ],
                    "id": 440,
                    "name": "VariableDeclaration",
                    "src": "3080:13:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amountTokenDesired",
                      "overrides": null,
                      "scope": 540,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 441,
                        "name": "ElementaryTypeName",
                        "src": "3103:4:1"
                      }
                    ],
                    "id": 442,
                    "name": "VariableDeclaration",
                    "src": "3103:23:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amountTokenMin",
                      "overrides": null,
                      "scope": 540,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 443,
                        "name": "ElementaryTypeName",
                        "src": "3136:4:1"
                      }
                    ],
                    "id": 444,
                    "name": "VariableDeclaration",
                    "src": "3136:19:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amountETHMin",
                      "overrides": null,
                      "scope": 540,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 445,
                        "name": "ElementaryTypeName",
                        "src": "3165:4:1"
                      }
                    ],
                    "id": 446,
                    "name": "VariableDeclaration",
                    "src": "3165:17:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "to",
                      "overrides": null,
                      "scope": 540,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 447,
                        "name": "ElementaryTypeName",
                        "src": "3192:7:1"
                      }
                    ],
                    "id": 448,
                    "name": "VariableDeclaration",
                    "src": "3192:10:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "deadline",
                      "overrides": null,
                      "scope": 540,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 449,
                        "name": "ElementaryTypeName",
                        "src": "3212:4:1"
                      }
                    ],
                    "id": 450,
                    "name": "VariableDeclaration",
                    "src": "3212:13:1"
                  }
                ],
                "id": 451,
                "name": "ParameterList",
                "src": "3070:161:1"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amountToken",
                      "overrides": null,
                      "scope": 540,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 456,
                        "name": "ElementaryTypeName",
                        "src": "3284:4:1"
                      }
                    ],
                    "id": 457,
                    "name": "VariableDeclaration",
                    "src": "3284:16:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amountETH",
                      "overrides": null,
                      "scope": 540,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 458,
                        "name": "ElementaryTypeName",
                        "src": "3302:4:1"
                      }
                    ],
                    "id": 459,
                    "name": "VariableDeclaration",
                    "src": "3302:14:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "liquidity",
                      "overrides": null,
                      "scope": 540,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 460,
                        "name": "ElementaryTypeName",
                        "src": "3318:4:1"
                      }
                    ],
                    "id": 461,
                    "name": "VariableDeclaration",
                    "src": "3318:14:1"
                  }
                ],
                "id": 462,
                "name": "ParameterList",
                "src": "3283:50:1"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 199,
                      "type": "modifier (uint256)",
                      "value": "ensure"
                    },
                    "id": 453,
                    "name": "Identifier",
                    "src": "3258:6:1"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 450,
                      "type": "uint256",
                      "value": "deadline"
                    },
                    "id": 454,
                    "name": "Identifier",
                    "src": "3265:8:1"
                  }
                ],
                "id": 455,
                "name": "ModifierInvocation",
                "src": "3258:16:1"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "tuple()"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "type": "tuple(uint256,uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 457,
                                  "type": "uint256",
                                  "value": "amountToken"
                                },
                                "id": 463,
                                "name": "Identifier",
                                "src": "3345:11:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 459,
                                  "type": "uint256",
                                  "value": "amountETH"
                                },
                                "id": 464,
                                "name": "Identifier",
                                "src": "3358:9:1"
                              }
                            ],
                            "id": 465,
                            "name": "TupleExpression",
                            "src": "3344:24:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "tuple(uint256,uint256)",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 357,
                                  "type": "function (address,address,uint256,uint256,uint256,uint256) returns (uint256,uint256)",
                                  "value": "_addLiquidity"
                                },
                                "id": 466,
                                "name": "Identifier",
                                "src": "3371:13:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 440,
                                  "type": "address",
                                  "value": "token"
                                },
                                "id": 467,
                                "name": "Identifier",
                                "src": "3398:5:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 185,
                                  "type": "address",
                                  "value": "WETH"
                                },
                                "id": 468,
                                "name": "Identifier",
                                "src": "3417:4:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 442,
                                  "type": "uint256",
                                  "value": "amountTokenDesired"
                                },
                                "id": 469,
                                "name": "Identifier",
                                "src": "3435:18:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "value",
                                  "referencedDeclaration": null,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": -15,
                                      "type": "msg",
                                      "value": "msg"
                                    },
                                    "id": 470,
                                    "name": "Identifier",
                                    "src": "3467:3:1"
                                  }
                                ],
                                "id": 471,
                                "name": "MemberAccess",
                                "src": "3467:9:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 444,
                                  "type": "uint256",
                                  "value": "amountTokenMin"
                                },
                                "id": 472,
                                "name": "Identifier",
                                "src": "3490:14:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 446,
                                  "type": "uint256",
                                  "value": "amountETHMin"
                                },
                                "id": 473,
                                "name": "Identifier",
                                "src": "3518:12:1"
                              }
                            ],
                            "id": 474,
                            "name": "FunctionCall",
                            "src": "3371:169:1"
                          }
                        ],
                        "id": 475,
                        "name": "Assignment",
                        "src": "3344:196:1"
                      }
                    ],
                    "id": 476,
                    "name": "ExpressionStatement",
                    "src": "3344:196:1"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        478
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "pair",
                          "overrides": null,
                          "scope": 539,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "address",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "address",
                              "stateMutability": "nonpayable",
                              "type": "address"
                            },
                            "id": 477,
                            "name": "ElementaryTypeName",
                            "src": "3550:7:1"
                          }
                        ],
                        "id": 478,
                        "name": "VariableDeclaration",
                        "src": "3550:12:1"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "address",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "pairFor",
                              "referencedDeclaration": 4343,
                              "type": "function (address,address,address) pure returns (address)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4719,
                                  "type": "type(library MoonwalkerswapV2Library)",
                                  "value": "MoonwalkerswapV2Library"
                                },
                                "id": 479,
                                "name": "Identifier",
                                "src": "3565:23:1"
                              }
                            ],
                            "id": 480,
                            "name": "MemberAccess",
                            "src": "3565:31:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 182,
                              "type": "address",
                              "value": "factory"
                            },
                            "id": 481,
                            "name": "Identifier",
                            "src": "3597:7:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 440,
                              "type": "address",
                              "value": "token"
                            },
                            "id": 482,
                            "name": "Identifier",
                            "src": "3606:5:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 185,
                              "type": "address",
                              "value": "WETH"
                            },
                            "id": 483,
                            "name": "Identifier",
                            "src": "3613:4:1"
                          }
                        ],
                        "id": 484,
                        "name": "FunctionCall",
                        "src": "3565:53:1"
                      }
                    ],
                    "id": 485,
                    "name": "VariableDeclarationStatement",
                    "src": "3550:68:1"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "safeTransferFrom",
                              "referencedDeclaration": 8213,
                              "type": "function (address,address,address,uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 8239,
                                  "type": "type(library TransferHelper)",
                                  "value": "TransferHelper"
                                },
                                "id": 486,
                                "name": "Identifier",
                                "src": "3628:14:1"
                              }
                            ],
                            "id": 488,
                            "name": "MemberAccess",
                            "src": "3628:31:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 440,
                              "type": "address",
                              "value": "token"
                            },
                            "id": 489,
                            "name": "Identifier",
                            "src": "3660:5:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "sender",
                              "referencedDeclaration": null,
                              "type": "address payable"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": -15,
                                  "type": "msg",
                                  "value": "msg"
                                },
                                "id": 490,
                                "name": "Identifier",
                                "src": "3667:3:1"
                              }
                            ],
                            "id": 491,
                            "name": "MemberAccess",
                            "src": "3667:10:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 478,
                              "type": "address",
                              "value": "pair"
                            },
                            "id": 492,
                            "name": "Identifier",
                            "src": "3679:4:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 457,
                              "type": "uint256",
                              "value": "amountToken"
                            },
                            "id": 493,
                            "name": "Identifier",
                            "src": "3685:11:1"
                          }
                        ],
                        "id": 494,
                        "name": "FunctionCall",
                        "src": "3628:69:1"
                      }
                    ],
                    "id": 495,
                    "name": "ExpressionStatement",
                    "src": "3628:69:1"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "names": [
                                "value"
                              ],
                              "type": "function () payable external"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "deposit",
                                  "referencedDeclaration": 4166,
                                  "type": "function () payable external"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "contract IWETH",
                                      "type_conversion": true
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          ],
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4181,
                                          "type": "type(contract IWETH)",
                                          "value": "IWETH"
                                        },
                                        "id": 496,
                                        "name": "Identifier",
                                        "src": "3707:5:1"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 185,
                                          "type": "address",
                                          "value": "WETH"
                                        },
                                        "id": 497,
                                        "name": "Identifier",
                                        "src": "3713:4:1"
                                      }
                                    ],
                                    "id": 498,
                                    "name": "FunctionCall",
                                    "src": "3707:11:1"
                                  }
                                ],
                                "id": 499,
                                "name": "MemberAccess",
                                "src": "3707:19:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 459,
                                  "type": "uint256",
                                  "value": "amountETH"
                                },
                                "id": 500,
                                "name": "Identifier",
                                "src": "3734:9:1"
                              }
                            ],
                            "id": 501,
                            "name": "FunctionCallOptions",
                            "src": "3707:37:1"
                          }
                        ],
                        "id": 502,
                        "name": "FunctionCall",
                        "src": "3707:39:1"
                      }
                    ],
                    "id": 503,
                    "name": "ExpressionStatement",
                    "src": "3707:39:1"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": -3,
                              "type": "function (bool) pure",
                              "value": "assert"
                            },
                            "id": 504,
                            "name": "Identifier",
                            "src": "3756:6:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "bool",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "transfer",
                                  "referencedDeclaration": 4175,
                                  "type": "function (address,uint256) external returns (bool)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "contract IWETH",
                                      "type_conversion": true
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          ],
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4181,
                                          "type": "type(contract IWETH)",
                                          "value": "IWETH"
                                        },
                                        "id": 505,
                                        "name": "Identifier",
                                        "src": "3763:5:1"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 185,
                                          "type": "address",
                                          "value": "WETH"
                                        },
                                        "id": 506,
                                        "name": "Identifier",
                                        "src": "3769:4:1"
                                      }
                                    ],
                                    "id": 507,
                                    "name": "FunctionCall",
                                    "src": "3763:11:1"
                                  }
                                ],
                                "id": 508,
                                "name": "MemberAccess",
                                "src": "3763:20:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 478,
                                  "type": "address",
                                  "value": "pair"
                                },
                                "id": 509,
                                "name": "Identifier",
                                "src": "3784:4:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 459,
                                  "type": "uint256",
                                  "value": "amountETH"
                                },
                                "id": 510,
                                "name": "Identifier",
                                "src": "3790:9:1"
                              }
                            ],
                            "id": 511,
                            "name": "FunctionCall",
                            "src": "3763:37:1"
                          }
                        ],
                        "id": 512,
                        "name": "FunctionCall",
                        "src": "3756:45:1"
                      }
                    ],
                    "id": 513,
                    "name": "ExpressionStatement",
                    "src": "3756:45:1"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 461,
                              "type": "uint256",
                              "value": "liquidity"
                            },
                            "id": 514,
                            "name": "Identifier",
                            "src": "3811:9:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "uint256",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "mint",
                                  "referencedDeclaration": 8508,
                                  "type": "function (address) external returns (uint256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "contract IMoonwalkerPair",
                                      "type_conversion": true
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          ],
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 8544,
                                          "type": "type(contract IMoonwalkerPair)",
                                          "value": "IMoonwalkerPair"
                                        },
                                        "id": 515,
                                        "name": "Identifier",
                                        "src": "3823:15:1"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 478,
                                          "type": "address",
                                          "value": "pair"
                                        },
                                        "id": 516,
                                        "name": "Identifier",
                                        "src": "3839:4:1"
                                      }
                                    ],
                                    "id": 517,
                                    "name": "FunctionCall",
                                    "src": "3823:21:1"
                                  }
                                ],
                                "id": 518,
                                "name": "MemberAccess",
                                "src": "3823:26:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 448,
                                  "type": "address",
                                  "value": "to"
                                },
                                "id": 519,
                                "name": "Identifier",
                                "src": "3850:2:1"
                              }
                            ],
                            "id": 520,
                            "name": "FunctionCall",
                            "src": "3823:30:1"
                          }
                        ],
                        "id": 521,
                        "name": "Assignment",
                        "src": "3811:42:1"
                      }
                    ],
                    "id": 522,
                    "name": "ExpressionStatement",
                    "src": "3811:42:1"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": ">",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "value",
                              "referencedDeclaration": null,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": -15,
                                  "type": "msg",
                                  "value": "msg"
                                },
                                "id": 523,
                                "name": "Identifier",
                                "src": "3867:3:1"
                              }
                            ],
                            "id": 524,
                            "name": "MemberAccess",
                            "src": "3867:9:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 459,
                              "type": "uint256",
                              "value": "amountETH"
                            },
                            "id": 525,
                            "name": "Identifier",
                            "src": "3879:9:1"
                          }
                        ],
                        "id": 526,
                        "name": "BinaryOperation",
                        "src": "3867:21:1"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "tuple()",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "safeTransferETH",
                                  "referencedDeclaration": 8238,
                                  "type": "function (address,uint256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 8239,
                                      "type": "type(library TransferHelper)",
                                      "value": "TransferHelper"
                                    },
                                    "id": 527,
                                    "name": "Identifier",
                                    "src": "3890:14:1"
                                  }
                                ],
                                "id": 529,
                                "name": "MemberAccess",
                                "src": "3890:30:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "sender",
                                  "referencedDeclaration": null,
                                  "type": "address payable"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": -15,
                                      "type": "msg",
                                      "value": "msg"
                                    },
                                    "id": 530,
                                    "name": "Identifier",
                                    "src": "3921:3:1"
                                  }
                                ],
                                "id": 531,
                                "name": "MemberAccess",
                                "src": "3921:10:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "-",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "value",
                                      "referencedDeclaration": null,
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": -15,
                                          "type": "msg",
                                          "value": "msg"
                                        },
                                        "id": 532,
                                        "name": "Identifier",
                                        "src": "3933:3:1"
                                      }
                                    ],
                                    "id": 533,
                                    "name": "MemberAccess",
                                    "src": "3933:9:1"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 459,
                                      "type": "uint256",
                                      "value": "amountETH"
                                    },
                                    "id": 534,
                                    "name": "Identifier",
                                    "src": "3945:9:1"
                                  }
                                ],
                                "id": 535,
                                "name": "BinaryOperation",
                                "src": "3933:21:1"
                              }
                            ],
                            "id": 536,
                            "name": "FunctionCall",
                            "src": "3890:65:1"
                          }
                        ],
                        "id": 537,
                        "name": "ExpressionStatement",
                        "src": "3890:65:1"
                      }
                    ],
                    "id": 538,
                    "name": "IfStatement",
                    "src": "3863:92:1"
                  }
                ],
                "id": 539,
                "name": "Block",
                "src": "3334:655:1"
              }
            ],
            "id": 540,
            "name": "FunctionDefinition",
            "src": "3046:943:1"
          },
          {
            "attributes": {
              "baseFunctions": [
                3844
              ],
              "documentation": null,
              "functionSelector": "baa2abde",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "name": "removeLiquidity",
              "scope": 1627,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 556,
                "name": "OverrideSpecifier",
                "src": "4232:8:1"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenA",
                      "overrides": null,
                      "scope": 633,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 541,
                        "name": "ElementaryTypeName",
                        "src": "4063:7:1"
                      }
                    ],
                    "id": 542,
                    "name": "VariableDeclaration",
                    "src": "4063:14:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenB",
                      "overrides": null,
                      "scope": 633,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 543,
                        "name": "ElementaryTypeName",
                        "src": "4087:7:1"
                      }
                    ],
                    "id": 544,
                    "name": "VariableDeclaration",
                    "src": "4087:14:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "liquidity",
                      "overrides": null,
                      "scope": 633,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 545,
                        "name": "ElementaryTypeName",
                        "src": "4111:4:1"
                      }
                    ],
                    "id": 546,
                    "name": "VariableDeclaration",
                    "src": "4111:14:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amountAMin",
                      "overrides": null,
                      "scope": 633,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 547,
                        "name": "ElementaryTypeName",
                        "src": "4135:4:1"
                      }
                    ],
                    "id": 548,
                    "name": "VariableDeclaration",
                    "src": "4135:15:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amountBMin",
                      "overrides": null,
                      "scope": 633,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 549,
                        "name": "ElementaryTypeName",
                        "src": "4160:4:1"
                      }
                    ],
                    "id": 550,
                    "name": "VariableDeclaration",
                    "src": "4160:15:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "to",
                      "overrides": null,
                      "scope": 633,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 551,
                        "name": "ElementaryTypeName",
                        "src": "4185:7:1"
                      }
                    ],
                    "id": 552,
                    "name": "VariableDeclaration",
                    "src": "4185:10:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "deadline",
                      "overrides": null,
                      "scope": 633,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 553,
                        "name": "ElementaryTypeName",
                        "src": "4205:4:1"
                      }
                    ],
                    "id": 554,
                    "name": "VariableDeclaration",
                    "src": "4205:13:1"
                  }
                ],
                "id": 555,
                "name": "ParameterList",
                "src": "4053:171:1"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amountA",
                      "overrides": null,
                      "scope": 633,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 560,
                        "name": "ElementaryTypeName",
                        "src": "4267:4:1"
                      }
                    ],
                    "id": 561,
                    "name": "VariableDeclaration",
                    "src": "4267:12:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amountB",
                      "overrides": null,
                      "scope": 633,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 562,
                        "name": "ElementaryTypeName",
                        "src": "4281:4:1"
                      }
                    ],
                    "id": 563,
                    "name": "VariableDeclaration",
                    "src": "4281:12:1"
                  }
                ],
                "id": 564,
                "name": "ParameterList",
                "src": "4266:28:1"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 199,
                      "type": "modifier (uint256)",
                      "value": "ensure"
                    },
                    "id": 557,
                    "name": "Identifier",
                    "src": "4241:6:1"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 554,
                      "type": "uint256",
                      "value": "deadline"
                    },
                    "id": 558,
                    "name": "Identifier",
                    "src": "4248:8:1"
                  }
                ],
                "id": 559,
                "name": "ModifierInvocation",
                "src": "4241:16:1"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        566
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "pair",
                          "overrides": null,
                          "scope": 632,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "address",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "address",
                              "stateMutability": "nonpayable",
                              "type": "address"
                            },
                            "id": 565,
                            "name": "ElementaryTypeName",
                            "src": "4305:7:1"
                          }
                        ],
                        "id": 566,
                        "name": "VariableDeclaration",
                        "src": "4305:12:1"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "address",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "pairFor",
                              "referencedDeclaration": 4343,
                              "type": "function (address,address,address) pure returns (address)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4719,
                                  "type": "type(library MoonwalkerswapV2Library)",
                                  "value": "MoonwalkerswapV2Library"
                                },
                                "id": 567,
                                "name": "Identifier",
                                "src": "4320:23:1"
                              }
                            ],
                            "id": 568,
                            "name": "MemberAccess",
                            "src": "4320:31:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 182,
                              "type": "address",
                              "value": "factory"
                            },
                            "id": 569,
                            "name": "Identifier",
                            "src": "4352:7:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 542,
                              "type": "address",
                              "value": "tokenA"
                            },
                            "id": 570,
                            "name": "Identifier",
                            "src": "4361:6:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 544,
                              "type": "address",
                              "value": "tokenB"
                            },
                            "id": 571,
                            "name": "Identifier",
                            "src": "4369:6:1"
                          }
                        ],
                        "id": 572,
                        "name": "FunctionCall",
                        "src": "4320:56:1"
                      }
                    ],
                    "id": 573,
                    "name": "VariableDeclarationStatement",
                    "src": "4305:71:1"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "bool",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "transferFrom",
                              "referencedDeclaration": 8385,
                              "type": "function (address,address,uint256) external returns (bool)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "contract IMoonwalkerPair",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 8544,
                                      "type": "type(contract IMoonwalkerPair)",
                                      "value": "IMoonwalkerPair"
                                    },
                                    "id": 574,
                                    "name": "Identifier",
                                    "src": "4386:15:1"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 566,
                                      "type": "address",
                                      "value": "pair"
                                    },
                                    "id": 575,
                                    "name": "Identifier",
                                    "src": "4402:4:1"
                                  }
                                ],
                                "id": 576,
                                "name": "FunctionCall",
                                "src": "4386:21:1"
                              }
                            ],
                            "id": 577,
                            "name": "MemberAccess",
                            "src": "4386:34:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "sender",
                              "referencedDeclaration": null,
                              "type": "address payable"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": -15,
                                  "type": "msg",
                                  "value": "msg"
                                },
                                "id": 578,
                                "name": "Identifier",
                                "src": "4421:3:1"
                              }
                            ],
                            "id": 579,
                            "name": "MemberAccess",
                            "src": "4421:10:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 566,
                              "type": "address",
                              "value": "pair"
                            },
                            "id": 580,
                            "name": "Identifier",
                            "src": "4433:4:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 546,
                              "type": "uint256",
                              "value": "liquidity"
                            },
                            "id": 581,
                            "name": "Identifier",
                            "src": "4439:9:1"
                          }
                        ],
                        "id": 582,
                        "name": "FunctionCall",
                        "src": "4386:63:1"
                      }
                    ],
                    "id": 583,
                    "name": "ExpressionStatement",
                    "src": "4386:63:1"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        585,
                        587
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "amount0",
                          "overrides": null,
                          "scope": 632,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint",
                              "type": "uint256"
                            },
                            "id": 584,
                            "name": "ElementaryTypeName",
                            "src": "4486:4:1"
                          }
                        ],
                        "id": 585,
                        "name": "VariableDeclaration",
                        "src": "4486:12:1"
                      },
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "amount1",
                          "overrides": null,
                          "scope": 632,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint",
                              "type": "uint256"
                            },
                            "id": 586,
                            "name": "ElementaryTypeName",
                            "src": "4500:4:1"
                          }
                        ],
                        "id": 587,
                        "name": "VariableDeclaration",
                        "src": "4500:12:1"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple(uint256,uint256)",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "burn",
                              "referencedDeclaration": 8517,
                              "type": "function (address) external returns (uint256,uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "contract IMoonwalkerPair",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 8544,
                                      "type": "type(contract IMoonwalkerPair)",
                                      "value": "IMoonwalkerPair"
                                    },
                                    "id": 588,
                                    "name": "Identifier",
                                    "src": "4516:15:1"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 566,
                                      "type": "address",
                                      "value": "pair"
                                    },
                                    "id": 589,
                                    "name": "Identifier",
                                    "src": "4532:4:1"
                                  }
                                ],
                                "id": 590,
                                "name": "FunctionCall",
                                "src": "4516:21:1"
                              }
                            ],
                            "id": 591,
                            "name": "MemberAccess",
                            "src": "4516:26:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 552,
                              "type": "address",
                              "value": "to"
                            },
                            "id": 592,
                            "name": "Identifier",
                            "src": "4543:2:1"
                          }
                        ],
                        "id": 593,
                        "name": "FunctionCall",
                        "src": "4516:30:1"
                      }
                    ],
                    "id": 594,
                    "name": "VariableDeclarationStatement",
                    "src": "4485:61:1"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        596,
                        null
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "token0",
                          "overrides": null,
                          "scope": 632,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "address",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "address",
                              "stateMutability": "nonpayable",
                              "type": "address"
                            },
                            "id": 595,
                            "name": "ElementaryTypeName",
                            "src": "4557:7:1"
                          }
                        ],
                        "id": 596,
                        "name": "VariableDeclaration",
                        "src": "4557:14:1"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple(address,address)",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "sortTokens",
                              "referencedDeclaration": 4298,
                              "type": "function (address,address) pure returns (address,address)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4719,
                                  "type": "type(library MoonwalkerswapV2Library)",
                                  "value": "MoonwalkerswapV2Library"
                                },
                                "id": 597,
                                "name": "Identifier",
                                "src": "4576:23:1"
                              }
                            ],
                            "id": 598,
                            "name": "MemberAccess",
                            "src": "4576:34:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 542,
                              "type": "address",
                              "value": "tokenA"
                            },
                            "id": 599,
                            "name": "Identifier",
                            "src": "4611:6:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 544,
                              "type": "address",
                              "value": "tokenB"
                            },
                            "id": 600,
                            "name": "Identifier",
                            "src": "4619:6:1"
                          }
                        ],
                        "id": 601,
                        "name": "FunctionCall",
                        "src": "4576:50:1"
                      }
                    ],
                    "id": 602,
                    "name": "VariableDeclarationStatement",
                    "src": "4556:70:1"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "tuple()"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "type": "tuple(uint256,uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 561,
                                  "type": "uint256",
                                  "value": "amountA"
                                },
                                "id": 603,
                                "name": "Identifier",
                                "src": "4637:7:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 563,
                                  "type": "uint256",
                                  "value": "amountB"
                                },
                                "id": 604,
                                "name": "Identifier",
                                "src": "4646:7:1"
                              }
                            ],
                            "id": 605,
                            "name": "TupleExpression",
                            "src": "4636:18:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "type": "tuple(uint256,uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "==",
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 542,
                                      "type": "address",
                                      "value": "tokenA"
                                    },
                                    "id": 606,
                                    "name": "Identifier",
                                    "src": "4657:6:1"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 596,
                                      "type": "address",
                                      "value": "token0"
                                    },
                                    "id": 607,
                                    "name": "Identifier",
                                    "src": "4667:6:1"
                                  }
                                ],
                                "id": 608,
                                "name": "BinaryOperation",
                                "src": "4657:16:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "tuple(uint256,uint256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 585,
                                      "type": "uint256",
                                      "value": "amount0"
                                    },
                                    "id": 609,
                                    "name": "Identifier",
                                    "src": "4677:7:1"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 587,
                                      "type": "uint256",
                                      "value": "amount1"
                                    },
                                    "id": 610,
                                    "name": "Identifier",
                                    "src": "4686:7:1"
                                  }
                                ],
                                "id": 611,
                                "name": "TupleExpression",
                                "src": "4676:18:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "tuple(uint256,uint256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 587,
                                      "type": "uint256",
                                      "value": "amount1"
                                    },
                                    "id": 612,
                                    "name": "Identifier",
                                    "src": "4698:7:1"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 585,
                                      "type": "uint256",
                                      "value": "amount0"
                                    },
                                    "id": 613,
                                    "name": "Identifier",
                                    "src": "4707:7:1"
                                  }
                                ],
                                "id": 614,
                                "name": "TupleExpression",
                                "src": "4697:18:1"
                              }
                            ],
                            "id": 615,
                            "name": "Conditional",
                            "src": "4657:58:1"
                          }
                        ],
                        "id": 616,
                        "name": "Assignment",
                        "src": "4636:79:1"
                      }
                    ],
                    "id": 617,
                    "name": "ExpressionStatement",
                    "src": "4636:79:1"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_077734a4f7cf9428f7f4c6d3609667308f8cccd0a28f5aeb61695694480df8b8",
                                  "typeString": "literal_string \"MoonwalkerswapV2Router: INSUFFICIENT_A_AMOUNT\""
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 618,
                            "name": "Identifier",
                            "src": "4725:7:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": ">=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 561,
                                  "type": "uint256",
                                  "value": "amountA"
                                },
                                "id": 619,
                                "name": "Identifier",
                                "src": "4733:7:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 548,
                                  "type": "uint256",
                                  "value": "amountAMin"
                                },
                                "id": 620,
                                "name": "Identifier",
                                "src": "4744:10:1"
                              }
                            ],
                            "id": 621,
                            "name": "BinaryOperation",
                            "src": "4733:21:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "4d6f6f6e77616c6b6572737761705632526f757465723a20494e53554646494349454e545f415f414d4f554e54",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"MoonwalkerswapV2Router: INSUFFICIENT_A_AMOUNT\"",
                              "value": "MoonwalkerswapV2Router: INSUFFICIENT_A_AMOUNT"
                            },
                            "id": 622,
                            "name": "Literal",
                            "src": "4756:47:1"
                          }
                        ],
                        "id": 623,
                        "name": "FunctionCall",
                        "src": "4725:79:1"
                      }
                    ],
                    "id": 624,
                    "name": "ExpressionStatement",
                    "src": "4725:79:1"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_ac772567becfb520022da0d75cd7578f37f73655ce5d281319634de23c417ed7",
                                  "typeString": "literal_string \"MoonwalkerswapV2Router: INSUFFICIENT_B_AMOUNT\""
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 625,
                            "name": "Identifier",
                            "src": "4814:7:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": ">=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 563,
                                  "type": "uint256",
                                  "value": "amountB"
                                },
                                "id": 626,
                                "name": "Identifier",
                                "src": "4822:7:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 550,
                                  "type": "uint256",
                                  "value": "amountBMin"
                                },
                                "id": 627,
                                "name": "Identifier",
                                "src": "4833:10:1"
                              }
                            ],
                            "id": 628,
                            "name": "BinaryOperation",
                            "src": "4822:21:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "4d6f6f6e77616c6b6572737761705632526f757465723a20494e53554646494349454e545f425f414d4f554e54",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"MoonwalkerswapV2Router: INSUFFICIENT_B_AMOUNT\"",
                              "value": "MoonwalkerswapV2Router: INSUFFICIENT_B_AMOUNT"
                            },
                            "id": 629,
                            "name": "Literal",
                            "src": "4845:47:1"
                          }
                        ],
                        "id": 630,
                        "name": "FunctionCall",
                        "src": "4814:79:1"
                      }
                    ],
                    "id": 631,
                    "name": "ExpressionStatement",
                    "src": "4814:79:1"
                  }
                ],
                "id": 632,
                "name": "Block",
                "src": "4295:605:1"
              }
            ],
            "id": 633,
            "name": "FunctionDefinition",
            "src": "4029:871:1"
          },
          {
            "attributes": {
              "baseFunctions": [
                3863
              ],
              "documentation": null,
              "functionSelector": "02751cec",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "name": "removeLiquidityETH",
              "scope": 1627,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 647,
                "name": "OverrideSpecifier",
                "src": "5092:8:1"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "token",
                      "overrides": null,
                      "scope": 696,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 634,
                        "name": "ElementaryTypeName",
                        "src": "4942:7:1"
                      }
                    ],
                    "id": 635,
                    "name": "VariableDeclaration",
                    "src": "4942:13:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "liquidity",
                      "overrides": null,
                      "scope": 696,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 636,
                        "name": "ElementaryTypeName",
                        "src": "4965:4:1"
                      }
                    ],
                    "id": 637,
                    "name": "VariableDeclaration",
                    "src": "4965:14:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amountTokenMin",
                      "overrides": null,
                      "scope": 696,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 638,
                        "name": "ElementaryTypeName",
                        "src": "4989:4:1"
                      }
                    ],
                    "id": 639,
                    "name": "VariableDeclaration",
                    "src": "4989:19:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amountETHMin",
                      "overrides": null,
                      "scope": 696,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 640,
                        "name": "ElementaryTypeName",
                        "src": "5018:4:1"
                      }
                    ],
                    "id": 641,
                    "name": "VariableDeclaration",
                    "src": "5018:17:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "to",
                      "overrides": null,
                      "scope": 696,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 642,
                        "name": "ElementaryTypeName",
                        "src": "5045:7:1"
                      }
                    ],
                    "id": 643,
                    "name": "VariableDeclaration",
                    "src": "5045:10:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "deadline",
                      "overrides": null,
                      "scope": 696,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 644,
                        "name": "ElementaryTypeName",
                        "src": "5065:4:1"
                      }
                    ],
                    "id": 645,
                    "name": "VariableDeclaration",
                    "src": "5065:13:1"
                  }
                ],
                "id": 646,
                "name": "ParameterList",
                "src": "4932:152:1"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amountToken",
                      "overrides": null,
                      "scope": 696,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 651,
                        "name": "ElementaryTypeName",
                        "src": "5127:4:1"
                      }
                    ],
                    "id": 652,
                    "name": "VariableDeclaration",
                    "src": "5127:16:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amountETH",
                      "overrides": null,
                      "scope": 696,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 653,
                        "name": "ElementaryTypeName",
                        "src": "5145:4:1"
                      }
                    ],
                    "id": 654,
                    "name": "VariableDeclaration",
                    "src": "5145:14:1"
                  }
                ],
                "id": 655,
                "name": "ParameterList",
                "src": "5126:34:1"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 199,
                      "type": "modifier (uint256)",
                      "value": "ensure"
                    },
                    "id": 648,
                    "name": "Identifier",
                    "src": "5101:6:1"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 645,
                      "type": "uint256",
                      "value": "deadline"
                    },
                    "id": 649,
                    "name": "Identifier",
                    "src": "5108:8:1"
                  }
                ],
                "id": 650,
                "name": "ModifierInvocation",
                "src": "5101:16:1"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "tuple()"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "type": "tuple(uint256,uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 652,
                                  "type": "uint256",
                                  "value": "amountToken"
                                },
                                "id": 656,
                                "name": "Identifier",
                                "src": "5172:11:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 654,
                                  "type": "uint256",
                                  "value": "amountETH"
                                },
                                "id": 657,
                                "name": "Identifier",
                                "src": "5185:9:1"
                              }
                            ],
                            "id": 658,
                            "name": "TupleExpression",
                            "src": "5171:24:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "tuple(uint256,uint256)",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 633,
                                  "type": "function (address,address,uint256,uint256,uint256,address,uint256) returns (uint256,uint256)",
                                  "value": "removeLiquidity"
                                },
                                "id": 659,
                                "name": "Identifier",
                                "src": "5198:15:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 635,
                                  "type": "address",
                                  "value": "token"
                                },
                                "id": 660,
                                "name": "Identifier",
                                "src": "5227:5:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 185,
                                  "type": "address",
                                  "value": "WETH"
                                },
                                "id": 661,
                                "name": "Identifier",
                                "src": "5246:4:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 637,
                                  "type": "uint256",
                                  "value": "liquidity"
                                },
                                "id": 662,
                                "name": "Identifier",
                                "src": "5264:9:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 639,
                                  "type": "uint256",
                                  "value": "amountTokenMin"
                                },
                                "id": 663,
                                "name": "Identifier",
                                "src": "5287:14:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 641,
                                  "type": "uint256",
                                  "value": "amountETHMin"
                                },
                                "id": 664,
                                "name": "Identifier",
                                "src": "5315:12:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "address payable",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_contract$_MoonwalkerswapV2Router01_$1627",
                                          "typeString": "contract MoonwalkerswapV2Router01"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(address)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "name": "address",
                                          "type": null
                                        },
                                        "id": 665,
                                        "name": "ElementaryTypeName",
                                        "src": "5341:7:1"
                                      }
                                    ],
                                    "id": 666,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "5341:7:1"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": -28,
                                      "type": "contract MoonwalkerswapV2Router01",
                                      "value": "this"
                                    },
                                    "id": 667,
                                    "name": "Identifier",
                                    "src": "5349:4:1"
                                  }
                                ],
                                "id": 668,
                                "name": "FunctionCall",
                                "src": "5341:13:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 645,
                                  "type": "uint256",
                                  "value": "deadline"
                                },
                                "id": 669,
                                "name": "Identifier",
                                "src": "5368:8:1"
                              }
                            ],
                            "id": 670,
                            "name": "FunctionCall",
                            "src": "5198:188:1"
                          }
                        ],
                        "id": 671,
                        "name": "Assignment",
                        "src": "5171:215:1"
                      }
                    ],
                    "id": 672,
                    "name": "ExpressionStatement",
                    "src": "5171:215:1"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "safeTransfer",
                              "referencedDeclaration": 8167,
                              "type": "function (address,address,uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 8239,
                                  "type": "type(library TransferHelper)",
                                  "value": "TransferHelper"
                                },
                                "id": 673,
                                "name": "Identifier",
                                "src": "5396:14:1"
                              }
                            ],
                            "id": 675,
                            "name": "MemberAccess",
                            "src": "5396:27:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 635,
                              "type": "address",
                              "value": "token"
                            },
                            "id": 676,
                            "name": "Identifier",
                            "src": "5424:5:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 643,
                              "type": "address",
                              "value": "to"
                            },
                            "id": 677,
                            "name": "Identifier",
                            "src": "5431:2:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 652,
                              "type": "uint256",
                              "value": "amountToken"
                            },
                            "id": 678,
                            "name": "Identifier",
                            "src": "5435:11:1"
                          }
                        ],
                        "id": 679,
                        "name": "FunctionCall",
                        "src": "5396:51:1"
                      }
                    ],
                    "id": 680,
                    "name": "ExpressionStatement",
                    "src": "5396:51:1"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "withdraw",
                              "referencedDeclaration": 4180,
                              "type": "function (uint256) external"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "contract IWETH",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4181,
                                      "type": "type(contract IWETH)",
                                      "value": "IWETH"
                                    },
                                    "id": 681,
                                    "name": "Identifier",
                                    "src": "5457:5:1"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 185,
                                      "type": "address",
                                      "value": "WETH"
                                    },
                                    "id": 682,
                                    "name": "Identifier",
                                    "src": "5463:4:1"
                                  }
                                ],
                                "id": 683,
                                "name": "FunctionCall",
                                "src": "5457:11:1"
                              }
                            ],
                            "id": 684,
                            "name": "MemberAccess",
                            "src": "5457:20:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 654,
                              "type": "uint256",
                              "value": "amountETH"
                            },
                            "id": 685,
                            "name": "Identifier",
                            "src": "5478:9:1"
                          }
                        ],
                        "id": 686,
                        "name": "FunctionCall",
                        "src": "5457:31:1"
                      }
                    ],
                    "id": 687,
                    "name": "ExpressionStatement",
                    "src": "5457:31:1"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "safeTransferETH",
                              "referencedDeclaration": 8238,
                              "type": "function (address,uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 8239,
                                  "type": "type(library TransferHelper)",
                                  "value": "TransferHelper"
                                },
                                "id": 688,
                                "name": "Identifier",
                                "src": "5498:14:1"
                              }
                            ],
                            "id": 690,
                            "name": "MemberAccess",
                            "src": "5498:30:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 643,
                              "type": "address",
                              "value": "to"
                            },
                            "id": 691,
                            "name": "Identifier",
                            "src": "5529:2:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 654,
                              "type": "uint256",
                              "value": "amountETH"
                            },
                            "id": 692,
                            "name": "Identifier",
                            "src": "5533:9:1"
                          }
                        ],
                        "id": 693,
                        "name": "FunctionCall",
                        "src": "5498:45:1"
                      }
                    ],
                    "id": 694,
                    "name": "ExpressionStatement",
                    "src": "5498:45:1"
                  }
                ],
                "id": 695,
                "name": "Block",
                "src": "5161:389:1"
              }
            ],
            "id": 696,
            "name": "FunctionDefinition",
            "src": "4905:645:1"
          },
          {
            "attributes": {
              "baseFunctions": [
                3892
              ],
              "documentation": null,
              "functionSelector": "2195995c",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "removeLiquidityWithPermit",
              "scope": 1627,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 720,
                "name": "OverrideSpecifier",
                "src": "5826:8:1"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenA",
                      "overrides": null,
                      "scope": 778,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 697,
                        "name": "ElementaryTypeName",
                        "src": "5599:7:1"
                      }
                    ],
                    "id": 698,
                    "name": "VariableDeclaration",
                    "src": "5599:14:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenB",
                      "overrides": null,
                      "scope": 778,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 699,
                        "name": "ElementaryTypeName",
                        "src": "5623:7:1"
                      }
                    ],
                    "id": 700,
                    "name": "VariableDeclaration",
                    "src": "5623:14:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "liquidity",
                      "overrides": null,
                      "scope": 778,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 701,
                        "name": "ElementaryTypeName",
                        "src": "5647:4:1"
                      }
                    ],
                    "id": 702,
                    "name": "VariableDeclaration",
                    "src": "5647:14:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amountAMin",
                      "overrides": null,
                      "scope": 778,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 703,
                        "name": "ElementaryTypeName",
                        "src": "5671:4:1"
                      }
                    ],
                    "id": 704,
                    "name": "VariableDeclaration",
                    "src": "5671:15:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amountBMin",
                      "overrides": null,
                      "scope": 778,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 705,
                        "name": "ElementaryTypeName",
                        "src": "5696:4:1"
                      }
                    ],
                    "id": 706,
                    "name": "VariableDeclaration",
                    "src": "5696:15:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "to",
                      "overrides": null,
                      "scope": 778,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 707,
                        "name": "ElementaryTypeName",
                        "src": "5721:7:1"
                      }
                    ],
                    "id": 708,
                    "name": "VariableDeclaration",
                    "src": "5721:10:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "deadline",
                      "overrides": null,
                      "scope": 778,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 709,
                        "name": "ElementaryTypeName",
                        "src": "5741:4:1"
                      }
                    ],
                    "id": 710,
                    "name": "VariableDeclaration",
                    "src": "5741:13:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "approveMax",
                      "overrides": null,
                      "scope": 778,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 711,
                        "name": "ElementaryTypeName",
                        "src": "5764:4:1"
                      }
                    ],
                    "id": 712,
                    "name": "VariableDeclaration",
                    "src": "5764:15:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "v",
                      "overrides": null,
                      "scope": 778,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint8",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint8",
                          "type": "uint8"
                        },
                        "id": 713,
                        "name": "ElementaryTypeName",
                        "src": "5781:5:1"
                      }
                    ],
                    "id": 714,
                    "name": "VariableDeclaration",
                    "src": "5781:7:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "r",
                      "overrides": null,
                      "scope": 778,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 715,
                        "name": "ElementaryTypeName",
                        "src": "5790:7:1"
                      }
                    ],
                    "id": 716,
                    "name": "VariableDeclaration",
                    "src": "5790:9:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "s",
                      "overrides": null,
                      "scope": 778,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 717,
                        "name": "ElementaryTypeName",
                        "src": "5801:7:1"
                      }
                    ],
                    "id": 718,
                    "name": "VariableDeclaration",
                    "src": "5801:9:1"
                  }
                ],
                "id": 719,
                "name": "ParameterList",
                "src": "5589:227:1"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amountA",
                      "overrides": null,
                      "scope": 778,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 721,
                        "name": "ElementaryTypeName",
                        "src": "5844:4:1"
                      }
                    ],
                    "id": 722,
                    "name": "VariableDeclaration",
                    "src": "5844:12:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amountB",
                      "overrides": null,
                      "scope": 778,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 723,
                        "name": "ElementaryTypeName",
                        "src": "5858:4:1"
                      }
                    ],
                    "id": 724,
                    "name": "VariableDeclaration",
                    "src": "5858:12:1"
                  }
                ],
                "id": 725,
                "name": "ParameterList",
                "src": "5843:28:1"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        727
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "pair",
                          "overrides": null,
                          "scope": 777,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "address",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "address",
                              "stateMutability": "nonpayable",
                              "type": "address"
                            },
                            "id": 726,
                            "name": "ElementaryTypeName",
                            "src": "5882:7:1"
                          }
                        ],
                        "id": 727,
                        "name": "VariableDeclaration",
                        "src": "5882:12:1"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "address",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "pairFor",
                              "referencedDeclaration": 4343,
                              "type": "function (address,address,address) pure returns (address)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4719,
                                  "type": "type(library MoonwalkerswapV2Library)",
                                  "value": "MoonwalkerswapV2Library"
                                },
                                "id": 728,
                                "name": "Identifier",
                                "src": "5897:23:1"
                              }
                            ],
                            "id": 729,
                            "name": "MemberAccess",
                            "src": "5897:31:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 182,
                              "type": "address",
                              "value": "factory"
                            },
                            "id": 730,
                            "name": "Identifier",
                            "src": "5929:7:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 698,
                              "type": "address",
                              "value": "tokenA"
                            },
                            "id": 731,
                            "name": "Identifier",
                            "src": "5938:6:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 700,
                              "type": "address",
                              "value": "tokenB"
                            },
                            "id": 732,
                            "name": "Identifier",
                            "src": "5946:6:1"
                          }
                        ],
                        "id": 733,
                        "name": "FunctionCall",
                        "src": "5897:56:1"
                      }
                    ],
                    "id": 734,
                    "name": "VariableDeclarationStatement",
                    "src": "5882:71:1"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        736
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "value",
                          "overrides": null,
                          "scope": 777,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint",
                              "type": "uint256"
                            },
                            "id": 735,
                            "name": "ElementaryTypeName",
                            "src": "5963:4:1"
                          }
                        ],
                        "id": 736,
                        "name": "VariableDeclaration",
                        "src": "5963:10:1"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 712,
                              "type": "bool",
                              "value": "approveMax"
                            },
                            "id": 737,
                            "name": "Identifier",
                            "src": "5976:10:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "uint256",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_minus_1_by_1",
                                      "typeString": "int_const -1"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(uint256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "uint",
                                      "type": null
                                    },
                                    "id": 738,
                                    "name": "ElementaryTypeName",
                                    "src": "5989:4:1"
                                  }
                                ],
                                "id": 739,
                                "name": "ElementaryTypeNameExpression",
                                "src": "5989:4:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "operator": "-",
                                  "prefix": true,
                                  "type": "int_const -1"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "31",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 1",
                                      "value": "1"
                                    },
                                    "id": 740,
                                    "name": "Literal",
                                    "src": "5995:1:1"
                                  }
                                ],
                                "id": 741,
                                "name": "UnaryOperation",
                                "src": "5994:2:1"
                              }
                            ],
                            "id": 742,
                            "name": "FunctionCall",
                            "src": "5989:8:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 702,
                              "type": "uint256",
                              "value": "liquidity"
                            },
                            "id": 743,
                            "name": "Identifier",
                            "src": "6000:9:1"
                          }
                        ],
                        "id": 744,
                        "name": "Conditional",
                        "src": "5976:33:1"
                      }
                    ],
                    "id": 745,
                    "name": "VariableDeclarationStatement",
                    "src": "5963:46:1"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                },
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "permit",
                              "referencedDeclaration": 8419,
                              "type": "function (address,address,uint256,uint256,uint8,bytes32,bytes32) external"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "contract IMoonwalkerPair",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 8544,
                                      "type": "type(contract IMoonwalkerPair)",
                                      "value": "IMoonwalkerPair"
                                    },
                                    "id": 746,
                                    "name": "Identifier",
                                    "src": "6019:15:1"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 727,
                                      "type": "address",
                                      "value": "pair"
                                    },
                                    "id": 747,
                                    "name": "Identifier",
                                    "src": "6035:4:1"
                                  }
                                ],
                                "id": 748,
                                "name": "FunctionCall",
                                "src": "6019:21:1"
                              }
                            ],
                            "id": 749,
                            "name": "MemberAccess",
                            "src": "6019:28:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "sender",
                              "referencedDeclaration": null,
                              "type": "address payable"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": -15,
                                  "type": "msg",
                                  "value": "msg"
                                },
                                "id": 750,
                                "name": "Identifier",
                                "src": "6048:3:1"
                              }
                            ],
                            "id": 751,
                            "name": "MemberAccess",
                            "src": "6048:10:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "address payable",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_MoonwalkerswapV2Router01_$1627",
                                      "typeString": "contract MoonwalkerswapV2Router01"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(address)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "address",
                                      "type": null
                                    },
                                    "id": 752,
                                    "name": "ElementaryTypeName",
                                    "src": "6060:7:1"
                                  }
                                ],
                                "id": 753,
                                "name": "ElementaryTypeNameExpression",
                                "src": "6060:7:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": -28,
                                  "type": "contract MoonwalkerswapV2Router01",
                                  "value": "this"
                                },
                                "id": 754,
                                "name": "Identifier",
                                "src": "6068:4:1"
                              }
                            ],
                            "id": 755,
                            "name": "FunctionCall",
                            "src": "6060:13:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 736,
                              "type": "uint256",
                              "value": "value"
                            },
                            "id": 756,
                            "name": "Identifier",
                            "src": "6075:5:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 710,
                              "type": "uint256",
                              "value": "deadline"
                            },
                            "id": 757,
                            "name": "Identifier",
                            "src": "6082:8:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 714,
                              "type": "uint8",
                              "value": "v"
                            },
                            "id": 758,
                            "name": "Identifier",
                            "src": "6092:1:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 716,
                              "type": "bytes32",
                              "value": "r"
                            },
                            "id": 759,
                            "name": "Identifier",
                            "src": "6095:1:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 718,
                              "type": "bytes32",
                              "value": "s"
                            },
                            "id": 760,
                            "name": "Identifier",
                            "src": "6098:1:1"
                          }
                        ],
                        "id": 761,
                        "name": "FunctionCall",
                        "src": "6019:81:1"
                      }
                    ],
                    "id": 762,
                    "name": "ExpressionStatement",
                    "src": "6019:81:1"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "tuple()"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "type": "tuple(uint256,uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 722,
                                  "type": "uint256",
                                  "value": "amountA"
                                },
                                "id": 763,
                                "name": "Identifier",
                                "src": "6111:7:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 724,
                                  "type": "uint256",
                                  "value": "amountB"
                                },
                                "id": 764,
                                "name": "Identifier",
                                "src": "6120:7:1"
                              }
                            ],
                            "id": 765,
                            "name": "TupleExpression",
                            "src": "6110:18:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "tuple(uint256,uint256)",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 633,
                                  "type": "function (address,address,uint256,uint256,uint256,address,uint256) returns (uint256,uint256)",
                                  "value": "removeLiquidity"
                                },
                                "id": 766,
                                "name": "Identifier",
                                "src": "6131:15:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 698,
                                  "type": "address",
                                  "value": "tokenA"
                                },
                                "id": 767,
                                "name": "Identifier",
                                "src": "6147:6:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 700,
                                  "type": "address",
                                  "value": "tokenB"
                                },
                                "id": 768,
                                "name": "Identifier",
                                "src": "6155:6:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 702,
                                  "type": "uint256",
                                  "value": "liquidity"
                                },
                                "id": 769,
                                "name": "Identifier",
                                "src": "6163:9:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 704,
                                  "type": "uint256",
                                  "value": "amountAMin"
                                },
                                "id": 770,
                                "name": "Identifier",
                                "src": "6174:10:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 706,
                                  "type": "uint256",
                                  "value": "amountBMin"
                                },
                                "id": 771,
                                "name": "Identifier",
                                "src": "6186:10:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 708,
                                  "type": "address",
                                  "value": "to"
                                },
                                "id": 772,
                                "name": "Identifier",
                                "src": "6198:2:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 710,
                                  "type": "uint256",
                                  "value": "deadline"
                                },
                                "id": 773,
                                "name": "Identifier",
                                "src": "6202:8:1"
                              }
                            ],
                            "id": 774,
                            "name": "FunctionCall",
                            "src": "6131:80:1"
                          }
                        ],
                        "id": 775,
                        "name": "Assignment",
                        "src": "6110:101:1"
                      }
                    ],
                    "id": 776,
                    "name": "ExpressionStatement",
                    "src": "6110:101:1"
                  }
                ],
                "id": 777,
                "name": "Block",
                "src": "5872:346:1"
              }
            ],
            "id": 778,
            "name": "FunctionDefinition",
            "src": "5555:663:1"
          },
          {
            "attributes": {
              "baseFunctions": [
                3919
              ],
              "documentation": null,
              "functionSelector": "ded9382a",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "removeLiquidityETHWithPermit",
              "scope": 1627,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 800,
                "name": "OverrideSpecifier",
                "src": "6478:8:1"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "token",
                      "overrides": null,
                      "scope": 857,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 779,
                        "name": "ElementaryTypeName",
                        "src": "6270:7:1"
                      }
                    ],
                    "id": 780,
                    "name": "VariableDeclaration",
                    "src": "6270:13:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "liquidity",
                      "overrides": null,
                      "scope": 857,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 781,
                        "name": "ElementaryTypeName",
                        "src": "6293:4:1"
                      }
                    ],
                    "id": 782,
                    "name": "VariableDeclaration",
                    "src": "6293:14:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amountTokenMin",
                      "overrides": null,
                      "scope": 857,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 783,
                        "name": "ElementaryTypeName",
                        "src": "6317:4:1"
                      }
                    ],
                    "id": 784,
                    "name": "VariableDeclaration",
                    "src": "6317:19:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amountETHMin",
                      "overrides": null,
                      "scope": 857,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 785,
                        "name": "ElementaryTypeName",
                        "src": "6346:4:1"
                      }
                    ],
                    "id": 786,
                    "name": "VariableDeclaration",
                    "src": "6346:17:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "to",
                      "overrides": null,
                      "scope": 857,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 787,
                        "name": "ElementaryTypeName",
                        "src": "6373:7:1"
                      }
                    ],
                    "id": 788,
                    "name": "VariableDeclaration",
                    "src": "6373:10:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "deadline",
                      "overrides": null,
                      "scope": 857,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 789,
                        "name": "ElementaryTypeName",
                        "src": "6393:4:1"
                      }
                    ],
                    "id": 790,
                    "name": "VariableDeclaration",
                    "src": "6393:13:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "approveMax",
                      "overrides": null,
                      "scope": 857,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 791,
                        "name": "ElementaryTypeName",
                        "src": "6416:4:1"
                      }
                    ],
                    "id": 792,
                    "name": "VariableDeclaration",
                    "src": "6416:15:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "v",
                      "overrides": null,
                      "scope": 857,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint8",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint8",
                          "type": "uint8"
                        },
                        "id": 793,
                        "name": "ElementaryTypeName",
                        "src": "6433:5:1"
                      }
                    ],
                    "id": 794,
                    "name": "VariableDeclaration",
                    "src": "6433:7:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "r",
                      "overrides": null,
                      "scope": 857,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 795,
                        "name": "ElementaryTypeName",
                        "src": "6442:7:1"
                      }
                    ],
                    "id": 796,
                    "name": "VariableDeclaration",
                    "src": "6442:9:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "s",
                      "overrides": null,
                      "scope": 857,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 797,
                        "name": "ElementaryTypeName",
                        "src": "6453:7:1"
                      }
                    ],
                    "id": 798,
                    "name": "VariableDeclaration",
                    "src": "6453:9:1"
                  }
                ],
                "id": 799,
                "name": "ParameterList",
                "src": "6260:208:1"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amountToken",
                      "overrides": null,
                      "scope": 857,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 801,
                        "name": "ElementaryTypeName",
                        "src": "6496:4:1"
                      }
                    ],
                    "id": 802,
                    "name": "VariableDeclaration",
                    "src": "6496:16:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amountETH",
                      "overrides": null,
                      "scope": 857,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 803,
                        "name": "ElementaryTypeName",
                        "src": "6514:4:1"
                      }
                    ],
                    "id": 804,
                    "name": "VariableDeclaration",
                    "src": "6514:14:1"
                  }
                ],
                "id": 805,
                "name": "ParameterList",
                "src": "6495:34:1"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        807
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "pair",
                          "overrides": null,
                          "scope": 856,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "address",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "address",
                              "stateMutability": "nonpayable",
                              "type": "address"
                            },
                            "id": 806,
                            "name": "ElementaryTypeName",
                            "src": "6540:7:1"
                          }
                        ],
                        "id": 807,
                        "name": "VariableDeclaration",
                        "src": "6540:12:1"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "address",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "pairFor",
                              "referencedDeclaration": 4343,
                              "type": "function (address,address,address) pure returns (address)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4719,
                                  "type": "type(library MoonwalkerswapV2Library)",
                                  "value": "MoonwalkerswapV2Library"
                                },
                                "id": 808,
                                "name": "Identifier",
                                "src": "6555:23:1"
                              }
                            ],
                            "id": 809,
                            "name": "MemberAccess",
                            "src": "6555:31:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 182,
                              "type": "address",
                              "value": "factory"
                            },
                            "id": 810,
                            "name": "Identifier",
                            "src": "6587:7:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 780,
                              "type": "address",
                              "value": "token"
                            },
                            "id": 811,
                            "name": "Identifier",
                            "src": "6596:5:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 185,
                              "type": "address",
                              "value": "WETH"
                            },
                            "id": 812,
                            "name": "Identifier",
                            "src": "6603:4:1"
                          }
                        ],
                        "id": 813,
                        "name": "FunctionCall",
                        "src": "6555:53:1"
                      }
                    ],
                    "id": 814,
                    "name": "VariableDeclarationStatement",
                    "src": "6540:68:1"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        816
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "value",
                          "overrides": null,
                          "scope": 856,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint",
                              "type": "uint256"
                            },
                            "id": 815,
                            "name": "ElementaryTypeName",
                            "src": "6618:4:1"
                          }
                        ],
                        "id": 816,
                        "name": "VariableDeclaration",
                        "src": "6618:10:1"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 792,
                              "type": "bool",
                              "value": "approveMax"
                            },
                            "id": 817,
                            "name": "Identifier",
                            "src": "6631:10:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "uint256",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_minus_1_by_1",
                                      "typeString": "int_const -1"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(uint256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "uint",
                                      "type": null
                                    },
                                    "id": 818,
                                    "name": "ElementaryTypeName",
                                    "src": "6644:4:1"
                                  }
                                ],
                                "id": 819,
                                "name": "ElementaryTypeNameExpression",
                                "src": "6644:4:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "operator": "-",
                                  "prefix": true,
                                  "type": "int_const -1"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "31",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 1",
                                      "value": "1"
                                    },
                                    "id": 820,
                                    "name": "Literal",
                                    "src": "6650:1:1"
                                  }
                                ],
                                "id": 821,
                                "name": "UnaryOperation",
                                "src": "6649:2:1"
                              }
                            ],
                            "id": 822,
                            "name": "FunctionCall",
                            "src": "6644:8:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 782,
                              "type": "uint256",
                              "value": "liquidity"
                            },
                            "id": 823,
                            "name": "Identifier",
                            "src": "6655:9:1"
                          }
                        ],
                        "id": 824,
                        "name": "Conditional",
                        "src": "6631:33:1"
                      }
                    ],
                    "id": 825,
                    "name": "VariableDeclarationStatement",
                    "src": "6618:46:1"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                },
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "permit",
                              "referencedDeclaration": 8419,
                              "type": "function (address,address,uint256,uint256,uint8,bytes32,bytes32) external"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "contract IMoonwalkerPair",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 8544,
                                      "type": "type(contract IMoonwalkerPair)",
                                      "value": "IMoonwalkerPair"
                                    },
                                    "id": 826,
                                    "name": "Identifier",
                                    "src": "6674:15:1"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 807,
                                      "type": "address",
                                      "value": "pair"
                                    },
                                    "id": 827,
                                    "name": "Identifier",
                                    "src": "6690:4:1"
                                  }
                                ],
                                "id": 828,
                                "name": "FunctionCall",
                                "src": "6674:21:1"
                              }
                            ],
                            "id": 829,
                            "name": "MemberAccess",
                            "src": "6674:28:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "sender",
                              "referencedDeclaration": null,
                              "type": "address payable"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": -15,
                                  "type": "msg",
                                  "value": "msg"
                                },
                                "id": 830,
                                "name": "Identifier",
                                "src": "6703:3:1"
                              }
                            ],
                            "id": 831,
                            "name": "MemberAccess",
                            "src": "6703:10:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "address payable",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_MoonwalkerswapV2Router01_$1627",
                                      "typeString": "contract MoonwalkerswapV2Router01"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(address)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "address",
                                      "type": null
                                    },
                                    "id": 832,
                                    "name": "ElementaryTypeName",
                                    "src": "6715:7:1"
                                  }
                                ],
                                "id": 833,
                                "name": "ElementaryTypeNameExpression",
                                "src": "6715:7:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": -28,
                                  "type": "contract MoonwalkerswapV2Router01",
                                  "value": "this"
                                },
                                "id": 834,
                                "name": "Identifier",
                                "src": "6723:4:1"
                              }
                            ],
                            "id": 835,
                            "name": "FunctionCall",
                            "src": "6715:13:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 816,
                              "type": "uint256",
                              "value": "value"
                            },
                            "id": 836,
                            "name": "Identifier",
                            "src": "6730:5:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 790,
                              "type": "uint256",
                              "value": "deadline"
                            },
                            "id": 837,
                            "name": "Identifier",
                            "src": "6737:8:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 794,
                              "type": "uint8",
                              "value": "v"
                            },
                            "id": 838,
                            "name": "Identifier",
                            "src": "6747:1:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 796,
                              "type": "bytes32",
                              "value": "r"
                            },
                            "id": 839,
                            "name": "Identifier",
                            "src": "6750:1:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 798,
                              "type": "bytes32",
                              "value": "s"
                            },
                            "id": 840,
                            "name": "Identifier",
                            "src": "6753:1:1"
                          }
                        ],
                        "id": 841,
                        "name": "FunctionCall",
                        "src": "6674:81:1"
                      }
                    ],
                    "id": 842,
                    "name": "ExpressionStatement",
                    "src": "6674:81:1"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "tuple()"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "type": "tuple(uint256,uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 802,
                                  "type": "uint256",
                                  "value": "amountToken"
                                },
                                "id": 843,
                                "name": "Identifier",
                                "src": "6766:11:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 804,
                                  "type": "uint256",
                                  "value": "amountETH"
                                },
                                "id": 844,
                                "name": "Identifier",
                                "src": "6779:9:1"
                              }
                            ],
                            "id": 845,
                            "name": "TupleExpression",
                            "src": "6765:24:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "tuple(uint256,uint256)",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 696,
                                  "type": "function (address,uint256,uint256,uint256,address,uint256) returns (uint256,uint256)",
                                  "value": "removeLiquidityETH"
                                },
                                "id": 846,
                                "name": "Identifier",
                                "src": "6792:18:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 780,
                                  "type": "address",
                                  "value": "token"
                                },
                                "id": 847,
                                "name": "Identifier",
                                "src": "6811:5:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 782,
                                  "type": "uint256",
                                  "value": "liquidity"
                                },
                                "id": 848,
                                "name": "Identifier",
                                "src": "6818:9:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 784,
                                  "type": "uint256",
                                  "value": "amountTokenMin"
                                },
                                "id": 849,
                                "name": "Identifier",
                                "src": "6829:14:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 786,
                                  "type": "uint256",
                                  "value": "amountETHMin"
                                },
                                "id": 850,
                                "name": "Identifier",
                                "src": "6845:12:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 788,
                                  "type": "address",
                                  "value": "to"
                                },
                                "id": 851,
                                "name": "Identifier",
                                "src": "6859:2:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 790,
                                  "type": "uint256",
                                  "value": "deadline"
                                },
                                "id": 852,
                                "name": "Identifier",
                                "src": "6863:8:1"
                              }
                            ],
                            "id": 853,
                            "name": "FunctionCall",
                            "src": "6792:80:1"
                          }
                        ],
                        "id": 854,
                        "name": "Assignment",
                        "src": "6765:107:1"
                      }
                    ],
                    "id": 855,
                    "name": "ExpressionStatement",
                    "src": "6765:107:1"
                  }
                ],
                "id": 856,
                "name": "Block",
                "src": "6530:349:1"
              }
            ],
            "id": 857,
            "name": "FunctionDefinition",
            "src": "6223:656:1"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "_swap",
              "overrides": null,
              "scope": 1627,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "private"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amounts",
                      "overrides": null,
                      "scope": 973,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "uint256[]",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "length": null,
                          "type": "uint256[]"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint",
                              "type": "uint256"
                            },
                            "id": 858,
                            "name": "ElementaryTypeName",
                            "src": "7001:4:1"
                          }
                        ],
                        "id": 859,
                        "name": "ArrayTypeName",
                        "src": "7001:6:1"
                      }
                    ],
                    "id": 860,
                    "name": "VariableDeclaration",
                    "src": "7001:21:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "path",
                      "overrides": null,
                      "scope": 973,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "address[]",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "length": null,
                          "type": "address[]"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "address",
                              "stateMutability": "nonpayable",
                              "type": "address"
                            },
                            "id": 861,
                            "name": "ElementaryTypeName",
                            "src": "7024:7:1"
                          }
                        ],
                        "id": 862,
                        "name": "ArrayTypeName",
                        "src": "7024:9:1"
                      }
                    ],
                    "id": 863,
                    "name": "VariableDeclaration",
                    "src": "7024:21:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "_to",
                      "overrides": null,
                      "scope": 973,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 864,
                        "name": "ElementaryTypeName",
                        "src": "7047:7:1"
                      }
                    ],
                    "id": 865,
                    "name": "VariableDeclaration",
                    "src": "7047:11:1"
                  }
                ],
                "id": 866,
                "name": "ParameterList",
                "src": "7000:59:1"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 867,
                "name": "ParameterList",
                "src": "7068:0:1"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "assignments": [
                            869
                          ],
                          "initialValue": null
                        },
                        "children": [
                          {
                            "attributes": {
                              "constant": false,
                              "mutability": "mutable",
                              "name": "i",
                              "overrides": null,
                              "scope": 971,
                              "stateVariable": false,
                              "storageLocation": "default",
                              "type": "uint256",
                              "value": null,
                              "visibility": "internal"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "name": "uint",
                                  "type": "uint256"
                                },
                                "id": 868,
                                "name": "ElementaryTypeName",
                                "src": "7083:4:1"
                              }
                            ],
                            "id": 869,
                            "name": "VariableDeclaration",
                            "src": "7083:6:1"
                          }
                        ],
                        "id": 870,
                        "name": "VariableDeclarationStatement",
                        "src": "7083:6:1"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "<",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 869,
                              "type": "uint256",
                              "value": "i"
                            },
                            "id": 871,
                            "name": "Identifier",
                            "src": "7091:1:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "-",
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "length",
                                  "referencedDeclaration": null,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 863,
                                      "type": "address[] memory",
                                      "value": "path"
                                    },
                                    "id": 872,
                                    "name": "Identifier",
                                    "src": "7095:4:1"
                                  }
                                ],
                                "id": 873,
                                "name": "MemberAccess",
                                "src": "7095:11:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "31",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 1",
                                  "value": "1"
                                },
                                "id": 874,
                                "name": "Literal",
                                "src": "7109:1:1"
                              }
                            ],
                            "id": 875,
                            "name": "BinaryOperation",
                            "src": "7095:15:1"
                          }
                        ],
                        "id": 876,
                        "name": "BinaryOperation",
                        "src": "7091:19:1"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "++",
                              "prefix": false,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 869,
                                  "type": "uint256",
                                  "value": "i"
                                },
                                "id": 877,
                                "name": "Identifier",
                                "src": "7112:1:1"
                              }
                            ],
                            "id": 878,
                            "name": "UnaryOperation",
                            "src": "7112:3:1"
                          }
                        ],
                        "id": 879,
                        "name": "ExpressionStatement",
                        "src": "7112:3:1"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "assignments": [
                                881,
                                883
                              ]
                            },
                            "children": [
                              {
                                "attributes": {
                                  "constant": false,
                                  "mutability": "mutable",
                                  "name": "input",
                                  "overrides": null,
                                  "scope": 970,
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "type": "address",
                                  "value": null,
                                  "visibility": "internal"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "address",
                                      "stateMutability": "nonpayable",
                                      "type": "address"
                                    },
                                    "id": 880,
                                    "name": "ElementaryTypeName",
                                    "src": "7132:7:1"
                                  }
                                ],
                                "id": 881,
                                "name": "VariableDeclaration",
                                "src": "7132:13:1"
                              },
                              {
                                "attributes": {
                                  "constant": false,
                                  "mutability": "mutable",
                                  "name": "output",
                                  "overrides": null,
                                  "scope": 970,
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "type": "address",
                                  "value": null,
                                  "visibility": "internal"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "address",
                                      "stateMutability": "nonpayable",
                                      "type": "address"
                                    },
                                    "id": 882,
                                    "name": "ElementaryTypeName",
                                    "src": "7147:7:1"
                                  }
                                ],
                                "id": 883,
                                "name": "VariableDeclaration",
                                "src": "7147:14:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "tuple(address,address)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "type": "address"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 863,
                                          "type": "address[] memory",
                                          "value": "path"
                                        },
                                        "id": 884,
                                        "name": "Identifier",
                                        "src": "7166:4:1"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 869,
                                          "type": "uint256",
                                          "value": "i"
                                        },
                                        "id": 885,
                                        "name": "Identifier",
                                        "src": "7171:1:1"
                                      }
                                    ],
                                    "id": 886,
                                    "name": "IndexAccess",
                                    "src": "7166:7:1"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "type": "address"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 863,
                                          "type": "address[] memory",
                                          "value": "path"
                                        },
                                        "id": 887,
                                        "name": "Identifier",
                                        "src": "7175:4:1"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "+",
                                          "type": "uint256"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 869,
                                              "type": "uint256",
                                              "value": "i"
                                            },
                                            "id": 888,
                                            "name": "Identifier",
                                            "src": "7180:1:1"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "hexvalue": "31",
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "subdenomination": null,
                                              "token": "number",
                                              "type": "int_const 1",
                                              "value": "1"
                                            },
                                            "id": 889,
                                            "name": "Literal",
                                            "src": "7184:1:1"
                                          }
                                        ],
                                        "id": 890,
                                        "name": "BinaryOperation",
                                        "src": "7180:5:1"
                                      }
                                    ],
                                    "id": 891,
                                    "name": "IndexAccess",
                                    "src": "7175:11:1"
                                  }
                                ],
                                "id": 892,
                                "name": "TupleExpression",
                                "src": "7165:22:1"
                              }
                            ],
                            "id": 893,
                            "name": "VariableDeclarationStatement",
                            "src": "7131:56:1"
                          },
                          {
                            "attributes": {
                              "assignments": [
                                895,
                                null
                              ]
                            },
                            "children": [
                              {
                                "attributes": {
                                  "constant": false,
                                  "mutability": "mutable",
                                  "name": "token0",
                                  "overrides": null,
                                  "scope": 970,
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "type": "address",
                                  "value": null,
                                  "visibility": "internal"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "address",
                                      "stateMutability": "nonpayable",
                                      "type": "address"
                                    },
                                    "id": 894,
                                    "name": "ElementaryTypeName",
                                    "src": "7202:7:1"
                                  }
                                ],
                                "id": 895,
                                "name": "VariableDeclaration",
                                "src": "7202:14:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "tuple(address,address)",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "sortTokens",
                                      "referencedDeclaration": 4298,
                                      "type": "function (address,address) pure returns (address,address)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4719,
                                          "type": "type(library MoonwalkerswapV2Library)",
                                          "value": "MoonwalkerswapV2Library"
                                        },
                                        "id": 896,
                                        "name": "Identifier",
                                        "src": "7221:23:1"
                                      }
                                    ],
                                    "id": 897,
                                    "name": "MemberAccess",
                                    "src": "7221:34:1"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 881,
                                      "type": "address",
                                      "value": "input"
                                    },
                                    "id": 898,
                                    "name": "Identifier",
                                    "src": "7256:5:1"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 883,
                                      "type": "address",
                                      "value": "output"
                                    },
                                    "id": 899,
                                    "name": "Identifier",
                                    "src": "7263:6:1"
                                  }
                                ],
                                "id": 900,
                                "name": "FunctionCall",
                                "src": "7221:49:1"
                              }
                            ],
                            "id": 901,
                            "name": "VariableDeclarationStatement",
                            "src": "7201:69:1"
                          },
                          {
                            "attributes": {
                              "assignments": [
                                903
                              ]
                            },
                            "children": [
                              {
                                "attributes": {
                                  "constant": false,
                                  "mutability": "mutable",
                                  "name": "amountOut",
                                  "overrides": null,
                                  "scope": 970,
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "type": "uint256",
                                  "value": null,
                                  "visibility": "internal"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "uint",
                                      "type": "uint256"
                                    },
                                    "id": 902,
                                    "name": "ElementaryTypeName",
                                    "src": "7284:4:1"
                                  }
                                ],
                                "id": 903,
                                "name": "VariableDeclaration",
                                "src": "7284:14:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 860,
                                      "type": "uint256[] memory",
                                      "value": "amounts"
                                    },
                                    "id": 904,
                                    "name": "Identifier",
                                    "src": "7301:7:1"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "+",
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 869,
                                          "type": "uint256",
                                          "value": "i"
                                        },
                                        "id": 905,
                                        "name": "Identifier",
                                        "src": "7309:1:1"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "hexvalue": "31",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "subdenomination": null,
                                          "token": "number",
                                          "type": "int_const 1",
                                          "value": "1"
                                        },
                                        "id": 906,
                                        "name": "Literal",
                                        "src": "7313:1:1"
                                      }
                                    ],
                                    "id": 907,
                                    "name": "BinaryOperation",
                                    "src": "7309:5:1"
                                  }
                                ],
                                "id": 908,
                                "name": "IndexAccess",
                                "src": "7301:14:1"
                              }
                            ],
                            "id": 909,
                            "name": "VariableDeclarationStatement",
                            "src": "7284:31:1"
                          },
                          {
                            "attributes": {
                              "assignments": [
                                911,
                                913
                              ]
                            },
                            "children": [
                              {
                                "attributes": {
                                  "constant": false,
                                  "mutability": "mutable",
                                  "name": "amount0Out",
                                  "overrides": null,
                                  "scope": 970,
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "type": "uint256",
                                  "value": null,
                                  "visibility": "internal"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "uint",
                                      "type": "uint256"
                                    },
                                    "id": 910,
                                    "name": "ElementaryTypeName",
                                    "src": "7330:4:1"
                                  }
                                ],
                                "id": 911,
                                "name": "VariableDeclaration",
                                "src": "7330:15:1"
                              },
                              {
                                "attributes": {
                                  "constant": false,
                                  "mutability": "mutable",
                                  "name": "amount1Out",
                                  "overrides": null,
                                  "scope": 970,
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "type": "uint256",
                                  "value": null,
                                  "visibility": "internal"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "uint",
                                      "type": "uint256"
                                    },
                                    "id": 912,
                                    "name": "ElementaryTypeName",
                                    "src": "7347:4:1"
                                  }
                                ],
                                "id": 913,
                                "name": "VariableDeclaration",
                                "src": "7347:15:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "tuple(uint256,uint256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "==",
                                      "type": "bool"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 881,
                                          "type": "address",
                                          "value": "input"
                                        },
                                        "id": 914,
                                        "name": "Identifier",
                                        "src": "7366:5:1"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 895,
                                          "type": "address",
                                          "value": "token0"
                                        },
                                        "id": 915,
                                        "name": "Identifier",
                                        "src": "7375:6:1"
                                      }
                                    ],
                                    "id": 916,
                                    "name": "BinaryOperation",
                                    "src": "7366:15:1"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "type": "tuple(uint256,uint256)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "tryCall": false,
                                          "type": "uint256",
                                          "type_conversion": true
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_rational_0_by_1",
                                                  "typeString": "int_const 0"
                                                }
                                              ],
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "type": "type(uint256)"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "name": "uint",
                                                  "type": null
                                                },
                                                "id": 917,
                                                "name": "ElementaryTypeName",
                                                "src": "7385:4:1"
                                              }
                                            ],
                                            "id": 918,
                                            "name": "ElementaryTypeNameExpression",
                                            "src": "7385:4:1"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "hexvalue": "30",
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "subdenomination": null,
                                              "token": "number",
                                              "type": "int_const 0",
                                              "value": "0"
                                            },
                                            "id": 919,
                                            "name": "Literal",
                                            "src": "7390:1:1"
                                          }
                                        ],
                                        "id": 920,
                                        "name": "FunctionCall",
                                        "src": "7385:7:1"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 903,
                                          "type": "uint256",
                                          "value": "amountOut"
                                        },
                                        "id": 921,
                                        "name": "Identifier",
                                        "src": "7394:9:1"
                                      }
                                    ],
                                    "id": 922,
                                    "name": "TupleExpression",
                                    "src": "7384:20:1"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "type": "tuple(uint256,uint256)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 903,
                                          "type": "uint256",
                                          "value": "amountOut"
                                        },
                                        "id": 923,
                                        "name": "Identifier",
                                        "src": "7408:9:1"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "tryCall": false,
                                          "type": "uint256",
                                          "type_conversion": true
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_rational_0_by_1",
                                                  "typeString": "int_const 0"
                                                }
                                              ],
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "type": "type(uint256)"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "name": "uint",
                                                  "type": null
                                                },
                                                "id": 924,
                                                "name": "ElementaryTypeName",
                                                "src": "7419:4:1"
                                              }
                                            ],
                                            "id": 925,
                                            "name": "ElementaryTypeNameExpression",
                                            "src": "7419:4:1"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "hexvalue": "30",
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "subdenomination": null,
                                              "token": "number",
                                              "type": "int_const 0",
                                              "value": "0"
                                            },
                                            "id": 926,
                                            "name": "Literal",
                                            "src": "7424:1:1"
                                          }
                                        ],
                                        "id": 927,
                                        "name": "FunctionCall",
                                        "src": "7419:7:1"
                                      }
                                    ],
                                    "id": 928,
                                    "name": "TupleExpression",
                                    "src": "7407:20:1"
                                  }
                                ],
                                "id": 929,
                                "name": "Conditional",
                                "src": "7366:61:1"
                              }
                            ],
                            "id": 930,
                            "name": "VariableDeclarationStatement",
                            "src": "7329:98:1"
                          },
                          {
                            "attributes": {
                              "assignments": [
                                932
                              ]
                            },
                            "children": [
                              {
                                "attributes": {
                                  "constant": false,
                                  "mutability": "mutable",
                                  "name": "to",
                                  "overrides": null,
                                  "scope": 970,
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "type": "address",
                                  "value": null,
                                  "visibility": "internal"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "address",
                                      "stateMutability": "nonpayable",
                                      "type": "address"
                                    },
                                    "id": 931,
                                    "name": "ElementaryTypeName",
                                    "src": "7441:7:1"
                                  }
                                ],
                                "id": 932,
                                "name": "VariableDeclaration",
                                "src": "7441:10:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "address"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "<",
                                      "type": "bool"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 869,
                                          "type": "uint256",
                                          "value": "i"
                                        },
                                        "id": 933,
                                        "name": "Identifier",
                                        "src": "7454:1:1"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "-",
                                          "type": "uint256"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "member_name": "length",
                                              "referencedDeclaration": null,
                                              "type": "uint256"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 863,
                                                  "type": "address[] memory",
                                                  "value": "path"
                                                },
                                                "id": 934,
                                                "name": "Identifier",
                                                "src": "7458:4:1"
                                              }
                                            ],
                                            "id": 935,
                                            "name": "MemberAccess",
                                            "src": "7458:11:1"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "hexvalue": "32",
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "subdenomination": null,
                                              "token": "number",
                                              "type": "int_const 2",
                                              "value": "2"
                                            },
                                            "id": 936,
                                            "name": "Literal",
                                            "src": "7472:1:1"
                                          }
                                        ],
                                        "id": 937,
                                        "name": "BinaryOperation",
                                        "src": "7458:15:1"
                                      }
                                    ],
                                    "id": 938,
                                    "name": "BinaryOperation",
                                    "src": "7454:19:1"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "address",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            },
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            },
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "pairFor",
                                          "referencedDeclaration": 4343,
                                          "type": "function (address,address,address) pure returns (address)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 4719,
                                              "type": "type(library MoonwalkerswapV2Library)",
                                              "value": "MoonwalkerswapV2Library"
                                            },
                                            "id": 939,
                                            "name": "Identifier",
                                            "src": "7476:23:1"
                                          }
                                        ],
                                        "id": 940,
                                        "name": "MemberAccess",
                                        "src": "7476:31:1"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 182,
                                          "type": "address",
                                          "value": "factory"
                                        },
                                        "id": 941,
                                        "name": "Identifier",
                                        "src": "7508:7:1"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 883,
                                          "type": "address",
                                          "value": "output"
                                        },
                                        "id": 942,
                                        "name": "Identifier",
                                        "src": "7517:6:1"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "type": "address"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 863,
                                              "type": "address[] memory",
                                              "value": "path"
                                            },
                                            "id": 943,
                                            "name": "Identifier",
                                            "src": "7525:4:1"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              },
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "operator": "+",
                                              "type": "uint256"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 869,
                                                  "type": "uint256",
                                                  "value": "i"
                                                },
                                                "id": 944,
                                                "name": "Identifier",
                                                "src": "7530:1:1"
                                              },
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "hexvalue": "32",
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "lValueRequested": false,
                                                  "subdenomination": null,
                                                  "token": "number",
                                                  "type": "int_const 2",
                                                  "value": "2"
                                                },
                                                "id": 945,
                                                "name": "Literal",
                                                "src": "7534:1:1"
                                              }
                                            ],
                                            "id": 946,
                                            "name": "BinaryOperation",
                                            "src": "7530:5:1"
                                          }
                                        ],
                                        "id": 947,
                                        "name": "IndexAccess",
                                        "src": "7525:11:1"
                                      }
                                    ],
                                    "id": 948,
                                    "name": "FunctionCall",
                                    "src": "7476:61:1"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 865,
                                      "type": "address",
                                      "value": "_to"
                                    },
                                    "id": 949,
                                    "name": "Identifier",
                                    "src": "7540:3:1"
                                  }
                                ],
                                "id": 950,
                                "name": "Conditional",
                                "src": "7454:89:1"
                              }
                            ],
                            "id": 951,
                            "name": "VariableDeclarationStatement",
                            "src": "7441:102:1"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "tuple()",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "swap",
                                      "referencedDeclaration": 8528,
                                      "type": "function (uint256,uint256,address,bytes memory) external"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "tryCall": false,
                                          "type": "contract IMoonwalkerPair",
                                          "type_conversion": true
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_address",
                                                  "typeString": "address"
                                                }
                                              ],
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 8544,
                                              "type": "type(contract IMoonwalkerPair)",
                                              "value": "IMoonwalkerPair"
                                            },
                                            "id": 952,
                                            "name": "Identifier",
                                            "src": "7557:15:1"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "isStructConstructorCall": false,
                                              "lValueRequested": false,
                                              "names": [
                                                null
                                              ],
                                              "tryCall": false,
                                              "type": "address",
                                              "type_conversion": false
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": [
                                                    {
                                                      "typeIdentifier": "t_address",
                                                      "typeString": "address"
                                                    },
                                                    {
                                                      "typeIdentifier": "t_address",
                                                      "typeString": "address"
                                                    },
                                                    {
                                                      "typeIdentifier": "t_address",
                                                      "typeString": "address"
                                                    }
                                                  ],
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "member_name": "pairFor",
                                                  "referencedDeclaration": 4343,
                                                  "type": "function (address,address,address) pure returns (address)"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 4719,
                                                      "type": "type(library MoonwalkerswapV2Library)",
                                                      "value": "MoonwalkerswapV2Library"
                                                    },
                                                    "id": 953,
                                                    "name": "Identifier",
                                                    "src": "7573:23:1"
                                                  }
                                                ],
                                                "id": 954,
                                                "name": "MemberAccess",
                                                "src": "7573:31:1"
                                              },
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 182,
                                                  "type": "address",
                                                  "value": "factory"
                                                },
                                                "id": 955,
                                                "name": "Identifier",
                                                "src": "7605:7:1"
                                              },
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 881,
                                                  "type": "address",
                                                  "value": "input"
                                                },
                                                "id": 956,
                                                "name": "Identifier",
                                                "src": "7614:5:1"
                                              },
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 883,
                                                  "type": "address",
                                                  "value": "output"
                                                },
                                                "id": 957,
                                                "name": "Identifier",
                                                "src": "7621:6:1"
                                              }
                                            ],
                                            "id": 958,
                                            "name": "FunctionCall",
                                            "src": "7573:55:1"
                                          }
                                        ],
                                        "id": 959,
                                        "name": "FunctionCall",
                                        "src": "7557:72:1"
                                      }
                                    ],
                                    "id": 960,
                                    "name": "MemberAccess",
                                    "src": "7557:77:1"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 911,
                                      "type": "uint256",
                                      "value": "amount0Out"
                                    },
                                    "id": 961,
                                    "name": "Identifier",
                                    "src": "7635:10:1"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 913,
                                      "type": "uint256",
                                      "value": "amount1Out"
                                    },
                                    "id": 962,
                                    "name": "Identifier",
                                    "src": "7647:10:1"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 932,
                                      "type": "address",
                                      "value": "to"
                                    },
                                    "id": 963,
                                    "name": "Identifier",
                                    "src": "7659:2:1"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "bytes memory",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_rational_0_by_1",
                                              "typeString": "int_const 0"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "type": "function (uint256) pure returns (bytes memory)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "name": "bytes",
                                              "type": "bytes"
                                            },
                                            "id": 964,
                                            "name": "ElementaryTypeName",
                                            "src": "7667:5:1"
                                          }
                                        ],
                                        "id": 965,
                                        "name": "NewExpression",
                                        "src": "7663:9:1"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "hexvalue": "30",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "subdenomination": null,
                                          "token": "number",
                                          "type": "int_const 0",
                                          "value": "0"
                                        },
                                        "id": 966,
                                        "name": "Literal",
                                        "src": "7673:1:1"
                                      }
                                    ],
                                    "id": 967,
                                    "name": "FunctionCall",
                                    "src": "7663:12:1"
                                  }
                                ],
                                "id": 968,
                                "name": "FunctionCall",
                                "src": "7557:119:1"
                              }
                            ],
                            "id": 969,
                            "name": "ExpressionStatement",
                            "src": "7557:119:1"
                          }
                        ],
                        "id": 970,
                        "name": "Block",
                        "src": "7117:570:1"
                      }
                    ],
                    "id": 971,
                    "name": "ForStatement",
                    "src": "7078:609:1"
                  }
                ],
                "id": 972,
                "name": "Block",
                "src": "7068:625:1"
              }
            ],
            "id": 973,
            "name": "FunctionDefinition",
            "src": "6986:707:1"
          },
          {
            "attributes": {
              "baseFunctions": [
                3936
              ],
              "documentation": null,
              "functionSelector": "38ed1739",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "name": "swapExactTokensForTokens",
              "scope": 1627,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 986,
                "name": "OverrideSpecifier",
                "src": "7873:8:1"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amountIn",
                      "overrides": null,
                      "scope": 1045,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 974,
                        "name": "ElementaryTypeName",
                        "src": "7741:4:1"
                      }
                    ],
                    "id": 975,
                    "name": "VariableDeclaration",
                    "src": "7741:13:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amountOutMin",
                      "overrides": null,
                      "scope": 1045,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 976,
                        "name": "ElementaryTypeName",
                        "src": "7764:4:1"
                      }
                    ],
                    "id": 977,
                    "name": "VariableDeclaration",
                    "src": "7764:17:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "path",
                      "overrides": null,
                      "scope": 1045,
                      "stateVariable": false,
                      "storageLocation": "calldata",
                      "type": "address[]",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "length": null,
                          "type": "address[]"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "address",
                              "stateMutability": "nonpayable",
                              "type": "address"
                            },
                            "id": 978,
                            "name": "ElementaryTypeName",
                            "src": "7791:7:1"
                          }
                        ],
                        "id": 979,
                        "name": "ArrayTypeName",
                        "src": "7791:9:1"
                      }
                    ],
                    "id": 980,
                    "name": "VariableDeclaration",
                    "src": "7791:23:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "to",
                      "overrides": null,
                      "scope": 1045,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 981,
                        "name": "ElementaryTypeName",
                        "src": "7824:7:1"
                      }
                    ],
                    "id": 982,
                    "name": "VariableDeclaration",
                    "src": "7824:10:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "deadline",
                      "overrides": null,
                      "scope": 1045,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 983,
                        "name": "ElementaryTypeName",
                        "src": "7844:4:1"
                      }
                    ],
                    "id": 984,
                    "name": "VariableDeclaration",
                    "src": "7844:13:1"
                  }
                ],
                "id": 985,
                "name": "ParameterList",
                "src": "7731:132:1"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amounts",
                      "overrides": null,
                      "scope": 1045,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "uint256[]",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "length": null,
                          "type": "uint256[]"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint",
                              "type": "uint256"
                            },
                            "id": 990,
                            "name": "ElementaryTypeName",
                            "src": "7908:4:1"
                          }
                        ],
                        "id": 991,
                        "name": "ArrayTypeName",
                        "src": "7908:6:1"
                      }
                    ],
                    "id": 992,
                    "name": "VariableDeclaration",
                    "src": "7908:21:1"
                  }
                ],
                "id": 993,
                "name": "ParameterList",
                "src": "7907:23:1"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 199,
                      "type": "modifier (uint256)",
                      "value": "ensure"
                    },
                    "id": 987,
                    "name": "Identifier",
                    "src": "7882:6:1"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 984,
                      "type": "uint256",
                      "value": "deadline"
                    },
                    "id": 988,
                    "name": "Identifier",
                    "src": "7889:8:1"
                  }
                ],
                "id": 989,
                "name": "ModifierInvocation",
                "src": "7882:16:1"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256[] memory"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 992,
                              "type": "uint256[] memory",
                              "value": "amounts"
                            },
                            "id": 994,
                            "name": "Identifier",
                            "src": "7941:7:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "uint256[] memory",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                      "typeString": "address[] calldata"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "getAmountsOut",
                                  "referencedDeclaration": 4633,
                                  "type": "function (address,uint256,address[] memory) view returns (uint256[] memory)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4719,
                                      "type": "type(library MoonwalkerswapV2Library)",
                                      "value": "MoonwalkerswapV2Library"
                                    },
                                    "id": 995,
                                    "name": "Identifier",
                                    "src": "7951:23:1"
                                  }
                                ],
                                "id": 996,
                                "name": "MemberAccess",
                                "src": "7951:37:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 182,
                                  "type": "address",
                                  "value": "factory"
                                },
                                "id": 997,
                                "name": "Identifier",
                                "src": "7989:7:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 975,
                                  "type": "uint256",
                                  "value": "amountIn"
                                },
                                "id": 998,
                                "name": "Identifier",
                                "src": "7998:8:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 980,
                                  "type": "address[] calldata",
                                  "value": "path"
                                },
                                "id": 999,
                                "name": "Identifier",
                                "src": "8008:4:1"
                              }
                            ],
                            "id": 1000,
                            "name": "FunctionCall",
                            "src": "7951:62:1"
                          }
                        ],
                        "id": 1001,
                        "name": "Assignment",
                        "src": "7941:72:1"
                      }
                    ],
                    "id": 1002,
                    "name": "ExpressionStatement",
                    "src": "7941:72:1"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_731a86f993ae4871030ec3ef0201a3d29bdf48ac3eb60fad6c37632dfa349dd5",
                                  "typeString": "literal_string \"MoonwalkerswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT\""
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 1003,
                            "name": "Identifier",
                            "src": "8023:7:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": ">=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 992,
                                      "type": "uint256[] memory",
                                      "value": "amounts"
                                    },
                                    "id": 1004,
                                    "name": "Identifier",
                                    "src": "8031:7:1"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "-",
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "length",
                                          "referencedDeclaration": null,
                                          "type": "uint256"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 992,
                                              "type": "uint256[] memory",
                                              "value": "amounts"
                                            },
                                            "id": 1005,
                                            "name": "Identifier",
                                            "src": "8039:7:1"
                                          }
                                        ],
                                        "id": 1006,
                                        "name": "MemberAccess",
                                        "src": "8039:14:1"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "hexvalue": "31",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "subdenomination": null,
                                          "token": "number",
                                          "type": "int_const 1",
                                          "value": "1"
                                        },
                                        "id": 1007,
                                        "name": "Literal",
                                        "src": "8056:1:1"
                                      }
                                    ],
                                    "id": 1008,
                                    "name": "BinaryOperation",
                                    "src": "8039:18:1"
                                  }
                                ],
                                "id": 1009,
                                "name": "IndexAccess",
                                "src": "8031:27:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 977,
                                  "type": "uint256",
                                  "value": "amountOutMin"
                                },
                                "id": 1010,
                                "name": "Identifier",
                                "src": "8062:12:1"
                              }
                            ],
                            "id": 1011,
                            "name": "BinaryOperation",
                            "src": "8031:43:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "4d6f6f6e77616c6b6572737761705632526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e54",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"MoonwalkerswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT\"",
                              "value": "MoonwalkerswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT"
                            },
                            "id": 1012,
                            "name": "Literal",
                            "src": "8076:52:1"
                          }
                        ],
                        "id": 1013,
                        "name": "FunctionCall",
                        "src": "8023:106:1"
                      }
                    ],
                    "id": 1014,
                    "name": "ExpressionStatement",
                    "src": "8023:106:1"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "safeTransferFrom",
                              "referencedDeclaration": 8213,
                              "type": "function (address,address,address,uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 8239,
                                  "type": "type(library TransferHelper)",
                                  "value": "TransferHelper"
                                },
                                "id": 1015,
                                "name": "Identifier",
                                "src": "8139:14:1"
                              }
                            ],
                            "id": 1017,
                            "name": "MemberAccess",
                            "src": "8139:31:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "type": "address"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 980,
                                  "type": "address[] calldata",
                                  "value": "path"
                                },
                                "id": 1018,
                                "name": "Identifier",
                                "src": "8171:4:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 1019,
                                "name": "Literal",
                                "src": "8176:1:1"
                              }
                            ],
                            "id": 1020,
                            "name": "IndexAccess",
                            "src": "8171:7:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "sender",
                              "referencedDeclaration": null,
                              "type": "address payable"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": -15,
                                  "type": "msg",
                                  "value": "msg"
                                },
                                "id": 1021,
                                "name": "Identifier",
                                "src": "8180:3:1"
                              }
                            ],
                            "id": 1022,
                            "name": "MemberAccess",
                            "src": "8180:10:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "address",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "pairFor",
                                  "referencedDeclaration": 4343,
                                  "type": "function (address,address,address) pure returns (address)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4719,
                                      "type": "type(library MoonwalkerswapV2Library)",
                                      "value": "MoonwalkerswapV2Library"
                                    },
                                    "id": 1023,
                                    "name": "Identifier",
                                    "src": "8192:23:1"
                                  }
                                ],
                                "id": 1024,
                                "name": "MemberAccess",
                                "src": "8192:31:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 182,
                                  "type": "address",
                                  "value": "factory"
                                },
                                "id": 1025,
                                "name": "Identifier",
                                "src": "8224:7:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "address"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 980,
                                      "type": "address[] calldata",
                                      "value": "path"
                                    },
                                    "id": 1026,
                                    "name": "Identifier",
                                    "src": "8233:4:1"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "30",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 0",
                                      "value": "0"
                                    },
                                    "id": 1027,
                                    "name": "Literal",
                                    "src": "8238:1:1"
                                  }
                                ],
                                "id": 1028,
                                "name": "IndexAccess",
                                "src": "8233:7:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "address"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 980,
                                      "type": "address[] calldata",
                                      "value": "path"
                                    },
                                    "id": 1029,
                                    "name": "Identifier",
                                    "src": "8242:4:1"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "31",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 1",
                                      "value": "1"
                                    },
                                    "id": 1030,
                                    "name": "Literal",
                                    "src": "8247:1:1"
                                  }
                                ],
                                "id": 1031,
                                "name": "IndexAccess",
                                "src": "8242:7:1"
                              }
                            ],
                            "id": 1032,
                            "name": "FunctionCall",
                            "src": "8192:58:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 992,
                                  "type": "uint256[] memory",
                                  "value": "amounts"
                                },
                                "id": 1033,
                                "name": "Identifier",
                                "src": "8252:7:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 1034,
                                "name": "Literal",
                                "src": "8260:1:1"
                              }
                            ],
                            "id": 1035,
                            "name": "IndexAccess",
                            "src": "8252:10:1"
                          }
                        ],
                        "id": 1036,
                        "name": "FunctionCall",
                        "src": "8139:124:1"
                      }
                    ],
                    "id": 1037,
                    "name": "ExpressionStatement",
                    "src": "8139:124:1"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                  "typeString": "uint256[] memory"
                                },
                                {
                                  "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                  "typeString": "address[] calldata"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 973,
                              "type": "function (uint256[] memory,address[] memory,address)",
                              "value": "_swap"
                            },
                            "id": 1038,
                            "name": "Identifier",
                            "src": "8273:5:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 992,
                              "type": "uint256[] memory",
                              "value": "amounts"
                            },
                            "id": 1039,
                            "name": "Identifier",
                            "src": "8279:7:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 980,
                              "type": "address[] calldata",
                              "value": "path"
                            },
                            "id": 1040,
                            "name": "Identifier",
                            "src": "8288:4:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 982,
                              "type": "address",
                              "value": "to"
                            },
                            "id": 1041,
                            "name": "Identifier",
                            "src": "8294:2:1"
                          }
                        ],
                        "id": 1042,
                        "name": "FunctionCall",
                        "src": "8273:24:1"
                      }
                    ],
                    "id": 1043,
                    "name": "ExpressionStatement",
                    "src": "8273:24:1"
                  }
                ],
                "id": 1044,
                "name": "Block",
                "src": "7931:373:1"
              }
            ],
            "id": 1045,
            "name": "FunctionDefinition",
            "src": "7698:606:1"
          },
          {
            "attributes": {
              "baseFunctions": [
                3953
              ],
              "documentation": null,
              "functionSelector": "8803dbee",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "name": "swapTokensForExactTokens",
              "scope": 1627,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 1058,
                "name": "OverrideSpecifier",
                "src": "8484:8:1"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amountOut",
                      "overrides": null,
                      "scope": 1114,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 1046,
                        "name": "ElementaryTypeName",
                        "src": "8352:4:1"
                      }
                    ],
                    "id": 1047,
                    "name": "VariableDeclaration",
                    "src": "8352:14:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amountInMax",
                      "overrides": null,
                      "scope": 1114,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 1048,
                        "name": "ElementaryTypeName",
                        "src": "8376:4:1"
                      }
                    ],
                    "id": 1049,
                    "name": "VariableDeclaration",
                    "src": "8376:16:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "path",
                      "overrides": null,
                      "scope": 1114,
                      "stateVariable": false,
                      "storageLocation": "calldata",
                      "type": "address[]",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "length": null,
                          "type": "address[]"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "address",
                              "stateMutability": "nonpayable",
                              "type": "address"
                            },
                            "id": 1050,
                            "name": "ElementaryTypeName",
                            "src": "8402:7:1"
                          }
                        ],
                        "id": 1051,
                        "name": "ArrayTypeName",
                        "src": "8402:9:1"
                      }
                    ],
                    "id": 1052,
                    "name": "VariableDeclaration",
                    "src": "8402:23:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "to",
                      "overrides": null,
                      "scope": 1114,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 1053,
                        "name": "ElementaryTypeName",
                        "src": "8435:7:1"
                      }
                    ],
                    "id": 1054,
                    "name": "VariableDeclaration",
                    "src": "8435:10:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "deadline",
                      "overrides": null,
                      "scope": 1114,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 1055,
                        "name": "ElementaryTypeName",
                        "src": "8455:4:1"
                      }
                    ],
                    "id": 1056,
                    "name": "VariableDeclaration",
                    "src": "8455:13:1"
                  }
                ],
                "id": 1057,
                "name": "ParameterList",
                "src": "8342:132:1"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amounts",
                      "overrides": null,
                      "scope": 1114,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "uint256[]",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "length": null,
                          "type": "uint256[]"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint",
                              "type": "uint256"
                            },
                            "id": 1062,
                            "name": "ElementaryTypeName",
                            "src": "8519:4:1"
                          }
                        ],
                        "id": 1063,
                        "name": "ArrayTypeName",
                        "src": "8519:6:1"
                      }
                    ],
                    "id": 1064,
                    "name": "VariableDeclaration",
                    "src": "8519:21:1"
                  }
                ],
                "id": 1065,
                "name": "ParameterList",
                "src": "8518:23:1"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 199,
                      "type": "modifier (uint256)",
                      "value": "ensure"
                    },
                    "id": 1059,
                    "name": "Identifier",
                    "src": "8493:6:1"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 1056,
                      "type": "uint256",
                      "value": "deadline"
                    },
                    "id": 1060,
                    "name": "Identifier",
                    "src": "8500:8:1"
                  }
                ],
                "id": 1061,
                "name": "ModifierInvocation",
                "src": "8493:16:1"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256[] memory"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1064,
                              "type": "uint256[] memory",
                              "value": "amounts"
                            },
                            "id": 1066,
                            "name": "Identifier",
                            "src": "8552:7:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "uint256[] memory",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                      "typeString": "address[] calldata"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "getAmountsIn",
                                  "referencedDeclaration": 4718,
                                  "type": "function (address,uint256,address[] memory) view returns (uint256[] memory)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4719,
                                      "type": "type(library MoonwalkerswapV2Library)",
                                      "value": "MoonwalkerswapV2Library"
                                    },
                                    "id": 1067,
                                    "name": "Identifier",
                                    "src": "8562:23:1"
                                  }
                                ],
                                "id": 1068,
                                "name": "MemberAccess",
                                "src": "8562:36:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 182,
                                  "type": "address",
                                  "value": "factory"
                                },
                                "id": 1069,
                                "name": "Identifier",
                                "src": "8599:7:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1047,
                                  "type": "uint256",
                                  "value": "amountOut"
                                },
                                "id": 1070,
                                "name": "Identifier",
                                "src": "8608:9:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1052,
                                  "type": "address[] calldata",
                                  "value": "path"
                                },
                                "id": 1071,
                                "name": "Identifier",
                                "src": "8619:4:1"
                              }
                            ],
                            "id": 1072,
                            "name": "FunctionCall",
                            "src": "8562:62:1"
                          }
                        ],
                        "id": 1073,
                        "name": "Assignment",
                        "src": "8552:72:1"
                      }
                    ],
                    "id": 1074,
                    "name": "ExpressionStatement",
                    "src": "8552:72:1"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_28764956f6436edee07992f748e71fb23001e9f660ab59ca28fb88f321f33b9d",
                                  "typeString": "literal_string \"MoonwalkerswapV2Router: EXCESSIVE_INPUT_AMOUNT\""
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 1075,
                            "name": "Identifier",
                            "src": "8634:7:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "<=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1064,
                                      "type": "uint256[] memory",
                                      "value": "amounts"
                                    },
                                    "id": 1076,
                                    "name": "Identifier",
                                    "src": "8642:7:1"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "30",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 0",
                                      "value": "0"
                                    },
                                    "id": 1077,
                                    "name": "Literal",
                                    "src": "8650:1:1"
                                  }
                                ],
                                "id": 1078,
                                "name": "IndexAccess",
                                "src": "8642:10:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1049,
                                  "type": "uint256",
                                  "value": "amountInMax"
                                },
                                "id": 1079,
                                "name": "Identifier",
                                "src": "8656:11:1"
                              }
                            ],
                            "id": 1080,
                            "name": "BinaryOperation",
                            "src": "8642:25:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "4d6f6f6e77616c6b6572737761705632526f757465723a204558434553534956455f494e5055545f414d4f554e54",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"MoonwalkerswapV2Router: EXCESSIVE_INPUT_AMOUNT\"",
                              "value": "MoonwalkerswapV2Router: EXCESSIVE_INPUT_AMOUNT"
                            },
                            "id": 1081,
                            "name": "Literal",
                            "src": "8669:48:1"
                          }
                        ],
                        "id": 1082,
                        "name": "FunctionCall",
                        "src": "8634:84:1"
                      }
                    ],
                    "id": 1083,
                    "name": "ExpressionStatement",
                    "src": "8634:84:1"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "safeTransferFrom",
                              "referencedDeclaration": 8213,
                              "type": "function (address,address,address,uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 8239,
                                  "type": "type(library TransferHelper)",
                                  "value": "TransferHelper"
                                },
                                "id": 1084,
                                "name": "Identifier",
                                "src": "8728:14:1"
                              }
                            ],
                            "id": 1086,
                            "name": "MemberAccess",
                            "src": "8728:31:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "type": "address"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1052,
                                  "type": "address[] calldata",
                                  "value": "path"
                                },
                                "id": 1087,
                                "name": "Identifier",
                                "src": "8760:4:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 1088,
                                "name": "Literal",
                                "src": "8765:1:1"
                              }
                            ],
                            "id": 1089,
                            "name": "IndexAccess",
                            "src": "8760:7:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "sender",
                              "referencedDeclaration": null,
                              "type": "address payable"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": -15,
                                  "type": "msg",
                                  "value": "msg"
                                },
                                "id": 1090,
                                "name": "Identifier",
                                "src": "8769:3:1"
                              }
                            ],
                            "id": 1091,
                            "name": "MemberAccess",
                            "src": "8769:10:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "address",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "pairFor",
                                  "referencedDeclaration": 4343,
                                  "type": "function (address,address,address) pure returns (address)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4719,
                                      "type": "type(library MoonwalkerswapV2Library)",
                                      "value": "MoonwalkerswapV2Library"
                                    },
                                    "id": 1092,
                                    "name": "Identifier",
                                    "src": "8781:23:1"
                                  }
                                ],
                                "id": 1093,
                                "name": "MemberAccess",
                                "src": "8781:31:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 182,
                                  "type": "address",
                                  "value": "factory"
                                },
                                "id": 1094,
                                "name": "Identifier",
                                "src": "8813:7:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "address"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1052,
                                      "type": "address[] calldata",
                                      "value": "path"
                                    },
                                    "id": 1095,
                                    "name": "Identifier",
                                    "src": "8822:4:1"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "30",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 0",
                                      "value": "0"
                                    },
                                    "id": 1096,
                                    "name": "Literal",
                                    "src": "8827:1:1"
                                  }
                                ],
                                "id": 1097,
                                "name": "IndexAccess",
                                "src": "8822:7:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "address"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1052,
                                      "type": "address[] calldata",
                                      "value": "path"
                                    },
                                    "id": 1098,
                                    "name": "Identifier",
                                    "src": "8831:4:1"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "31",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 1",
                                      "value": "1"
                                    },
                                    "id": 1099,
                                    "name": "Literal",
                                    "src": "8836:1:1"
                                  }
                                ],
                                "id": 1100,
                                "name": "IndexAccess",
                                "src": "8831:7:1"
                              }
                            ],
                            "id": 1101,
                            "name": "FunctionCall",
                            "src": "8781:58:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1064,
                                  "type": "uint256[] memory",
                                  "value": "amounts"
                                },
                                "id": 1102,
                                "name": "Identifier",
                                "src": "8841:7:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 1103,
                                "name": "Literal",
                                "src": "8849:1:1"
                              }
                            ],
                            "id": 1104,
                            "name": "IndexAccess",
                            "src": "8841:10:1"
                          }
                        ],
                        "id": 1105,
                        "name": "FunctionCall",
                        "src": "8728:124:1"
                      }
                    ],
                    "id": 1106,
                    "name": "ExpressionStatement",
                    "src": "8728:124:1"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                  "typeString": "uint256[] memory"
                                },
                                {
                                  "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                  "typeString": "address[] calldata"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 973,
                              "type": "function (uint256[] memory,address[] memory,address)",
                              "value": "_swap"
                            },
                            "id": 1107,
                            "name": "Identifier",
                            "src": "8862:5:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1064,
                              "type": "uint256[] memory",
                              "value": "amounts"
                            },
                            "id": 1108,
                            "name": "Identifier",
                            "src": "8868:7:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1052,
                              "type": "address[] calldata",
                              "value": "path"
                            },
                            "id": 1109,
                            "name": "Identifier",
                            "src": "8877:4:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1054,
                              "type": "address",
                              "value": "to"
                            },
                            "id": 1110,
                            "name": "Identifier",
                            "src": "8883:2:1"
                          }
                        ],
                        "id": 1111,
                        "name": "FunctionCall",
                        "src": "8862:24:1"
                      }
                    ],
                    "id": 1112,
                    "name": "ExpressionStatement",
                    "src": "8862:24:1"
                  }
                ],
                "id": 1113,
                "name": "Block",
                "src": "8542:351:1"
              }
            ],
            "id": 1114,
            "name": "FunctionDefinition",
            "src": "8309:584:1"
          },
          {
            "attributes": {
              "baseFunctions": [
                3968
              ],
              "documentation": null,
              "functionSelector": "7ff36ab5",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "name": "swapExactETHForTokens",
              "scope": 1627,
              "stateMutability": "payable",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 1125,
                "name": "OverrideSpecifier",
                "src": "9025:8:1"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amountOutMin",
                      "overrides": null,
                      "scope": 1202,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 1115,
                        "name": "ElementaryTypeName",
                        "src": "8929:4:1"
                      }
                    ],
                    "id": 1116,
                    "name": "VariableDeclaration",
                    "src": "8929:17:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "path",
                      "overrides": null,
                      "scope": 1202,
                      "stateVariable": false,
                      "storageLocation": "calldata",
                      "type": "address[]",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "length": null,
                          "type": "address[]"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "address",
                              "stateMutability": "nonpayable",
                              "type": "address"
                            },
                            "id": 1117,
                            "name": "ElementaryTypeName",
                            "src": "8948:7:1"
                          }
                        ],
                        "id": 1118,
                        "name": "ArrayTypeName",
                        "src": "8948:9:1"
                      }
                    ],
                    "id": 1119,
                    "name": "VariableDeclaration",
                    "src": "8948:23:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "to",
                      "overrides": null,
                      "scope": 1202,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 1120,
                        "name": "ElementaryTypeName",
                        "src": "8973:7:1"
                      }
                    ],
                    "id": 1121,
                    "name": "VariableDeclaration",
                    "src": "8973:10:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "deadline",
                      "overrides": null,
                      "scope": 1202,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 1122,
                        "name": "ElementaryTypeName",
                        "src": "8985:4:1"
                      }
                    ],
                    "id": 1123,
                    "name": "VariableDeclaration",
                    "src": "8985:13:1"
                  }
                ],
                "id": 1124,
                "name": "ParameterList",
                "src": "8928:71:1"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amounts",
                      "overrides": null,
                      "scope": 1202,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "uint256[]",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "length": null,
                          "type": "uint256[]"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint",
                              "type": "uint256"
                            },
                            "id": 1129,
                            "name": "ElementaryTypeName",
                            "src": "9092:4:1"
                          }
                        ],
                        "id": 1130,
                        "name": "ArrayTypeName",
                        "src": "9092:6:1"
                      }
                    ],
                    "id": 1131,
                    "name": "VariableDeclaration",
                    "src": "9092:21:1"
                  }
                ],
                "id": 1132,
                "name": "ParameterList",
                "src": "9091:23:1"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 199,
                      "type": "modifier (uint256)",
                      "value": "ensure"
                    },
                    "id": 1126,
                    "name": "Identifier",
                    "src": "9058:6:1"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 1123,
                      "type": "uint256",
                      "value": "deadline"
                    },
                    "id": 1127,
                    "name": "Identifier",
                    "src": "9065:8:1"
                  }
                ],
                "id": 1128,
                "name": "ModifierInvocation",
                "src": "9058:16:1"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_aaa6fa1c87be4547172c5ac8f95f6d29b3dcd844533e4cd43e007d6da104aefe",
                                  "typeString": "literal_string \"MoonwalkerswapV2Router: INVALID_PATH\""
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 1133,
                            "name": "Identifier",
                            "src": "9129:7:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "address"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1119,
                                      "type": "address[] calldata",
                                      "value": "path"
                                    },
                                    "id": 1134,
                                    "name": "Identifier",
                                    "src": "9137:4:1"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "30",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 0",
                                      "value": "0"
                                    },
                                    "id": 1135,
                                    "name": "Literal",
                                    "src": "9142:1:1"
                                  }
                                ],
                                "id": 1136,
                                "name": "IndexAccess",
                                "src": "9137:7:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 185,
                                  "type": "address",
                                  "value": "WETH"
                                },
                                "id": 1137,
                                "name": "Identifier",
                                "src": "9148:4:1"
                              }
                            ],
                            "id": 1138,
                            "name": "BinaryOperation",
                            "src": "9137:15:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "4d6f6f6e77616c6b6572737761705632526f757465723a20494e56414c49445f50415448",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"MoonwalkerswapV2Router: INVALID_PATH\"",
                              "value": "MoonwalkerswapV2Router: INVALID_PATH"
                            },
                            "id": 1139,
                            "name": "Literal",
                            "src": "9154:38:1"
                          }
                        ],
                        "id": 1140,
                        "name": "FunctionCall",
                        "src": "9129:64:1"
                      }
                    ],
                    "id": 1141,
                    "name": "ExpressionStatement",
                    "src": "9129:64:1"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256[] memory"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1131,
                              "type": "uint256[] memory",
                              "value": "amounts"
                            },
                            "id": 1142,
                            "name": "Identifier",
                            "src": "9203:7:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "uint256[] memory",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                      "typeString": "address[] calldata"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "getAmountsOut",
                                  "referencedDeclaration": 4633,
                                  "type": "function (address,uint256,address[] memory) view returns (uint256[] memory)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4719,
                                      "type": "type(library MoonwalkerswapV2Library)",
                                      "value": "MoonwalkerswapV2Library"
                                    },
                                    "id": 1143,
                                    "name": "Identifier",
                                    "src": "9213:23:1"
                                  }
                                ],
                                "id": 1144,
                                "name": "MemberAccess",
                                "src": "9213:37:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 182,
                                  "type": "address",
                                  "value": "factory"
                                },
                                "id": 1145,
                                "name": "Identifier",
                                "src": "9251:7:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "value",
                                  "referencedDeclaration": null,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": -15,
                                      "type": "msg",
                                      "value": "msg"
                                    },
                                    "id": 1146,
                                    "name": "Identifier",
                                    "src": "9260:3:1"
                                  }
                                ],
                                "id": 1147,
                                "name": "MemberAccess",
                                "src": "9260:9:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1119,
                                  "type": "address[] calldata",
                                  "value": "path"
                                },
                                "id": 1148,
                                "name": "Identifier",
                                "src": "9271:4:1"
                              }
                            ],
                            "id": 1149,
                            "name": "FunctionCall",
                            "src": "9213:63:1"
                          }
                        ],
                        "id": 1150,
                        "name": "Assignment",
                        "src": "9203:73:1"
                      }
                    ],
                    "id": 1151,
                    "name": "ExpressionStatement",
                    "src": "9203:73:1"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_731a86f993ae4871030ec3ef0201a3d29bdf48ac3eb60fad6c37632dfa349dd5",
                                  "typeString": "literal_string \"MoonwalkerswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT\""
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 1152,
                            "name": "Identifier",
                            "src": "9286:7:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": ">=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1131,
                                      "type": "uint256[] memory",
                                      "value": "amounts"
                                    },
                                    "id": 1153,
                                    "name": "Identifier",
                                    "src": "9294:7:1"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "-",
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "length",
                                          "referencedDeclaration": null,
                                          "type": "uint256"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 1131,
                                              "type": "uint256[] memory",
                                              "value": "amounts"
                                            },
                                            "id": 1154,
                                            "name": "Identifier",
                                            "src": "9302:7:1"
                                          }
                                        ],
                                        "id": 1155,
                                        "name": "MemberAccess",
                                        "src": "9302:14:1"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "hexvalue": "31",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "subdenomination": null,
                                          "token": "number",
                                          "type": "int_const 1",
                                          "value": "1"
                                        },
                                        "id": 1156,
                                        "name": "Literal",
                                        "src": "9319:1:1"
                                      }
                                    ],
                                    "id": 1157,
                                    "name": "BinaryOperation",
                                    "src": "9302:18:1"
                                  }
                                ],
                                "id": 1158,
                                "name": "IndexAccess",
                                "src": "9294:27:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1116,
                                  "type": "uint256",
                                  "value": "amountOutMin"
                                },
                                "id": 1159,
                                "name": "Identifier",
                                "src": "9325:12:1"
                              }
                            ],
                            "id": 1160,
                            "name": "BinaryOperation",
                            "src": "9294:43:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "4d6f6f6e77616c6b6572737761705632526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e54",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"MoonwalkerswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT\"",
                              "value": "MoonwalkerswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT"
                            },
                            "id": 1161,
                            "name": "Literal",
                            "src": "9339:52:1"
                          }
                        ],
                        "id": 1162,
                        "name": "FunctionCall",
                        "src": "9286:106:1"
                      }
                    ],
                    "id": 1163,
                    "name": "ExpressionStatement",
                    "src": "9286:106:1"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "names": [
                                "value"
                              ],
                              "type": "function () payable external"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "deposit",
                                  "referencedDeclaration": 4166,
                                  "type": "function () payable external"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "contract IWETH",
                                      "type_conversion": true
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          ],
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4181,
                                          "type": "type(contract IWETH)",
                                          "value": "IWETH"
                                        },
                                        "id": 1164,
                                        "name": "Identifier",
                                        "src": "9402:5:1"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 185,
                                          "type": "address",
                                          "value": "WETH"
                                        },
                                        "id": 1165,
                                        "name": "Identifier",
                                        "src": "9408:4:1"
                                      }
                                    ],
                                    "id": 1166,
                                    "name": "FunctionCall",
                                    "src": "9402:11:1"
                                  }
                                ],
                                "id": 1167,
                                "name": "MemberAccess",
                                "src": "9402:19:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1131,
                                      "type": "uint256[] memory",
                                      "value": "amounts"
                                    },
                                    "id": 1168,
                                    "name": "Identifier",
                                    "src": "9429:7:1"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "30",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 0",
                                      "value": "0"
                                    },
                                    "id": 1169,
                                    "name": "Literal",
                                    "src": "9437:1:1"
                                  }
                                ],
                                "id": 1170,
                                "name": "IndexAccess",
                                "src": "9429:10:1"
                              }
                            ],
                            "id": 1171,
                            "name": "FunctionCallOptions",
                            "src": "9402:38:1"
                          }
                        ],
                        "id": 1172,
                        "name": "FunctionCall",
                        "src": "9402:40:1"
                      }
                    ],
                    "id": 1173,
                    "name": "ExpressionStatement",
                    "src": "9402:40:1"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": -3,
                              "type": "function (bool) pure",
                              "value": "assert"
                            },
                            "id": 1174,
                            "name": "Identifier",
                            "src": "9452:6:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "bool",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "transfer",
                                  "referencedDeclaration": 4175,
                                  "type": "function (address,uint256) external returns (bool)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "contract IWETH",
                                      "type_conversion": true
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          ],
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4181,
                                          "type": "type(contract IWETH)",
                                          "value": "IWETH"
                                        },
                                        "id": 1175,
                                        "name": "Identifier",
                                        "src": "9459:5:1"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 185,
                                          "type": "address",
                                          "value": "WETH"
                                        },
                                        "id": 1176,
                                        "name": "Identifier",
                                        "src": "9465:4:1"
                                      }
                                    ],
                                    "id": 1177,
                                    "name": "FunctionCall",
                                    "src": "9459:11:1"
                                  }
                                ],
                                "id": 1178,
                                "name": "MemberAccess",
                                "src": "9459:20:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "address",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "pairFor",
                                      "referencedDeclaration": 4343,
                                      "type": "function (address,address,address) pure returns (address)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4719,
                                          "type": "type(library MoonwalkerswapV2Library)",
                                          "value": "MoonwalkerswapV2Library"
                                        },
                                        "id": 1179,
                                        "name": "Identifier",
                                        "src": "9480:23:1"
                                      }
                                    ],
                                    "id": 1180,
                                    "name": "MemberAccess",
                                    "src": "9480:31:1"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 182,
                                      "type": "address",
                                      "value": "factory"
                                    },
                                    "id": 1181,
                                    "name": "Identifier",
                                    "src": "9512:7:1"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "type": "address"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 1119,
                                          "type": "address[] calldata",
                                          "value": "path"
                                        },
                                        "id": 1182,
                                        "name": "Identifier",
                                        "src": "9521:4:1"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "hexvalue": "30",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "subdenomination": null,
                                          "token": "number",
                                          "type": "int_const 0",
                                          "value": "0"
                                        },
                                        "id": 1183,
                                        "name": "Literal",
                                        "src": "9526:1:1"
                                      }
                                    ],
                                    "id": 1184,
                                    "name": "IndexAccess",
                                    "src": "9521:7:1"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "type": "address"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 1119,
                                          "type": "address[] calldata",
                                          "value": "path"
                                        },
                                        "id": 1185,
                                        "name": "Identifier",
                                        "src": "9530:4:1"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "hexvalue": "31",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "subdenomination": null,
                                          "token": "number",
                                          "type": "int_const 1",
                                          "value": "1"
                                        },
                                        "id": 1186,
                                        "name": "Literal",
                                        "src": "9535:1:1"
                                      }
                                    ],
                                    "id": 1187,
                                    "name": "IndexAccess",
                                    "src": "9530:7:1"
                                  }
                                ],
                                "id": 1188,
                                "name": "FunctionCall",
                                "src": "9480:58:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1131,
                                      "type": "uint256[] memory",
                                      "value": "amounts"
                                    },
                                    "id": 1189,
                                    "name": "Identifier",
                                    "src": "9540:7:1"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "30",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 0",
                                      "value": "0"
                                    },
                                    "id": 1190,
                                    "name": "Literal",
                                    "src": "9548:1:1"
                                  }
                                ],
                                "id": 1191,
                                "name": "IndexAccess",
                                "src": "9540:10:1"
                              }
                            ],
                            "id": 1192,
                            "name": "FunctionCall",
                            "src": "9459:92:1"
                          }
                        ],
                        "id": 1193,
                        "name": "FunctionCall",
                        "src": "9452:100:1"
                      }
                    ],
                    "id": 1194,
                    "name": "ExpressionStatement",
                    "src": "9452:100:1"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                  "typeString": "uint256[] memory"
                                },
                                {
                                  "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                  "typeString": "address[] calldata"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 973,
                              "type": "function (uint256[] memory,address[] memory,address)",
                              "value": "_swap"
                            },
                            "id": 1195,
                            "name": "Identifier",
                            "src": "9562:5:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1131,
                              "type": "uint256[] memory",
                              "value": "amounts"
                            },
                            "id": 1196,
                            "name": "Identifier",
                            "src": "9568:7:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1119,
                              "type": "address[] calldata",
                              "value": "path"
                            },
                            "id": 1197,
                            "name": "Identifier",
                            "src": "9577:4:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1121,
                              "type": "address",
                              "value": "to"
                            },
                            "id": 1198,
                            "name": "Identifier",
                            "src": "9583:2:1"
                          }
                        ],
                        "id": 1199,
                        "name": "FunctionCall",
                        "src": "9562:24:1"
                      }
                    ],
                    "id": 1200,
                    "name": "ExpressionStatement",
                    "src": "9562:24:1"
                  }
                ],
                "id": 1201,
                "name": "Block",
                "src": "9119:474:1"
              }
            ],
            "id": 1202,
            "name": "FunctionDefinition",
            "src": "8898:695:1"
          },
          {
            "attributes": {
              "baseFunctions": [
                3985
              ],
              "documentation": null,
              "functionSelector": "4a25d94a",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "name": "swapTokensForExactETH",
              "scope": 1627,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 1215,
                "name": "OverrideSpecifier",
                "src": "9740:8:1"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amountOut",
                      "overrides": null,
                      "scope": 1310,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 1203,
                        "name": "ElementaryTypeName",
                        "src": "9629:4:1"
                      }
                    ],
                    "id": 1204,
                    "name": "VariableDeclaration",
                    "src": "9629:14:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amountInMax",
                      "overrides": null,
                      "scope": 1310,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 1205,
                        "name": "ElementaryTypeName",
                        "src": "9645:4:1"
                      }
                    ],
                    "id": 1206,
                    "name": "VariableDeclaration",
                    "src": "9645:16:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "path",
                      "overrides": null,
                      "scope": 1310,
                      "stateVariable": false,
                      "storageLocation": "calldata",
                      "type": "address[]",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "length": null,
                          "type": "address[]"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "address",
                              "stateMutability": "nonpayable",
                              "type": "address"
                            },
                            "id": 1207,
                            "name": "ElementaryTypeName",
                            "src": "9663:7:1"
                          }
                        ],
                        "id": 1208,
                        "name": "ArrayTypeName",
                        "src": "9663:9:1"
                      }
                    ],
                    "id": 1209,
                    "name": "VariableDeclaration",
                    "src": "9663:23:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "to",
                      "overrides": null,
                      "scope": 1310,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 1210,
                        "name": "ElementaryTypeName",
                        "src": "9688:7:1"
                      }
                    ],
                    "id": 1211,
                    "name": "VariableDeclaration",
                    "src": "9688:10:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "deadline",
                      "overrides": null,
                      "scope": 1310,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 1212,
                        "name": "ElementaryTypeName",
                        "src": "9700:4:1"
                      }
                    ],
                    "id": 1213,
                    "name": "VariableDeclaration",
                    "src": "9700:13:1"
                  }
                ],
                "id": 1214,
                "name": "ParameterList",
                "src": "9628:86:1"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amounts",
                      "overrides": null,
                      "scope": 1310,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "uint256[]",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "length": null,
                          "type": "uint256[]"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint",
                              "type": "uint256"
                            },
                            "id": 1219,
                            "name": "ElementaryTypeName",
                            "src": "9791:4:1"
                          }
                        ],
                        "id": 1220,
                        "name": "ArrayTypeName",
                        "src": "9791:6:1"
                      }
                    ],
                    "id": 1221,
                    "name": "VariableDeclaration",
                    "src": "9791:21:1"
                  }
                ],
                "id": 1222,
                "name": "ParameterList",
                "src": "9790:23:1"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 199,
                      "type": "modifier (uint256)",
                      "value": "ensure"
                    },
                    "id": 1216,
                    "name": "Identifier",
                    "src": "9757:6:1"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 1213,
                      "type": "uint256",
                      "value": "deadline"
                    },
                    "id": 1217,
                    "name": "Identifier",
                    "src": "9764:8:1"
                  }
                ],
                "id": 1218,
                "name": "ModifierInvocation",
                "src": "9757:16:1"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_aaa6fa1c87be4547172c5ac8f95f6d29b3dcd844533e4cd43e007d6da104aefe",
                                  "typeString": "literal_string \"MoonwalkerswapV2Router: INVALID_PATH\""
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 1223,
                            "name": "Identifier",
                            "src": "9828:7:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "address"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1209,
                                      "type": "address[] calldata",
                                      "value": "path"
                                    },
                                    "id": 1224,
                                    "name": "Identifier",
                                    "src": "9836:4:1"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "-",
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "length",
                                          "referencedDeclaration": null,
                                          "type": "uint256"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 1209,
                                              "type": "address[] calldata",
                                              "value": "path"
                                            },
                                            "id": 1225,
                                            "name": "Identifier",
                                            "src": "9841:4:1"
                                          }
                                        ],
                                        "id": 1226,
                                        "name": "MemberAccess",
                                        "src": "9841:11:1"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "hexvalue": "31",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "subdenomination": null,
                                          "token": "number",
                                          "type": "int_const 1",
                                          "value": "1"
                                        },
                                        "id": 1227,
                                        "name": "Literal",
                                        "src": "9855:1:1"
                                      }
                                    ],
                                    "id": 1228,
                                    "name": "BinaryOperation",
                                    "src": "9841:15:1"
                                  }
                                ],
                                "id": 1229,
                                "name": "IndexAccess",
                                "src": "9836:21:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 185,
                                  "type": "address",
                                  "value": "WETH"
                                },
                                "id": 1230,
                                "name": "Identifier",
                                "src": "9861:4:1"
                              }
                            ],
                            "id": 1231,
                            "name": "BinaryOperation",
                            "src": "9836:29:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "4d6f6f6e77616c6b6572737761705632526f757465723a20494e56414c49445f50415448",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"MoonwalkerswapV2Router: INVALID_PATH\"",
                              "value": "MoonwalkerswapV2Router: INVALID_PATH"
                            },
                            "id": 1232,
                            "name": "Literal",
                            "src": "9867:38:1"
                          }
                        ],
                        "id": 1233,
                        "name": "FunctionCall",
                        "src": "9828:78:1"
                      }
                    ],
                    "id": 1234,
                    "name": "ExpressionStatement",
                    "src": "9828:78:1"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256[] memory"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1221,
                              "type": "uint256[] memory",
                              "value": "amounts"
                            },
                            "id": 1235,
                            "name": "Identifier",
                            "src": "9916:7:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "uint256[] memory",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                      "typeString": "address[] calldata"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "getAmountsIn",
                                  "referencedDeclaration": 4718,
                                  "type": "function (address,uint256,address[] memory) view returns (uint256[] memory)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4719,
                                      "type": "type(library MoonwalkerswapV2Library)",
                                      "value": "MoonwalkerswapV2Library"
                                    },
                                    "id": 1236,
                                    "name": "Identifier",
                                    "src": "9926:23:1"
                                  }
                                ],
                                "id": 1237,
                                "name": "MemberAccess",
                                "src": "9926:36:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 182,
                                  "type": "address",
                                  "value": "factory"
                                },
                                "id": 1238,
                                "name": "Identifier",
                                "src": "9963:7:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1204,
                                  "type": "uint256",
                                  "value": "amountOut"
                                },
                                "id": 1239,
                                "name": "Identifier",
                                "src": "9972:9:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1209,
                                  "type": "address[] calldata",
                                  "value": "path"
                                },
                                "id": 1240,
                                "name": "Identifier",
                                "src": "9983:4:1"
                              }
                            ],
                            "id": 1241,
                            "name": "FunctionCall",
                            "src": "9926:62:1"
                          }
                        ],
                        "id": 1242,
                        "name": "Assignment",
                        "src": "9916:72:1"
                      }
                    ],
                    "id": 1243,
                    "name": "ExpressionStatement",
                    "src": "9916:72:1"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_28764956f6436edee07992f748e71fb23001e9f660ab59ca28fb88f321f33b9d",
                                  "typeString": "literal_string \"MoonwalkerswapV2Router: EXCESSIVE_INPUT_AMOUNT\""
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 1244,
                            "name": "Identifier",
                            "src": "9998:7:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "<=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1221,
                                      "type": "uint256[] memory",
                                      "value": "amounts"
                                    },
                                    "id": 1245,
                                    "name": "Identifier",
                                    "src": "10006:7:1"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "30",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 0",
                                      "value": "0"
                                    },
                                    "id": 1246,
                                    "name": "Literal",
                                    "src": "10014:1:1"
                                  }
                                ],
                                "id": 1247,
                                "name": "IndexAccess",
                                "src": "10006:10:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1206,
                                  "type": "uint256",
                                  "value": "amountInMax"
                                },
                                "id": 1248,
                                "name": "Identifier",
                                "src": "10020:11:1"
                              }
                            ],
                            "id": 1249,
                            "name": "BinaryOperation",
                            "src": "10006:25:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "4d6f6f6e77616c6b6572737761705632526f757465723a204558434553534956455f494e5055545f414d4f554e54",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"MoonwalkerswapV2Router: EXCESSIVE_INPUT_AMOUNT\"",
                              "value": "MoonwalkerswapV2Router: EXCESSIVE_INPUT_AMOUNT"
                            },
                            "id": 1250,
                            "name": "Literal",
                            "src": "10033:48:1"
                          }
                        ],
                        "id": 1251,
                        "name": "FunctionCall",
                        "src": "9998:84:1"
                      }
                    ],
                    "id": 1252,
                    "name": "ExpressionStatement",
                    "src": "9998:84:1"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "safeTransferFrom",
                              "referencedDeclaration": 8213,
                              "type": "function (address,address,address,uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 8239,
                                  "type": "type(library TransferHelper)",
                                  "value": "TransferHelper"
                                },
                                "id": 1253,
                                "name": "Identifier",
                                "src": "10092:14:1"
                              }
                            ],
                            "id": 1255,
                            "name": "MemberAccess",
                            "src": "10092:31:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "type": "address"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1209,
                                  "type": "address[] calldata",
                                  "value": "path"
                                },
                                "id": 1256,
                                "name": "Identifier",
                                "src": "10124:4:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 1257,
                                "name": "Literal",
                                "src": "10129:1:1"
                              }
                            ],
                            "id": 1258,
                            "name": "IndexAccess",
                            "src": "10124:7:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "sender",
                              "referencedDeclaration": null,
                              "type": "address payable"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": -15,
                                  "type": "msg",
                                  "value": "msg"
                                },
                                "id": 1259,
                                "name": "Identifier",
                                "src": "10133:3:1"
                              }
                            ],
                            "id": 1260,
                            "name": "MemberAccess",
                            "src": "10133:10:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "address",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "pairFor",
                                  "referencedDeclaration": 4343,
                                  "type": "function (address,address,address) pure returns (address)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4719,
                                      "type": "type(library MoonwalkerswapV2Library)",
                                      "value": "MoonwalkerswapV2Library"
                                    },
                                    "id": 1261,
                                    "name": "Identifier",
                                    "src": "10145:23:1"
                                  }
                                ],
                                "id": 1262,
                                "name": "MemberAccess",
                                "src": "10145:31:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 182,
                                  "type": "address",
                                  "value": "factory"
                                },
                                "id": 1263,
                                "name": "Identifier",
                                "src": "10177:7:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "address"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1209,
                                      "type": "address[] calldata",
                                      "value": "path"
                                    },
                                    "id": 1264,
                                    "name": "Identifier",
                                    "src": "10186:4:1"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "30",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 0",
                                      "value": "0"
                                    },
                                    "id": 1265,
                                    "name": "Literal",
                                    "src": "10191:1:1"
                                  }
                                ],
                                "id": 1266,
                                "name": "IndexAccess",
                                "src": "10186:7:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "address"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1209,
                                      "type": "address[] calldata",
                                      "value": "path"
                                    },
                                    "id": 1267,
                                    "name": "Identifier",
                                    "src": "10195:4:1"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "31",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 1",
                                      "value": "1"
                                    },
                                    "id": 1268,
                                    "name": "Literal",
                                    "src": "10200:1:1"
                                  }
                                ],
                                "id": 1269,
                                "name": "IndexAccess",
                                "src": "10195:7:1"
                              }
                            ],
                            "id": 1270,
                            "name": "FunctionCall",
                            "src": "10145:58:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1221,
                                  "type": "uint256[] memory",
                                  "value": "amounts"
                                },
                                "id": 1271,
                                "name": "Identifier",
                                "src": "10205:7:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 1272,
                                "name": "Literal",
                                "src": "10213:1:1"
                              }
                            ],
                            "id": 1273,
                            "name": "IndexAccess",
                            "src": "10205:10:1"
                          }
                        ],
                        "id": 1274,
                        "name": "FunctionCall",
                        "src": "10092:124:1"
                      }
                    ],
                    "id": 1275,
                    "name": "ExpressionStatement",
                    "src": "10092:124:1"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                  "typeString": "uint256[] memory"
                                },
                                {
                                  "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                  "typeString": "address[] calldata"
                                },
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 973,
                              "type": "function (uint256[] memory,address[] memory,address)",
                              "value": "_swap"
                            },
                            "id": 1276,
                            "name": "Identifier",
                            "src": "10226:5:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1221,
                              "type": "uint256[] memory",
                              "value": "amounts"
                            },
                            "id": 1277,
                            "name": "Identifier",
                            "src": "10232:7:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1209,
                              "type": "address[] calldata",
                              "value": "path"
                            },
                            "id": 1278,
                            "name": "Identifier",
                            "src": "10241:4:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "address payable",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_MoonwalkerswapV2Router01_$1627",
                                      "typeString": "contract MoonwalkerswapV2Router01"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(address)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "address",
                                      "type": null
                                    },
                                    "id": 1279,
                                    "name": "ElementaryTypeName",
                                    "src": "10247:7:1"
                                  }
                                ],
                                "id": 1280,
                                "name": "ElementaryTypeNameExpression",
                                "src": "10247:7:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": -28,
                                  "type": "contract MoonwalkerswapV2Router01",
                                  "value": "this"
                                },
                                "id": 1281,
                                "name": "Identifier",
                                "src": "10255:4:1"
                              }
                            ],
                            "id": 1282,
                            "name": "FunctionCall",
                            "src": "10247:13:1"
                          }
                        ],
                        "id": 1283,
                        "name": "FunctionCall",
                        "src": "10226:35:1"
                      }
                    ],
                    "id": 1284,
                    "name": "ExpressionStatement",
                    "src": "10226:35:1"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "withdraw",
                              "referencedDeclaration": 4180,
                              "type": "function (uint256) external"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "contract IWETH",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4181,
                                      "type": "type(contract IWETH)",
                                      "value": "IWETH"
                                    },
                                    "id": 1285,
                                    "name": "Identifier",
                                    "src": "10271:5:1"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 185,
                                      "type": "address",
                                      "value": "WETH"
                                    },
                                    "id": 1286,
                                    "name": "Identifier",
                                    "src": "10277:4:1"
                                  }
                                ],
                                "id": 1287,
                                "name": "FunctionCall",
                                "src": "10271:11:1"
                              }
                            ],
                            "id": 1288,
                            "name": "MemberAccess",
                            "src": "10271:20:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1221,
                                  "type": "uint256[] memory",
                                  "value": "amounts"
                                },
                                "id": 1289,
                                "name": "Identifier",
                                "src": "10292:7:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "-",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "length",
                                      "referencedDeclaration": null,
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 1221,
                                          "type": "uint256[] memory",
                                          "value": "amounts"
                                        },
                                        "id": 1290,
                                        "name": "Identifier",
                                        "src": "10300:7:1"
                                      }
                                    ],
                                    "id": 1291,
                                    "name": "MemberAccess",
                                    "src": "10300:14:1"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "31",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 1",
                                      "value": "1"
                                    },
                                    "id": 1292,
                                    "name": "Literal",
                                    "src": "10317:1:1"
                                  }
                                ],
                                "id": 1293,
                                "name": "BinaryOperation",
                                "src": "10300:18:1"
                              }
                            ],
                            "id": 1294,
                            "name": "IndexAccess",
                            "src": "10292:27:1"
                          }
                        ],
                        "id": 1295,
                        "name": "FunctionCall",
                        "src": "10271:49:1"
                      }
                    ],
                    "id": 1296,
                    "name": "ExpressionStatement",
                    "src": "10271:49:1"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "safeTransferETH",
                              "referencedDeclaration": 8238,
                              "type": "function (address,uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 8239,
                                  "type": "type(library TransferHelper)",
                                  "value": "TransferHelper"
                                },
                                "id": 1297,
                                "name": "Identifier",
                                "src": "10330:14:1"
                              }
                            ],
                            "id": 1299,
                            "name": "MemberAccess",
                            "src": "10330:30:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1211,
                              "type": "address",
                              "value": "to"
                            },
                            "id": 1300,
                            "name": "Identifier",
                            "src": "10361:2:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1221,
                                  "type": "uint256[] memory",
                                  "value": "amounts"
                                },
                                "id": 1301,
                                "name": "Identifier",
                                "src": "10365:7:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "-",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "length",
                                      "referencedDeclaration": null,
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 1221,
                                          "type": "uint256[] memory",
                                          "value": "amounts"
                                        },
                                        "id": 1302,
                                        "name": "Identifier",
                                        "src": "10373:7:1"
                                      }
                                    ],
                                    "id": 1303,
                                    "name": "MemberAccess",
                                    "src": "10373:14:1"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "31",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 1",
                                      "value": "1"
                                    },
                                    "id": 1304,
                                    "name": "Literal",
                                    "src": "10390:1:1"
                                  }
                                ],
                                "id": 1305,
                                "name": "BinaryOperation",
                                "src": "10373:18:1"
                              }
                            ],
                            "id": 1306,
                            "name": "IndexAccess",
                            "src": "10365:27:1"
                          }
                        ],
                        "id": 1307,
                        "name": "FunctionCall",
                        "src": "10330:63:1"
                      }
                    ],
                    "id": 1308,
                    "name": "ExpressionStatement",
                    "src": "10330:63:1"
                  }
                ],
                "id": 1309,
                "name": "Block",
                "src": "9818:582:1"
              }
            ],
            "id": 1310,
            "name": "FunctionDefinition",
            "src": "9598:802:1"
          },
          {
            "attributes": {
              "baseFunctions": [
                4002
              ],
              "documentation": null,
              "functionSelector": "18cbafe5",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "name": "swapExactTokensForETH",
              "scope": 1627,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 1323,
                "name": "OverrideSpecifier",
                "src": "10547:8:1"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amountIn",
                      "overrides": null,
                      "scope": 1421,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 1311,
                        "name": "ElementaryTypeName",
                        "src": "10436:4:1"
                      }
                    ],
                    "id": 1312,
                    "name": "VariableDeclaration",
                    "src": "10436:13:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amountOutMin",
                      "overrides": null,
                      "scope": 1421,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 1313,
                        "name": "ElementaryTypeName",
                        "src": "10451:4:1"
                      }
                    ],
                    "id": 1314,
                    "name": "VariableDeclaration",
                    "src": "10451:17:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "path",
                      "overrides": null,
                      "scope": 1421,
                      "stateVariable": false,
                      "storageLocation": "calldata",
                      "type": "address[]",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "length": null,
                          "type": "address[]"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "address",
                              "stateMutability": "nonpayable",
                              "type": "address"
                            },
                            "id": 1315,
                            "name": "ElementaryTypeName",
                            "src": "10470:7:1"
                          }
                        ],
                        "id": 1316,
                        "name": "ArrayTypeName",
                        "src": "10470:9:1"
                      }
                    ],
                    "id": 1317,
                    "name": "VariableDeclaration",
                    "src": "10470:23:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "to",
                      "overrides": null,
                      "scope": 1421,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 1318,
                        "name": "ElementaryTypeName",
                        "src": "10495:7:1"
                      }
                    ],
                    "id": 1319,
                    "name": "VariableDeclaration",
                    "src": "10495:10:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "deadline",
                      "overrides": null,
                      "scope": 1421,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 1320,
                        "name": "ElementaryTypeName",
                        "src": "10507:4:1"
                      }
                    ],
                    "id": 1321,
                    "name": "VariableDeclaration",
                    "src": "10507:13:1"
                  }
                ],
                "id": 1322,
                "name": "ParameterList",
                "src": "10435:86:1"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amounts",
                      "overrides": null,
                      "scope": 1421,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "uint256[]",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "length": null,
                          "type": "uint256[]"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint",
                              "type": "uint256"
                            },
                            "id": 1327,
                            "name": "ElementaryTypeName",
                            "src": "10598:4:1"
                          }
                        ],
                        "id": 1328,
                        "name": "ArrayTypeName",
                        "src": "10598:6:1"
                      }
                    ],
                    "id": 1329,
                    "name": "VariableDeclaration",
                    "src": "10598:21:1"
                  }
                ],
                "id": 1330,
                "name": "ParameterList",
                "src": "10597:23:1"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 199,
                      "type": "modifier (uint256)",
                      "value": "ensure"
                    },
                    "id": 1324,
                    "name": "Identifier",
                    "src": "10564:6:1"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 1321,
                      "type": "uint256",
                      "value": "deadline"
                    },
                    "id": 1325,
                    "name": "Identifier",
                    "src": "10571:8:1"
                  }
                ],
                "id": 1326,
                "name": "ModifierInvocation",
                "src": "10564:16:1"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_aaa6fa1c87be4547172c5ac8f95f6d29b3dcd844533e4cd43e007d6da104aefe",
                                  "typeString": "literal_string \"MoonwalkerswapV2Router: INVALID_PATH\""
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 1331,
                            "name": "Identifier",
                            "src": "10635:7:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "address"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1317,
                                      "type": "address[] calldata",
                                      "value": "path"
                                    },
                                    "id": 1332,
                                    "name": "Identifier",
                                    "src": "10643:4:1"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "-",
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "length",
                                          "referencedDeclaration": null,
                                          "type": "uint256"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 1317,
                                              "type": "address[] calldata",
                                              "value": "path"
                                            },
                                            "id": 1333,
                                            "name": "Identifier",
                                            "src": "10648:4:1"
                                          }
                                        ],
                                        "id": 1334,
                                        "name": "MemberAccess",
                                        "src": "10648:11:1"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "hexvalue": "31",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "subdenomination": null,
                                          "token": "number",
                                          "type": "int_const 1",
                                          "value": "1"
                                        },
                                        "id": 1335,
                                        "name": "Literal",
                                        "src": "10662:1:1"
                                      }
                                    ],
                                    "id": 1336,
                                    "name": "BinaryOperation",
                                    "src": "10648:15:1"
                                  }
                                ],
                                "id": 1337,
                                "name": "IndexAccess",
                                "src": "10643:21:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 185,
                                  "type": "address",
                                  "value": "WETH"
                                },
                                "id": 1338,
                                "name": "Identifier",
                                "src": "10668:4:1"
                              }
                            ],
                            "id": 1339,
                            "name": "BinaryOperation",
                            "src": "10643:29:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "4d6f6f6e77616c6b6572737761705632526f757465723a20494e56414c49445f50415448",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"MoonwalkerswapV2Router: INVALID_PATH\"",
                              "value": "MoonwalkerswapV2Router: INVALID_PATH"
                            },
                            "id": 1340,
                            "name": "Literal",
                            "src": "10674:38:1"
                          }
                        ],
                        "id": 1341,
                        "name": "FunctionCall",
                        "src": "10635:78:1"
                      }
                    ],
                    "id": 1342,
                    "name": "ExpressionStatement",
                    "src": "10635:78:1"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256[] memory"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1329,
                              "type": "uint256[] memory",
                              "value": "amounts"
                            },
                            "id": 1343,
                            "name": "Identifier",
                            "src": "10723:7:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "uint256[] memory",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                      "typeString": "address[] calldata"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "getAmountsOut",
                                  "referencedDeclaration": 4633,
                                  "type": "function (address,uint256,address[] memory) view returns (uint256[] memory)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4719,
                                      "type": "type(library MoonwalkerswapV2Library)",
                                      "value": "MoonwalkerswapV2Library"
                                    },
                                    "id": 1344,
                                    "name": "Identifier",
                                    "src": "10733:23:1"
                                  }
                                ],
                                "id": 1345,
                                "name": "MemberAccess",
                                "src": "10733:37:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 182,
                                  "type": "address",
                                  "value": "factory"
                                },
                                "id": 1346,
                                "name": "Identifier",
                                "src": "10771:7:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1312,
                                  "type": "uint256",
                                  "value": "amountIn"
                                },
                                "id": 1347,
                                "name": "Identifier",
                                "src": "10780:8:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1317,
                                  "type": "address[] calldata",
                                  "value": "path"
                                },
                                "id": 1348,
                                "name": "Identifier",
                                "src": "10790:4:1"
                              }
                            ],
                            "id": 1349,
                            "name": "FunctionCall",
                            "src": "10733:62:1"
                          }
                        ],
                        "id": 1350,
                        "name": "Assignment",
                        "src": "10723:72:1"
                      }
                    ],
                    "id": 1351,
                    "name": "ExpressionStatement",
                    "src": "10723:72:1"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_731a86f993ae4871030ec3ef0201a3d29bdf48ac3eb60fad6c37632dfa349dd5",
                                  "typeString": "literal_string \"MoonwalkerswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT\""
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 1352,
                            "name": "Identifier",
                            "src": "10805:7:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": ">=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1329,
                                      "type": "uint256[] memory",
                                      "value": "amounts"
                                    },
                                    "id": 1353,
                                    "name": "Identifier",
                                    "src": "10813:7:1"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "-",
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "length",
                                          "referencedDeclaration": null,
                                          "type": "uint256"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 1329,
                                              "type": "uint256[] memory",
                                              "value": "amounts"
                                            },
                                            "id": 1354,
                                            "name": "Identifier",
                                            "src": "10821:7:1"
                                          }
                                        ],
                                        "id": 1355,
                                        "name": "MemberAccess",
                                        "src": "10821:14:1"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "hexvalue": "31",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "subdenomination": null,
                                          "token": "number",
                                          "type": "int_const 1",
                                          "value": "1"
                                        },
                                        "id": 1356,
                                        "name": "Literal",
                                        "src": "10838:1:1"
                                      }
                                    ],
                                    "id": 1357,
                                    "name": "BinaryOperation",
                                    "src": "10821:18:1"
                                  }
                                ],
                                "id": 1358,
                                "name": "IndexAccess",
                                "src": "10813:27:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1314,
                                  "type": "uint256",
                                  "value": "amountOutMin"
                                },
                                "id": 1359,
                                "name": "Identifier",
                                "src": "10844:12:1"
                              }
                            ],
                            "id": 1360,
                            "name": "BinaryOperation",
                            "src": "10813:43:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "4d6f6f6e77616c6b6572737761705632526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e54",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"MoonwalkerswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT\"",
                              "value": "MoonwalkerswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT"
                            },
                            "id": 1361,
                            "name": "Literal",
                            "src": "10858:52:1"
                          }
                        ],
                        "id": 1362,
                        "name": "FunctionCall",
                        "src": "10805:106:1"
                      }
                    ],
                    "id": 1363,
                    "name": "ExpressionStatement",
                    "src": "10805:106:1"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "safeTransferFrom",
                              "referencedDeclaration": 8213,
                              "type": "function (address,address,address,uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 8239,
                                  "type": "type(library TransferHelper)",
                                  "value": "TransferHelper"
                                },
                                "id": 1364,
                                "name": "Identifier",
                                "src": "10921:14:1"
                              }
                            ],
                            "id": 1366,
                            "name": "MemberAccess",
                            "src": "10921:31:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "type": "address"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1317,
                                  "type": "address[] calldata",
                                  "value": "path"
                                },
                                "id": 1367,
                                "name": "Identifier",
                                "src": "10953:4:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 1368,
                                "name": "Literal",
                                "src": "10958:1:1"
                              }
                            ],
                            "id": 1369,
                            "name": "IndexAccess",
                            "src": "10953:7:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "sender",
                              "referencedDeclaration": null,
                              "type": "address payable"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": -15,
                                  "type": "msg",
                                  "value": "msg"
                                },
                                "id": 1370,
                                "name": "Identifier",
                                "src": "10962:3:1"
                              }
                            ],
                            "id": 1371,
                            "name": "MemberAccess",
                            "src": "10962:10:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "address",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "pairFor",
                                  "referencedDeclaration": 4343,
                                  "type": "function (address,address,address) pure returns (address)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4719,
                                      "type": "type(library MoonwalkerswapV2Library)",
                                      "value": "MoonwalkerswapV2Library"
                                    },
                                    "id": 1372,
                                    "name": "Identifier",
                                    "src": "10974:23:1"
                                  }
                                ],
                                "id": 1373,
                                "name": "MemberAccess",
                                "src": "10974:31:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 182,
                                  "type": "address",
                                  "value": "factory"
                                },
                                "id": 1374,
                                "name": "Identifier",
                                "src": "11006:7:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "address"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1317,
                                      "type": "address[] calldata",
                                      "value": "path"
                                    },
                                    "id": 1375,
                                    "name": "Identifier",
                                    "src": "11015:4:1"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "30",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 0",
                                      "value": "0"
                                    },
                                    "id": 1376,
                                    "name": "Literal",
                                    "src": "11020:1:1"
                                  }
                                ],
                                "id": 1377,
                                "name": "IndexAccess",
                                "src": "11015:7:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "address"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1317,
                                      "type": "address[] calldata",
                                      "value": "path"
                                    },
                                    "id": 1378,
                                    "name": "Identifier",
                                    "src": "11024:4:1"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "31",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 1",
                                      "value": "1"
                                    },
                                    "id": 1379,
                                    "name": "Literal",
                                    "src": "11029:1:1"
                                  }
                                ],
                                "id": 1380,
                                "name": "IndexAccess",
                                "src": "11024:7:1"
                              }
                            ],
                            "id": 1381,
                            "name": "FunctionCall",
                            "src": "10974:58:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1329,
                                  "type": "uint256[] memory",
                                  "value": "amounts"
                                },
                                "id": 1382,
                                "name": "Identifier",
                                "src": "11034:7:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 1383,
                                "name": "Literal",
                                "src": "11042:1:1"
                              }
                            ],
                            "id": 1384,
                            "name": "IndexAccess",
                            "src": "11034:10:1"
                          }
                        ],
                        "id": 1385,
                        "name": "FunctionCall",
                        "src": "10921:124:1"
                      }
                    ],
                    "id": 1386,
                    "name": "ExpressionStatement",
                    "src": "10921:124:1"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                  "typeString": "uint256[] memory"
                                },
                                {
                                  "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                  "typeString": "address[] calldata"
                                },
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 973,
                              "type": "function (uint256[] memory,address[] memory,address)",
                              "value": "_swap"
                            },
                            "id": 1387,
                            "name": "Identifier",
                            "src": "11055:5:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1329,
                              "type": "uint256[] memory",
                              "value": "amounts"
                            },
                            "id": 1388,
                            "name": "Identifier",
                            "src": "11061:7:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1317,
                              "type": "address[] calldata",
                              "value": "path"
                            },
                            "id": 1389,
                            "name": "Identifier",
                            "src": "11070:4:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "address payable",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_MoonwalkerswapV2Router01_$1627",
                                      "typeString": "contract MoonwalkerswapV2Router01"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(address)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "address",
                                      "type": null
                                    },
                                    "id": 1390,
                                    "name": "ElementaryTypeName",
                                    "src": "11076:7:1"
                                  }
                                ],
                                "id": 1391,
                                "name": "ElementaryTypeNameExpression",
                                "src": "11076:7:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": -28,
                                  "type": "contract MoonwalkerswapV2Router01",
                                  "value": "this"
                                },
                                "id": 1392,
                                "name": "Identifier",
                                "src": "11084:4:1"
                              }
                            ],
                            "id": 1393,
                            "name": "FunctionCall",
                            "src": "11076:13:1"
                          }
                        ],
                        "id": 1394,
                        "name": "FunctionCall",
                        "src": "11055:35:1"
                      }
                    ],
                    "id": 1395,
                    "name": "ExpressionStatement",
                    "src": "11055:35:1"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "withdraw",
                              "referencedDeclaration": 4180,
                              "type": "function (uint256) external"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "contract IWETH",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4181,
                                      "type": "type(contract IWETH)",
                                      "value": "IWETH"
                                    },
                                    "id": 1396,
                                    "name": "Identifier",
                                    "src": "11100:5:1"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 185,
                                      "type": "address",
                                      "value": "WETH"
                                    },
                                    "id": 1397,
                                    "name": "Identifier",
                                    "src": "11106:4:1"
                                  }
                                ],
                                "id": 1398,
                                "name": "FunctionCall",
                                "src": "11100:11:1"
                              }
                            ],
                            "id": 1399,
                            "name": "MemberAccess",
                            "src": "11100:20:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1329,
                                  "type": "uint256[] memory",
                                  "value": "amounts"
                                },
                                "id": 1400,
                                "name": "Identifier",
                                "src": "11121:7:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "-",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "length",
                                      "referencedDeclaration": null,
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 1329,
                                          "type": "uint256[] memory",
                                          "value": "amounts"
                                        },
                                        "id": 1401,
                                        "name": "Identifier",
                                        "src": "11129:7:1"
                                      }
                                    ],
                                    "id": 1402,
                                    "name": "MemberAccess",
                                    "src": "11129:14:1"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "31",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 1",
                                      "value": "1"
                                    },
                                    "id": 1403,
                                    "name": "Literal",
                                    "src": "11146:1:1"
                                  }
                                ],
                                "id": 1404,
                                "name": "BinaryOperation",
                                "src": "11129:18:1"
                              }
                            ],
                            "id": 1405,
                            "name": "IndexAccess",
                            "src": "11121:27:1"
                          }
                        ],
                        "id": 1406,
                        "name": "FunctionCall",
                        "src": "11100:49:1"
                      }
                    ],
                    "id": 1407,
                    "name": "ExpressionStatement",
                    "src": "11100:49:1"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "safeTransferETH",
                              "referencedDeclaration": 8238,
                              "type": "function (address,uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 8239,
                                  "type": "type(library TransferHelper)",
                                  "value": "TransferHelper"
                                },
                                "id": 1408,
                                "name": "Identifier",
                                "src": "11159:14:1"
                              }
                            ],
                            "id": 1410,
                            "name": "MemberAccess",
                            "src": "11159:30:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1319,
                              "type": "address",
                              "value": "to"
                            },
                            "id": 1411,
                            "name": "Identifier",
                            "src": "11190:2:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1329,
                                  "type": "uint256[] memory",
                                  "value": "amounts"
                                },
                                "id": 1412,
                                "name": "Identifier",
                                "src": "11194:7:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "-",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "length",
                                      "referencedDeclaration": null,
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 1329,
                                          "type": "uint256[] memory",
                                          "value": "amounts"
                                        },
                                        "id": 1413,
                                        "name": "Identifier",
                                        "src": "11202:7:1"
                                      }
                                    ],
                                    "id": 1414,
                                    "name": "MemberAccess",
                                    "src": "11202:14:1"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "31",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 1",
                                      "value": "1"
                                    },
                                    "id": 1415,
                                    "name": "Literal",
                                    "src": "11219:1:1"
                                  }
                                ],
                                "id": 1416,
                                "name": "BinaryOperation",
                                "src": "11202:18:1"
                              }
                            ],
                            "id": 1417,
                            "name": "IndexAccess",
                            "src": "11194:27:1"
                          }
                        ],
                        "id": 1418,
                        "name": "FunctionCall",
                        "src": "11159:63:1"
                      }
                    ],
                    "id": 1419,
                    "name": "ExpressionStatement",
                    "src": "11159:63:1"
                  }
                ],
                "id": 1420,
                "name": "Block",
                "src": "10625:604:1"
              }
            ],
            "id": 1421,
            "name": "FunctionDefinition",
            "src": "10405:824:1"
          },
          {
            "attributes": {
              "baseFunctions": [
                4017
              ],
              "documentation": null,
              "functionSelector": "fb3bdb41",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "name": "swapETHForExactTokens",
              "scope": 1627,
              "stateMutability": "payable",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 1432,
                "name": "OverrideSpecifier",
                "src": "11358:8:1"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amountOut",
                      "overrides": null,
                      "scope": 1526,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 1422,
                        "name": "ElementaryTypeName",
                        "src": "11265:4:1"
                      }
                    ],
                    "id": 1423,
                    "name": "VariableDeclaration",
                    "src": "11265:14:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "path",
                      "overrides": null,
                      "scope": 1526,
                      "stateVariable": false,
                      "storageLocation": "calldata",
                      "type": "address[]",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "length": null,
                          "type": "address[]"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "address",
                              "stateMutability": "nonpayable",
                              "type": "address"
                            },
                            "id": 1424,
                            "name": "ElementaryTypeName",
                            "src": "11281:7:1"
                          }
                        ],
                        "id": 1425,
                        "name": "ArrayTypeName",
                        "src": "11281:9:1"
                      }
                    ],
                    "id": 1426,
                    "name": "VariableDeclaration",
                    "src": "11281:23:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "to",
                      "overrides": null,
                      "scope": 1526,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 1427,
                        "name": "ElementaryTypeName",
                        "src": "11306:7:1"
                      }
                    ],
                    "id": 1428,
                    "name": "VariableDeclaration",
                    "src": "11306:10:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "deadline",
                      "overrides": null,
                      "scope": 1526,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 1429,
                        "name": "ElementaryTypeName",
                        "src": "11318:4:1"
                      }
                    ],
                    "id": 1430,
                    "name": "VariableDeclaration",
                    "src": "11318:13:1"
                  }
                ],
                "id": 1431,
                "name": "ParameterList",
                "src": "11264:68:1"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amounts",
                      "overrides": null,
                      "scope": 1526,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "uint256[]",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "length": null,
                          "type": "uint256[]"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint",
                              "type": "uint256"
                            },
                            "id": 1436,
                            "name": "ElementaryTypeName",
                            "src": "11425:4:1"
                          }
                        ],
                        "id": 1437,
                        "name": "ArrayTypeName",
                        "src": "11425:6:1"
                      }
                    ],
                    "id": 1438,
                    "name": "VariableDeclaration",
                    "src": "11425:21:1"
                  }
                ],
                "id": 1439,
                "name": "ParameterList",
                "src": "11424:23:1"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 199,
                      "type": "modifier (uint256)",
                      "value": "ensure"
                    },
                    "id": 1433,
                    "name": "Identifier",
                    "src": "11391:6:1"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 1430,
                      "type": "uint256",
                      "value": "deadline"
                    },
                    "id": 1434,
                    "name": "Identifier",
                    "src": "11398:8:1"
                  }
                ],
                "id": 1435,
                "name": "ModifierInvocation",
                "src": "11391:16:1"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_aaa6fa1c87be4547172c5ac8f95f6d29b3dcd844533e4cd43e007d6da104aefe",
                                  "typeString": "literal_string \"MoonwalkerswapV2Router: INVALID_PATH\""
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 1440,
                            "name": "Identifier",
                            "src": "11462:7:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "address"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1426,
                                      "type": "address[] calldata",
                                      "value": "path"
                                    },
                                    "id": 1441,
                                    "name": "Identifier",
                                    "src": "11470:4:1"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "30",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 0",
                                      "value": "0"
                                    },
                                    "id": 1442,
                                    "name": "Literal",
                                    "src": "11475:1:1"
                                  }
                                ],
                                "id": 1443,
                                "name": "IndexAccess",
                                "src": "11470:7:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 185,
                                  "type": "address",
                                  "value": "WETH"
                                },
                                "id": 1444,
                                "name": "Identifier",
                                "src": "11481:4:1"
                              }
                            ],
                            "id": 1445,
                            "name": "BinaryOperation",
                            "src": "11470:15:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "4d6f6f6e77616c6b6572737761705632526f757465723a20494e56414c49445f50415448",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"MoonwalkerswapV2Router: INVALID_PATH\"",
                              "value": "MoonwalkerswapV2Router: INVALID_PATH"
                            },
                            "id": 1446,
                            "name": "Literal",
                            "src": "11487:38:1"
                          }
                        ],
                        "id": 1447,
                        "name": "FunctionCall",
                        "src": "11462:64:1"
                      }
                    ],
                    "id": 1448,
                    "name": "ExpressionStatement",
                    "src": "11462:64:1"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256[] memory"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1438,
                              "type": "uint256[] memory",
                              "value": "amounts"
                            },
                            "id": 1449,
                            "name": "Identifier",
                            "src": "11536:7:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "uint256[] memory",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                      "typeString": "address[] calldata"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "getAmountsIn",
                                  "referencedDeclaration": 4718,
                                  "type": "function (address,uint256,address[] memory) view returns (uint256[] memory)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4719,
                                      "type": "type(library MoonwalkerswapV2Library)",
                                      "value": "MoonwalkerswapV2Library"
                                    },
                                    "id": 1450,
                                    "name": "Identifier",
                                    "src": "11546:23:1"
                                  }
                                ],
                                "id": 1451,
                                "name": "MemberAccess",
                                "src": "11546:36:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 182,
                                  "type": "address",
                                  "value": "factory"
                                },
                                "id": 1452,
                                "name": "Identifier",
                                "src": "11583:7:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1423,
                                  "type": "uint256",
                                  "value": "amountOut"
                                },
                                "id": 1453,
                                "name": "Identifier",
                                "src": "11592:9:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1426,
                                  "type": "address[] calldata",
                                  "value": "path"
                                },
                                "id": 1454,
                                "name": "Identifier",
                                "src": "11603:4:1"
                              }
                            ],
                            "id": 1455,
                            "name": "FunctionCall",
                            "src": "11546:62:1"
                          }
                        ],
                        "id": 1456,
                        "name": "Assignment",
                        "src": "11536:72:1"
                      }
                    ],
                    "id": 1457,
                    "name": "ExpressionStatement",
                    "src": "11536:72:1"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_28764956f6436edee07992f748e71fb23001e9f660ab59ca28fb88f321f33b9d",
                                  "typeString": "literal_string \"MoonwalkerswapV2Router: EXCESSIVE_INPUT_AMOUNT\""
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 1458,
                            "name": "Identifier",
                            "src": "11618:7:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "<=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1438,
                                      "type": "uint256[] memory",
                                      "value": "amounts"
                                    },
                                    "id": 1459,
                                    "name": "Identifier",
                                    "src": "11626:7:1"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "30",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 0",
                                      "value": "0"
                                    },
                                    "id": 1460,
                                    "name": "Literal",
                                    "src": "11634:1:1"
                                  }
                                ],
                                "id": 1461,
                                "name": "IndexAccess",
                                "src": "11626:10:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "value",
                                  "referencedDeclaration": null,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": -15,
                                      "type": "msg",
                                      "value": "msg"
                                    },
                                    "id": 1462,
                                    "name": "Identifier",
                                    "src": "11640:3:1"
                                  }
                                ],
                                "id": 1463,
                                "name": "MemberAccess",
                                "src": "11640:9:1"
                              }
                            ],
                            "id": 1464,
                            "name": "BinaryOperation",
                            "src": "11626:23:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "4d6f6f6e77616c6b6572737761705632526f757465723a204558434553534956455f494e5055545f414d4f554e54",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"MoonwalkerswapV2Router: EXCESSIVE_INPUT_AMOUNT\"",
                              "value": "MoonwalkerswapV2Router: EXCESSIVE_INPUT_AMOUNT"
                            },
                            "id": 1465,
                            "name": "Literal",
                            "src": "11651:48:1"
                          }
                        ],
                        "id": 1466,
                        "name": "FunctionCall",
                        "src": "11618:82:1"
                      }
                    ],
                    "id": 1467,
                    "name": "ExpressionStatement",
                    "src": "11618:82:1"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "names": [
                                "value"
                              ],
                              "type": "function () payable external"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "deposit",
                                  "referencedDeclaration": 4166,
                                  "type": "function () payable external"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "contract IWETH",
                                      "type_conversion": true
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          ],
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4181,
                                          "type": "type(contract IWETH)",
                                          "value": "IWETH"
                                        },
                                        "id": 1468,
                                        "name": "Identifier",
                                        "src": "11710:5:1"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 185,
                                          "type": "address",
                                          "value": "WETH"
                                        },
                                        "id": 1469,
                                        "name": "Identifier",
                                        "src": "11716:4:1"
                                      }
                                    ],
                                    "id": 1470,
                                    "name": "FunctionCall",
                                    "src": "11710:11:1"
                                  }
                                ],
                                "id": 1471,
                                "name": "MemberAccess",
                                "src": "11710:19:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1438,
                                      "type": "uint256[] memory",
                                      "value": "amounts"
                                    },
                                    "id": 1472,
                                    "name": "Identifier",
                                    "src": "11737:7:1"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "30",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 0",
                                      "value": "0"
                                    },
                                    "id": 1473,
                                    "name": "Literal",
                                    "src": "11745:1:1"
                                  }
                                ],
                                "id": 1474,
                                "name": "IndexAccess",
                                "src": "11737:10:1"
                              }
                            ],
                            "id": 1475,
                            "name": "FunctionCallOptions",
                            "src": "11710:38:1"
                          }
                        ],
                        "id": 1476,
                        "name": "FunctionCall",
                        "src": "11710:40:1"
                      }
                    ],
                    "id": 1477,
                    "name": "ExpressionStatement",
                    "src": "11710:40:1"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": -3,
                              "type": "function (bool) pure",
                              "value": "assert"
                            },
                            "id": 1478,
                            "name": "Identifier",
                            "src": "11760:6:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "bool",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "transfer",
                                  "referencedDeclaration": 4175,
                                  "type": "function (address,uint256) external returns (bool)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "contract IWETH",
                                      "type_conversion": true
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          ],
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4181,
                                          "type": "type(contract IWETH)",
                                          "value": "IWETH"
                                        },
                                        "id": 1479,
                                        "name": "Identifier",
                                        "src": "11767:5:1"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 185,
                                          "type": "address",
                                          "value": "WETH"
                                        },
                                        "id": 1480,
                                        "name": "Identifier",
                                        "src": "11773:4:1"
                                      }
                                    ],
                                    "id": 1481,
                                    "name": "FunctionCall",
                                    "src": "11767:11:1"
                                  }
                                ],
                                "id": 1482,
                                "name": "MemberAccess",
                                "src": "11767:20:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "address",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "pairFor",
                                      "referencedDeclaration": 4343,
                                      "type": "function (address,address,address) pure returns (address)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4719,
                                          "type": "type(library MoonwalkerswapV2Library)",
                                          "value": "MoonwalkerswapV2Library"
                                        },
                                        "id": 1483,
                                        "name": "Identifier",
                                        "src": "11788:23:1"
                                      }
                                    ],
                                    "id": 1484,
                                    "name": "MemberAccess",
                                    "src": "11788:31:1"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 182,
                                      "type": "address",
                                      "value": "factory"
                                    },
                                    "id": 1485,
                                    "name": "Identifier",
                                    "src": "11820:7:1"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "type": "address"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 1426,
                                          "type": "address[] calldata",
                                          "value": "path"
                                        },
                                        "id": 1486,
                                        "name": "Identifier",
                                        "src": "11829:4:1"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "hexvalue": "30",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "subdenomination": null,
                                          "token": "number",
                                          "type": "int_const 0",
                                          "value": "0"
                                        },
                                        "id": 1487,
                                        "name": "Literal",
                                        "src": "11834:1:1"
                                      }
                                    ],
                                    "id": 1488,
                                    "name": "IndexAccess",
                                    "src": "11829:7:1"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "type": "address"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 1426,
                                          "type": "address[] calldata",
                                          "value": "path"
                                        },
                                        "id": 1489,
                                        "name": "Identifier",
                                        "src": "11838:4:1"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "hexvalue": "31",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "subdenomination": null,
                                          "token": "number",
                                          "type": "int_const 1",
                                          "value": "1"
                                        },
                                        "id": 1490,
                                        "name": "Literal",
                                        "src": "11843:1:1"
                                      }
                                    ],
                                    "id": 1491,
                                    "name": "IndexAccess",
                                    "src": "11838:7:1"
                                  }
                                ],
                                "id": 1492,
                                "name": "FunctionCall",
                                "src": "11788:58:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1438,
                                      "type": "uint256[] memory",
                                      "value": "amounts"
                                    },
                                    "id": 1493,
                                    "name": "Identifier",
                                    "src": "11848:7:1"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "30",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 0",
                                      "value": "0"
                                    },
                                    "id": 1494,
                                    "name": "Literal",
                                    "src": "11856:1:1"
                                  }
                                ],
                                "id": 1495,
                                "name": "IndexAccess",
                                "src": "11848:10:1"
                              }
                            ],
                            "id": 1496,
                            "name": "FunctionCall",
                            "src": "11767:92:1"
                          }
                        ],
                        "id": 1497,
                        "name": "FunctionCall",
                        "src": "11760:100:1"
                      }
                    ],
                    "id": 1498,
                    "name": "ExpressionStatement",
                    "src": "11760:100:1"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                  "typeString": "uint256[] memory"
                                },
                                {
                                  "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                  "typeString": "address[] calldata"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 973,
                              "type": "function (uint256[] memory,address[] memory,address)",
                              "value": "_swap"
                            },
                            "id": 1499,
                            "name": "Identifier",
                            "src": "11870:5:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1438,
                              "type": "uint256[] memory",
                              "value": "amounts"
                            },
                            "id": 1500,
                            "name": "Identifier",
                            "src": "11876:7:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1426,
                              "type": "address[] calldata",
                              "value": "path"
                            },
                            "id": 1501,
                            "name": "Identifier",
                            "src": "11885:4:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1428,
                              "type": "address",
                              "value": "to"
                            },
                            "id": 1502,
                            "name": "Identifier",
                            "src": "11891:2:1"
                          }
                        ],
                        "id": 1503,
                        "name": "FunctionCall",
                        "src": "11870:24:1"
                      }
                    ],
                    "id": 1504,
                    "name": "ExpressionStatement",
                    "src": "11870:24:1"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": ">",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "value",
                              "referencedDeclaration": null,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": -15,
                                  "type": "msg",
                                  "value": "msg"
                                },
                                "id": 1505,
                                "name": "Identifier",
                                "src": "11908:3:1"
                              }
                            ],
                            "id": 1506,
                            "name": "MemberAccess",
                            "src": "11908:9:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1438,
                                  "type": "uint256[] memory",
                                  "value": "amounts"
                                },
                                "id": 1507,
                                "name": "Identifier",
                                "src": "11920:7:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 1508,
                                "name": "Literal",
                                "src": "11928:1:1"
                              }
                            ],
                            "id": 1509,
                            "name": "IndexAccess",
                            "src": "11920:10:1"
                          }
                        ],
                        "id": 1510,
                        "name": "BinaryOperation",
                        "src": "11908:22:1"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "tuple()",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "safeTransferETH",
                                  "referencedDeclaration": 8238,
                                  "type": "function (address,uint256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 8239,
                                      "type": "type(library TransferHelper)",
                                      "value": "TransferHelper"
                                    },
                                    "id": 1511,
                                    "name": "Identifier",
                                    "src": "11932:14:1"
                                  }
                                ],
                                "id": 1513,
                                "name": "MemberAccess",
                                "src": "11932:30:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "sender",
                                  "referencedDeclaration": null,
                                  "type": "address payable"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": -15,
                                      "type": "msg",
                                      "value": "msg"
                                    },
                                    "id": 1514,
                                    "name": "Identifier",
                                    "src": "11963:3:1"
                                  }
                                ],
                                "id": 1515,
                                "name": "MemberAccess",
                                "src": "11963:10:1"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "-",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "value",
                                      "referencedDeclaration": null,
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": -15,
                                          "type": "msg",
                                          "value": "msg"
                                        },
                                        "id": 1516,
                                        "name": "Identifier",
                                        "src": "11975:3:1"
                                      }
                                    ],
                                    "id": 1517,
                                    "name": "MemberAccess",
                                    "src": "11975:9:1"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 1438,
                                          "type": "uint256[] memory",
                                          "value": "amounts"
                                        },
                                        "id": 1518,
                                        "name": "Identifier",
                                        "src": "11987:7:1"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "hexvalue": "30",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "subdenomination": null,
                                          "token": "number",
                                          "type": "int_const 0",
                                          "value": "0"
                                        },
                                        "id": 1519,
                                        "name": "Literal",
                                        "src": "11995:1:1"
                                      }
                                    ],
                                    "id": 1520,
                                    "name": "IndexAccess",
                                    "src": "11987:10:1"
                                  }
                                ],
                                "id": 1521,
                                "name": "BinaryOperation",
                                "src": "11975:22:1"
                              }
                            ],
                            "id": 1522,
                            "name": "FunctionCall",
                            "src": "11932:66:1"
                          }
                        ],
                        "id": 1523,
                        "name": "ExpressionStatement",
                        "src": "11932:66:1"
                      }
                    ],
                    "id": 1524,
                    "name": "IfStatement",
                    "src": "11904:94:1"
                  }
                ],
                "id": 1525,
                "name": "Block",
                "src": "11452:580:1"
              }
            ],
            "id": 1526,
            "name": "FunctionDefinition",
            "src": "11234:798:1"
          },
          {
            "attributes": {
              "baseFunctions": [
                4028
              ],
              "documentation": null,
              "functionSelector": "ad615dec",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "quote",
              "scope": 1627,
              "stateMutability": "pure",
              "virtual": false,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 1534,
                "name": "OverrideSpecifier",
                "src": "12109:8:1"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amountA",
                      "overrides": null,
                      "scope": 1546,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 1527,
                        "name": "ElementaryTypeName",
                        "src": "12053:4:1"
                      }
                    ],
                    "id": 1528,
                    "name": "VariableDeclaration",
                    "src": "12053:12:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "reserveA",
                      "overrides": null,
                      "scope": 1546,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 1529,
                        "name": "ElementaryTypeName",
                        "src": "12067:4:1"
                      }
                    ],
                    "id": 1530,
                    "name": "VariableDeclaration",
                    "src": "12067:13:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "reserveB",
                      "overrides": null,
                      "scope": 1546,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 1531,
                        "name": "ElementaryTypeName",
                        "src": "12082:4:1"
                      }
                    ],
                    "id": 1532,
                    "name": "VariableDeclaration",
                    "src": "12082:13:1"
                  }
                ],
                "id": 1533,
                "name": "ParameterList",
                "src": "12052:44:1"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amountB",
                      "overrides": null,
                      "scope": 1546,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 1535,
                        "name": "ElementaryTypeName",
                        "src": "12127:4:1"
                      }
                    ],
                    "id": 1536,
                    "name": "VariableDeclaration",
                    "src": "12127:12:1"
                  }
                ],
                "id": 1537,
                "name": "ParameterList",
                "src": "12126:14:1"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 1537
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "quote",
                              "referencedDeclaration": 4432,
                              "type": "function (uint256,uint256,uint256) pure returns (uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4719,
                                  "type": "type(library MoonwalkerswapV2Library)",
                                  "value": "MoonwalkerswapV2Library"
                                },
                                "id": 1538,
                                "name": "Identifier",
                                "src": "12158:23:1"
                              }
                            ],
                            "id": 1539,
                            "name": "MemberAccess",
                            "src": "12158:29:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1528,
                              "type": "uint256",
                              "value": "amountA"
                            },
                            "id": 1540,
                            "name": "Identifier",
                            "src": "12188:7:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1530,
                              "type": "uint256",
                              "value": "reserveA"
                            },
                            "id": 1541,
                            "name": "Identifier",
                            "src": "12197:8:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1532,
                              "type": "uint256",
                              "value": "reserveB"
                            },
                            "id": 1542,
                            "name": "Identifier",
                            "src": "12207:8:1"
                          }
                        ],
                        "id": 1543,
                        "name": "FunctionCall",
                        "src": "12158:58:1"
                      }
                    ],
                    "id": 1544,
                    "name": "Return",
                    "src": "12151:65:1"
                  }
                ],
                "id": 1545,
                "name": "Block",
                "src": "12141:82:1"
              }
            ],
            "id": 1546,
            "name": "FunctionDefinition",
            "src": "12038:185:1"
          },
          {
            "attributes": {
              "baseFunctions": [
                4039
              ],
              "documentation": null,
              "functionSelector": "054d50d4",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "getAmountOut",
              "scope": 1627,
              "stateMutability": "pure",
              "virtual": false,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 1554,
                "name": "OverrideSpecifier",
                "src": "12311:8:1"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amountIn",
                      "overrides": null,
                      "scope": 1566,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 1547,
                        "name": "ElementaryTypeName",
                        "src": "12251:4:1"
                      }
                    ],
                    "id": 1548,
                    "name": "VariableDeclaration",
                    "src": "12251:13:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "reserveIn",
                      "overrides": null,
                      "scope": 1566,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 1549,
                        "name": "ElementaryTypeName",
                        "src": "12266:4:1"
                      }
                    ],
                    "id": 1550,
                    "name": "VariableDeclaration",
                    "src": "12266:14:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "reserveOut",
                      "overrides": null,
                      "scope": 1566,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 1551,
                        "name": "ElementaryTypeName",
                        "src": "12282:4:1"
                      }
                    ],
                    "id": 1552,
                    "name": "VariableDeclaration",
                    "src": "12282:15:1"
                  }
                ],
                "id": 1553,
                "name": "ParameterList",
                "src": "12250:48:1"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amountOut",
                      "overrides": null,
                      "scope": 1566,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 1555,
                        "name": "ElementaryTypeName",
                        "src": "12329:4:1"
                      }
                    ],
                    "id": 1556,
                    "name": "VariableDeclaration",
                    "src": "12329:14:1"
                  }
                ],
                "id": 1557,
                "name": "ParameterList",
                "src": "12328:16:1"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 1557
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "getAmountOut",
                              "referencedDeclaration": 4492,
                              "type": "function (uint256,uint256,uint256) pure returns (uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4719,
                                  "type": "type(library MoonwalkerswapV2Library)",
                                  "value": "MoonwalkerswapV2Library"
                                },
                                "id": 1558,
                                "name": "Identifier",
                                "src": "12362:23:1"
                              }
                            ],
                            "id": 1559,
                            "name": "MemberAccess",
                            "src": "12362:36:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1548,
                              "type": "uint256",
                              "value": "amountIn"
                            },
                            "id": 1560,
                            "name": "Identifier",
                            "src": "12399:8:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1550,
                              "type": "uint256",
                              "value": "reserveIn"
                            },
                            "id": 1561,
                            "name": "Identifier",
                            "src": "12409:9:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1552,
                              "type": "uint256",
                              "value": "reserveOut"
                            },
                            "id": 1562,
                            "name": "Identifier",
                            "src": "12420:10:1"
                          }
                        ],
                        "id": 1563,
                        "name": "FunctionCall",
                        "src": "12362:69:1"
                      }
                    ],
                    "id": 1564,
                    "name": "Return",
                    "src": "12355:76:1"
                  }
                ],
                "id": 1565,
                "name": "Block",
                "src": "12345:93:1"
              }
            ],
            "id": 1566,
            "name": "FunctionDefinition",
            "src": "12229:209:1"
          },
          {
            "attributes": {
              "baseFunctions": [
                4050
              ],
              "documentation": null,
              "functionSelector": "85f8c259",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "getAmountIn",
              "scope": 1627,
              "stateMutability": "pure",
              "virtual": false,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 1574,
                "name": "OverrideSpecifier",
                "src": "12526:8:1"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amountOut",
                      "overrides": null,
                      "scope": 1586,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 1567,
                        "name": "ElementaryTypeName",
                        "src": "12465:4:1"
                      }
                    ],
                    "id": 1568,
                    "name": "VariableDeclaration",
                    "src": "12465:14:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "reserveIn",
                      "overrides": null,
                      "scope": 1586,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 1569,
                        "name": "ElementaryTypeName",
                        "src": "12481:4:1"
                      }
                    ],
                    "id": 1570,
                    "name": "VariableDeclaration",
                    "src": "12481:14:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "reserveOut",
                      "overrides": null,
                      "scope": 1586,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 1571,
                        "name": "ElementaryTypeName",
                        "src": "12497:4:1"
                      }
                    ],
                    "id": 1572,
                    "name": "VariableDeclaration",
                    "src": "12497:15:1"
                  }
                ],
                "id": 1573,
                "name": "ParameterList",
                "src": "12464:49:1"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amountIn",
                      "overrides": null,
                      "scope": 1586,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 1575,
                        "name": "ElementaryTypeName",
                        "src": "12544:4:1"
                      }
                    ],
                    "id": 1576,
                    "name": "VariableDeclaration",
                    "src": "12544:13:1"
                  }
                ],
                "id": 1577,
                "name": "ParameterList",
                "src": "12543:15:1"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 1577
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "getAmountOut",
                              "referencedDeclaration": 4492,
                              "type": "function (uint256,uint256,uint256) pure returns (uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4719,
                                  "type": "type(library MoonwalkerswapV2Library)",
                                  "value": "MoonwalkerswapV2Library"
                                },
                                "id": 1578,
                                "name": "Identifier",
                                "src": "12576:23:1"
                              }
                            ],
                            "id": 1579,
                            "name": "MemberAccess",
                            "src": "12576:36:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1568,
                              "type": "uint256",
                              "value": "amountOut"
                            },
                            "id": 1580,
                            "name": "Identifier",
                            "src": "12613:9:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1570,
                              "type": "uint256",
                              "value": "reserveIn"
                            },
                            "id": 1581,
                            "name": "Identifier",
                            "src": "12624:9:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1572,
                              "type": "uint256",
                              "value": "reserveOut"
                            },
                            "id": 1582,
                            "name": "Identifier",
                            "src": "12635:10:1"
                          }
                        ],
                        "id": 1583,
                        "name": "FunctionCall",
                        "src": "12576:70:1"
                      }
                    ],
                    "id": 1584,
                    "name": "Return",
                    "src": "12569:77:1"
                  }
                ],
                "id": 1585,
                "name": "Block",
                "src": "12559:94:1"
              }
            ],
            "id": 1586,
            "name": "FunctionDefinition",
            "src": "12444:209:1"
          },
          {
            "attributes": {
              "baseFunctions": [
                4061
              ],
              "documentation": null,
              "functionSelector": "d06ca61f",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "getAmountsOut",
              "scope": 1627,
              "stateMutability": "view",
              "virtual": false,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 1593,
                "name": "OverrideSpecifier",
                "src": "12732:8:1"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amountIn",
                      "overrides": null,
                      "scope": 1606,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 1587,
                        "name": "ElementaryTypeName",
                        "src": "12682:4:1"
                      }
                    ],
                    "id": 1588,
                    "name": "VariableDeclaration",
                    "src": "12682:13:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "path",
                      "overrides": null,
                      "scope": 1606,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "address[]",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "length": null,
                          "type": "address[]"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "address",
                              "stateMutability": "nonpayable",
                              "type": "address"
                            },
                            "id": 1589,
                            "name": "ElementaryTypeName",
                            "src": "12697:7:1"
                          }
                        ],
                        "id": 1590,
                        "name": "ArrayTypeName",
                        "src": "12697:9:1"
                      }
                    ],
                    "id": 1591,
                    "name": "VariableDeclaration",
                    "src": "12697:21:1"
                  }
                ],
                "id": 1592,
                "name": "ParameterList",
                "src": "12681:38:1"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amounts",
                      "overrides": null,
                      "scope": 1606,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "uint256[]",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "length": null,
                          "type": "uint256[]"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint",
                              "type": "uint256"
                            },
                            "id": 1594,
                            "name": "ElementaryTypeName",
                            "src": "12750:4:1"
                          }
                        ],
                        "id": 1595,
                        "name": "ArrayTypeName",
                        "src": "12750:6:1"
                      }
                    ],
                    "id": 1596,
                    "name": "VariableDeclaration",
                    "src": "12750:21:1"
                  }
                ],
                "id": 1597,
                "name": "ParameterList",
                "src": "12749:23:1"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 1597
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "uint256[] memory",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[] memory"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "getAmountsOut",
                              "referencedDeclaration": 4633,
                              "type": "function (address,uint256,address[] memory) view returns (uint256[] memory)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4719,
                                  "type": "type(library MoonwalkerswapV2Library)",
                                  "value": "MoonwalkerswapV2Library"
                                },
                                "id": 1598,
                                "name": "Identifier",
                                "src": "12790:23:1"
                              }
                            ],
                            "id": 1599,
                            "name": "MemberAccess",
                            "src": "12790:37:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 182,
                              "type": "address",
                              "value": "factory"
                            },
                            "id": 1600,
                            "name": "Identifier",
                            "src": "12828:7:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1588,
                              "type": "uint256",
                              "value": "amountIn"
                            },
                            "id": 1601,
                            "name": "Identifier",
                            "src": "12837:8:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1591,
                              "type": "address[] memory",
                              "value": "path"
                            },
                            "id": 1602,
                            "name": "Identifier",
                            "src": "12847:4:1"
                          }
                        ],
                        "id": 1603,
                        "name": "FunctionCall",
                        "src": "12790:62:1"
                      }
                    ],
                    "id": 1604,
                    "name": "Return",
                    "src": "12783:69:1"
                  }
                ],
                "id": 1605,
                "name": "Block",
                "src": "12773:86:1"
              }
            ],
            "id": 1606,
            "name": "FunctionDefinition",
            "src": "12659:200:1"
          },
          {
            "attributes": {
              "baseFunctions": [
                4072
              ],
              "documentation": null,
              "functionSelector": "1f00ca74",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "getAmountsIn",
              "scope": 1627,
              "stateMutability": "view",
              "virtual": false,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 1613,
                "name": "OverrideSpecifier",
                "src": "12938:8:1"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amountOut",
                      "overrides": null,
                      "scope": 1626,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 1607,
                        "name": "ElementaryTypeName",
                        "src": "12887:4:1"
                      }
                    ],
                    "id": 1608,
                    "name": "VariableDeclaration",
                    "src": "12887:14:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "path",
                      "overrides": null,
                      "scope": 1626,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "address[]",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "length": null,
                          "type": "address[]"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "address",
                              "stateMutability": "nonpayable",
                              "type": "address"
                            },
                            "id": 1609,
                            "name": "ElementaryTypeName",
                            "src": "12903:7:1"
                          }
                        ],
                        "id": 1610,
                        "name": "ArrayTypeName",
                        "src": "12903:9:1"
                      }
                    ],
                    "id": 1611,
                    "name": "VariableDeclaration",
                    "src": "12903:21:1"
                  }
                ],
                "id": 1612,
                "name": "ParameterList",
                "src": "12886:39:1"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amounts",
                      "overrides": null,
                      "scope": 1626,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "uint256[]",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "length": null,
                          "type": "uint256[]"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint",
                              "type": "uint256"
                            },
                            "id": 1614,
                            "name": "ElementaryTypeName",
                            "src": "12956:4:1"
                          }
                        ],
                        "id": 1615,
                        "name": "ArrayTypeName",
                        "src": "12956:6:1"
                      }
                    ],
                    "id": 1616,
                    "name": "VariableDeclaration",
                    "src": "12956:21:1"
                  }
                ],
                "id": 1617,
                "name": "ParameterList",
                "src": "12955:23:1"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 1617
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "uint256[] memory",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[] memory"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "getAmountsIn",
                              "referencedDeclaration": 4718,
                              "type": "function (address,uint256,address[] memory) view returns (uint256[] memory)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4719,
                                  "type": "type(library MoonwalkerswapV2Library)",
                                  "value": "MoonwalkerswapV2Library"
                                },
                                "id": 1618,
                                "name": "Identifier",
                                "src": "12996:23:1"
                              }
                            ],
                            "id": 1619,
                            "name": "MemberAccess",
                            "src": "12996:36:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 182,
                              "type": "address",
                              "value": "factory"
                            },
                            "id": 1620,
                            "name": "Identifier",
                            "src": "13033:7:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1608,
                              "type": "uint256",
                              "value": "amountOut"
                            },
                            "id": 1621,
                            "name": "Identifier",
                            "src": "13042:9:1"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1611,
                              "type": "address[] memory",
                              "value": "path"
                            },
                            "id": 1622,
                            "name": "Identifier",
                            "src": "13053:4:1"
                          }
                        ],
                        "id": 1623,
                        "name": "FunctionCall",
                        "src": "12996:62:1"
                      }
                    ],
                    "id": 1624,
                    "name": "Return",
                    "src": "12989:69:1"
                  }
                ],
                "id": 1625,
                "name": "Block",
                "src": "12979:86:1"
              }
            ],
            "id": 1626,
            "name": "FunctionDefinition",
            "src": "12865:200:1"
          }
        ],
        "id": 1627,
        "name": "ContractDefinition",
        "src": "348:12719:1"
      }
    ],
    "id": 1628,
    "name": "SourceUnit",
    "src": "0:13068:1"
  },
  "compiler": {
    "name": "solc",
    "version": "0.6.6+commit.6c089d02.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.4.1",
  "updatedAt": "2022-01-17T23:40:22.147Z",
  "devdoc": {
    "methods": {}
  },
  "userdoc": {
    "methods": {}
  }
}